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

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.pswp.cn/bicheng/84205.shtml

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

相关文章

QtDBus模块功能及架构解析

Qt 6.0 中的 QtDBus 模块是一个用于进程间通信(IPC)的核心模块,它基于 D-Bus 协议实现。D-Bus 是一种在 Linux 和其他类 Unix 系统上广泛使用的消息总线系统,允许应用程序和服务相互通信。 一、QtDBus模块主要功能: 1…

Spring AI 项目实战(六):Spring Boot + AI + DeepSeek 打造智能成语接龙游戏(附完整源码)

系列文章 序号文章名称1Spring AI 项目实战(一):Spring AI 核心模块入门2Spring AI 项目实战(二):Spring Boot + AI + DeepSeek 深度实战(附完整源码)3Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)4Spring AI 项目实战(四…

【HarmonyOS 5】教育开发实践详解以及详细代码案例

以下是基于 ‌HarmonyOS 5‌ 的教育应用开发实践详解及核心代码案例,结合分布式能力与教育场景需求设计: 一、教育应用核心开发技术 ‌ArkTS声明式UI‌ 使用 State 管理学习进度状态,LocalStorageProp 实现跨页面数据同步(如课程…

【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】

鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API。 // 导入需要的模块 import fs from ohos.file.fs;const TAG"Index" Entry Component struct Index {State message: string Hello World;build() {Row() {Colum…

11. vue pinia 和react redux、jotai对比

对比 Vue 的 Pinia,和 React 的 Redux、Jotai,分中英文简要介绍、特性、底层原理、使用场景。 简单介绍 1.1 Pinia(Vue) • 英文:Pinia is the official state management library for Vue 3, designed to be simple…

OPenCV CUDA模块目标检测----- HOG 特征提取和目标检测类cv::cuda::HOG

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::HOG 是 OpenCV 的 CUDA 模块中对 HOG 特征提取和目标检测 提供的 GPU 实现。它与 CPU 版本的 cv::HOGDescriptor 类似,但利…

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…

【QT】QT多语言切换

QT多语言切换 1.创建任意一个项目2. 利用lupdate(language update)工具生成.ts文件2.1 在工程中的.pro文件中指定.ts文件要存放的位置2.2 选择工具--》外部--》Qt语言家--》更新翻译 3. 利用 lrelease(Language Release)将 .ts 文…

【差分】详解二维前缀和和差分问题

文章目录 1. 二维前缀和2. 公式推导3. LeetCode 304 二维区域和检索 - 矩阵不可变3.1 304 二维区域和检索 - 矩阵不可变3.2 LeetCode 1139 最大的以 1 为边界的正方形 4. 二维差分问题5. 二维差分的原理以及差分数组计算6. 题目6.1 牛客二维差分6.2 LeetCode 2132. 用邮票贴满网…

Unity 大型手游碰撞性能优化指南

Unity 大型手游碰撞性能优化指南 版本: 2.1 作者: Unity性能优化团队 语言: 中文 前言 在Unity大型手游的开发征途中,碰撞检测如同一位隐形的舞者,它在游戏的物理世界中赋予物体交互的灵魂。然而,当这位舞者的舞步变得繁复冗余时,便会悄然消耗宝贵的计算资源,导致帧率下…

【hive】函数集锦:窗口函数、列转行、日期函数

窗口函数 https://www.cnblogs.com/Uni-Hoang/p/17411313.html <窗口函数> OVER ([PARTITION BY <分组列> [, <分组列>...]][ORDER BY <排序列> [ASC | DESC] [, <排序列> [ASC | DESC]]...][<rows or range clause>]) )窗口函数主要是…

DAY 25 异常处理

目录 DAY 25 异常处理1.异常处理机制2.debug过程中的各类报错3.try-except机制4.try-except-else-finally机制作业&#xff1a;理解今日的内容即可&#xff0c;可以检查自己过去借助ai写的代码是否带有try-except机制&#xff0c;以后可以尝试采用这类写法增加代码健壮性。 DAY…

几何绘图与三角函数计算应用

几何绘图与三角函数计算应用 设计思路 左侧为绘图控制面板&#xff0c;右侧为绘图区域支持绘制点、线、矩形、圆、多边形等基本几何图形实现三角函数计算器&#xff08;正弦、余弦、正切等&#xff09;包含角度/弧度切换和常用数学常数历史记录功能保存用户绘图 完整实现代码…

CSS 定位:原理 + 场景 + 示例全解析

一. 什么是CSS定位? CSS中的position属性用于设置元素的定位方式,它决定了元素在页面中的"定位行为" 为什么需要定位? 常规布局(如 display: block)适用于主结构 定位适用于浮动按钮,弹出层,粘性标题等场景帮助我们精确控制元素在页面中的位置 二. 定位类型全…

GESP 二级复习参考 A

本教程完整包含&#xff1a; 5000字详细知识点解析 36个Python/C双语言示例 15个GESP真题及模拟题 8张专业图表和流程图 # C编程二级标准终极教程## 一、计算机存储系统深度解析### 1.1 存储体系架构 mermaid graph TDA[CPU寄存器] --> B[L1缓存 1-2ns]B --> C[L2缓…

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…

【人工智能 | 项目开发】Python Flask实现本地AI大模型可视化界面

文末获取项目源码。 文章目录 项目背景项目结构app.py(后端服务)index.html(前端界面)项目运行项目图示项目源码项目背景 随着人工智能技术的快速发展,大语言模型在智能交互领域展现出巨大潜力。本项目基于 Qwen3-1.7B 模型,搭建一个轻量化的智能聊天助手,旨在为用户提…

【设计模式】1.简单工厂、工厂、抽象工厂模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 以下是 简单工厂模式、工厂方法模式 和 抽象工厂模式 的 Python 实现与对比&#xff0c;结合代码示例和实际应用场景说明&#xff1a; 1. 简单工厂模式&a…

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…

01.SQL语言概述

SQL 语言概述 SQL &#xff08;Structured Query Language&#xff09;结构化査询语言 1. 关系型数据库的常见组件 数据库: database 表的集合&#xff0c;物理上表现为一个目录表: table&#xff0c;行: row 列: column索引: index视图: view&#xff0c;虚拟的表存储过程:…