MTK-Android12-13 Camera2 设置默认视频画质功能实现

news2025/6/10 0:35:08

MTK-Android12-13 Camera2 设置默认视频画质功能实现
场景:部分客户使用自己的mipi相机安装到我们主板上,最大分辨率为1280720,但是视频画质默认的是640480。实际场景中,在默认视频分辨率情况下拍出来的视频比较模糊、预览也不清晰
解决方案:默认最大分辨率,这样拍摄的视频效果基本满足需求

文章目录

  • 需求
  • 参考资料
  • 解决方案
    • 修改文件
    • 解决方案
  • 思路
    • 追踪源码
    • 源码分析
  • 总结


需求

默认视频画质大小最大,默认为1280*720,如下实际默认的画质图。
在这里插入图片描述

参考资料

实际发现网上参考资料基本没有,最终还是需要死啃源码,在源码里面找答案。
Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现

这里自己从两方面参考资料:源码里面找视频画质相关代码+参考拍照时候的业务逻辑,特别是默认拍照尺寸的业务逻辑有一些借鉴意义,实际上默认的代码思路是一样的。 可以相互对比来看,分析逻辑和代码。

解决方案

修改文件

路径:

\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\videoquality\src\com\mediatek\camera\feature\setting\videoquality\VideoQualityCaptureRequestConfig.java

解决方案

最终分析代码,发现默认分辨率逻辑是获取视频默认质量地方修改,默认选择支持分辨率第二大的选项,现在默认index=0,屏蔽掉 defaultIndex=1 的逻辑

   /**
     * Get the max size as default value of video quality.
     * @return getDefaultValue.
     */
    private String getDefaultQuality() {
        int defaultIndex = 0;
        /*if (mVideoQuality.getSupportedPlatformValues().size() > QUALITY_INDEX_NUMBER) {
            defaultIndex = 1;
        }*/
        String defaultSize = mVideoQuality.getSupportedPlatformValues().get(defaultIndex);
        return defaultSize;
    }

思路

  • 先从界面开始,找到对应的文件,如何找到对应的界面? 那就adb 来实现,找其中的Fragment【Camera2
    源码以前跟踪过,就一个Activity】,所以核心是找到对应的Fragment
  • 假使找到了对应的Fragment,再从源码里面找到对应的源码位置和相关联文件,研习源码,看逻辑和业务。
    如下,图片是自己的思路,方便大家提供一个类似的解决问题思路。

追踪源码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
跟踪到这里,我们基本上找到这个类在源码里面的位置了,那我们就跟踪过去,看看都有啥?
在这里插入图片描述

找到这个目录,基本心理有底了,这里不就是全部跟quality(质量)相关的源码了嘛。

源码分析

大家可以看一下videoquality 目录下面每一个java 文件有哪些内容,源码文件都不大,逻辑也不复杂的。然后整理分类下部分 类 有哪些内容,做什么的。
在这里插入图片描述

源码文件类描述
RadioPreferencevideo quality radio preference.
VideoQualityVideoQuality setting item
VideoQualityCaptureRequestConfigConfigure video quality in capture request in camera api2.
VideoQualityEntryVideo quality entry.
VideoQualityHelperVideo quality helper to provide util methods.
VideoQualitySelectorVideo quality selector.
VideoQualitySettingViewVideo quality setting view.

上面分析了每个源码的类注释,其实也已经描述的非常明白了的,每个类文件有哪些作用等。 处于对源码的敏感,以前经验告诉自己:Camera2 API 实现相机逻辑、参数设置,都是基于session,设置参数 Capture 来实现的。 正好这里 有一个类 VideoQualityCaptureRequestConfig.java 类。再看一下每个方法,居然发现了一个方法,如下:

   /**
     * Get the max size as default value of video quality.
     * @return getDefaultValue.
     */
    private String getDefaultQuality() {
        int defaultIndex = 0;
        if (mVideoQuality.getSupportedPlatformValues().size() > QUALITY_INDEX_NUMBER) {
            defaultIndex = 1;
        }
        String defaultSize = mVideoQuality.getSupportedPlatformValues().get(defaultIndex);
        return defaultSize;
    }

这就解释了,为啥每次都是默认第二个选中,那么 屏蔽到 默认选中第二,defaultIndex=1 这个逻辑改成默认第一个不就行嘛,实际确实如此,默认defaultIndex 为0 。 编译、打包项目源码生成固件,问题解决。

总结

  • 对比图片默认拍摄大小,逻辑一样的,都是在获取默认分辨率的地方,进行修改。 如下图 足以说明 拍照和录像默认质量、分辨率
    其实逻辑一样的,修改默认值即可。

在这里插入图片描述

  • 设置默认值的这个过程中,有很多逻辑的,比如setValue , 拍照和录屏 也是基本一样的思路,代码逻辑。 这里不是重点,暂不讨论。深究其它部分这里就不参与了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux知识回顾总结----进程状态

本章将会介绍进程的一些概念:冯诺伊曼体系结构、进程是什么,怎么用、怎么表现得、进程空间地址、物理地址、虚拟地址、为什么存在进程空间地址、如何感性得去理解进程空间地址、环境变量是如何使用的。 目录 1. 冯诺伊曼体系结构 1.1 是什么 1.2 结论 …

Linux 进程管理学习指南:架构、计划与关键问题全解

Linux 进程管理学习指南:架构、计划与关键问题全解 本文面向初学者,旨在帮助你从架构视角理解 Linux 进程管理子系统,构建系统化学习路径,并通过结构化笔记方法与典型问题总结,夯实基础、明确方向,逐步掌握…

Git 使用大全:从入门到精通

Git 是目前最流行的分布式版本控制系统,被广泛应用于软件开发中。本文将全面介绍 Git 的各种功能和使用方法,包含大量代码示例和实践建议。 文章目录 Git 基础概念版本控制系统Git 的特点Git 的三个区域Git 文件状态 Git 安装与配置安装 GitLinuxmacOSWi…

奈飞工厂官网,国内Netflix影视在线看|中文网页电脑版入口

奈飞工厂是一个专注于提供免费Netflix影视资源的在线播放平台,致力于为国内用户提供的Netflix热门影视内容。该平台的资源与Netflix官网基本同步,涵盖电影、电视剧、动漫和综艺等多个领域。奈飞工厂的界面简洁流畅,资源分类清晰,方…

Python基于蒙特卡罗方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融投资中,风险管理是确保资产安全和实现稳健收益的关键环节。随着市场波动性的增加,传统…

【学习记录】Office 和 WPS 文档密码破解实战

文章目录 📌 引言📁 Office 与 WPS 支持的常见文件格式Microsoft Office 格式WPS Office 格式 🛠 所需工具下载地址(Windows 官方编译版)🔐 破解流程详解步骤 1:提取文档的加密哈希值步骤 2&…

AGV|无人叉车工业语音播报器|预警提示器LBE-LEX系列性能与接线说明

LBE-LEX系列AGV|无人叉车工业语音播报器|预警提示器,涵盖LBE-LEI-M-00、LBE-LESM-00、LBE-LES-M-01、LBE-LEC-M-00、LBE-KEI-M-00、LBE-KES-M-00、LBE-KES-M-01、LBE-KEC-M-00等型号,适用于各种需要语音提示的场景,主要有AGV、AMR机器人、无人…

【电路笔记】-变压器电压调节

变压器电压调节 文章目录 变压器电压调节1、概述2、变压器电压调节3、变压器电压调节示例14、变压器电压调节示例25、变压器电压调节示例36、总结变压器电压调节是变压器输出端电压因连接负载电流的变化而从其空载值向上或向下变化的比率或百分比值。 1、概述 电压调节是衡量变…

多层PCB技术解析:从材料选型到制造工艺的深度实践

在电子设备集成度与信号传输要求不断提升的背景下,多层PCB凭借分层布局优势,成为高速通信、汽车电子、工业控制等领域的核心载体。其通过导电层、绝缘层的交替堆叠,实现复杂电路的立体化设计,显著提升空间利用率与信号完整性。 一…

(33)课54:3 张表的 join-on 连接举例,多表查询总结。数据库编程补述及游标综合例题。静态 sqL与动态sqL(可带参数)

(112)3 张表的 join-on 连接举例 : (113) 多表查询总结 : (114)数据库编程补述 : 综合例题 : 以上没有动手练习,不知道这样的语法是否…

centos挂载目录满但实际未满引发系统宕机

测试服务器应用系统突然挂了,经过排查发现是因为磁盘“满了”导致的,使用df -h查看磁盘使用情况/home目录使用率已经到了100%,但使用du -sh /home查看发现实际磁盘使用还不到1G,推测有进程正在写入或占用已删除的大文件(Linux 系统…

KKCMS部署

目录 账号 网站目录 快看CMS使用手册 http://10.141.19.241/kkcms/install/ 常规思路:页面点点观察url变化,参数 常规思路:点一个功能模块抓包看什么东西,正确是什么样,错误的是什么样,构造参数。 账号…

【web笔记】JavaScript实现有动画效果的进度条

文章目录 1 实现效果2 实现代码 1 实现效果 2 实现代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><style>#progress {width: 300px;height: 20px;border-radius: 0; /* 移除圆角 */-webkit-appearance…

安装最新elasticsearch-8.18.2

1.环境我的环境是linux麒麟服务器 (安装 es 7.8以上 java环境必须11以上,可以单独配置es的java目录) 2.下载 官网的地址:下载 Elastic 产品 | Elastic Download Elasticsearch | Elastic Elasticsearch 入门 | Elasticsearch 中文文档 文档 3.我下载的是8.18的 Elasti…

Polarctf2025夏季赛 web java ez_check

第一次自己做出一个java&#xff0c;值得小小的记录&#xff0c;polar的java真得非常友好 反编译jar包&#xff0c;一眼就看到有个/deserialize 路由&#xff0c;接受base64的序列化数据&#xff0c;base64解码后 经过一次kmp检查&#xff0c;再由SafeObjectInputStream来反序列…

vue3+el-table 利用插槽自定义数据样式

<el-table-column label"匹配度" prop"baseMatchingLevel"><template #default"scope"><div :style"{ color: scope.row.baseMatchingLevel > 0.8 ? #00B578 : #FA5151 }">{{ scope.row.baseMatchingLevel }}&l…

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(八)

uboot启动异常及解决 网络问题及解决 打开STM32CubeMX选中ETH1 - A7NS&#xff08;Linux&#xff09;Mode&#xff1a;RGMII&#xff08;Reduced GMII&#xff09;勾选ETH 125MHz Clock Input修改GPIO引脚如图所示 Net: No ethernet found.生成代码后&#xff0c;修改u-boot下…

CodeBuddy一腾讯内部已有超过 85% 的程序员正在使用de编程工具

大家好&#xff0c;我是程序员500佰&#xff0c;目前正在前往独立开发路线&#xff0c;我会在这里分享关于编程技术、独立开发、技术资讯以及编程感悟等内容。 如果本文能给你提供启发和帮助&#xff0c;还请留下你的一健三连&#xff0c;给我一些鼓励&#xff0c;谢谢。 本文直…

leetcode238-除自身以外数组的乘积

leetcode 238 思路 可以在不使用除法的情况下&#xff0c;利用前缀积和后缀积来实现解答 前缀积&#xff1a;对每个位置&#xff0c;计算当前数字左侧的所有数字的乘积后缀积&#xff1a;对每个位置&#xff0c;计算当前数字右侧的所有数字的乘积 结合这两种思想&#xff0…

论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers

TitanFuzz 论文 深度学习库&#xff08;TensorFlow 和 Pytorch&#xff09;中的 bug 对下游任务系统是重要的&#xff0c;保障安全性和有效性。在深度学习&#xff08;DL&#xff09;库的模糊测试领域&#xff0c;直接生成满足输入语言(例如 Python )语法/语义和张量计算的DL A…