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

发布于:2025-06-09 ⋅ 阅读:(24) ⋅ 点赞:(0)

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 文件有哪些内容,源码文件都不大,逻辑也不复杂的。然后整理分类下部分 类 有哪些内容,做什么的。
在这里插入图片描述

源码文件 类描述
RadioPreference video quality radio preference.
VideoQuality VideoQuality setting item
VideoQualityCaptureRequestConfig Configure video quality in capture request in camera api2.
VideoQualityEntry Video quality entry.
VideoQualityHelper Video quality helper to provide util methods.
VideoQualitySelector Video quality selector.
VideoQualitySettingView Video 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 , 拍照和录屏 也是基本一样的思路,代码逻辑。 这里不是重点,暂不讨论。深究其它部分这里就不参与了。