Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现
需求:
默认相机拍照尺寸
需求原因
1)客户自身喜好
2)部分客户自己的摄像头不兼容,比如拍照尺寸太大会卡顿,拉丝等现象

参考资料
Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现
Android 11.0 MTK Camera2 设置默认拍照尺寸功能实现
这两篇文章介绍的蛮好的,可以看看,对于类似需求同理也可以按照改一改? 为什么有些会默认最高分辨率拍照,可能原因在于手机端产品为了最好的拍摄效果,尺寸会默认到最大。
对于Camera2 开发,遇到的困难点就是源码代码量太多,对于很多同事来说就是一脸懵逼,建议多积累一定的代码量,掌握基本的知识。
架构图了解
MTKCamera2相机架构
Camera2架构
Android Camera架构简析
Camera相关专栏
Camera Framework 专栏
小驰私房菜系列
小驰私房菜MTK系列
小驰Camera 开发系列
Camera 相机开发
展讯平台 Camera
官方文档:谷歌官方 API 描述
零散知识了解
MTK 相机UI介绍
Camera2 相机认知
Camera2学习笔记
camera2关于拍照预览方向旋转90度和拍照图片镜像功能实现
Camera2 预览集成、简单拍照:熟悉预览步骤流程比较有用
Camera镜像上下左右颠倒问题的解决办法
MTK相机成像质量差
Camera应用分析
部分相机源码参考,学习API使用,梳理流程,偏应用层
极客相机 Camera2 API
Camera2 API详解
极客相机源码
Camera2 相机Demo
Camera2 专业相机Demo
拍照、预览、录像Demo
使用Camera2 拍照
Camera2 系统相关
修改文件-修改方案
修改文件:
\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\picturesize\src\com\mediatek\camera\feature\setting\picturesize\PictureSize.java
\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\picturesize\src\com\mediatek\camera\feature\setting\picturesize\PictureSizeHelper.java
修改内容:
PictureSize.java onValueInitialized 方法
在 onValueInitialized 方法中,默认valueInStore 中调用PictureSizeHelper 类中自定义的 getCustomDefault 方法
if (valueInStore == null) {
// Default picture size is the max full-ratio size.
- List<String> entryValues = getEntryValues();
+ LogHelper.d(TAG, "valueInStore == null Default picture size is the max full-ratio size:");
+ /*List<String> entryValues = getEntryValues();
for (String value : entryValues) {
if (PictureSizeHelper.getStandardAspectRatio(value) == fullRatio) {
valueInStore = value;
+ LogHelper.d(TAG, "valueInStore == null:valueInStore:"+valueInStore);
break;
}
- }
+ }*/
+ valueInStore =PictureSizeHelper.getCustomDefault(getEntryValues());
+
}
PictureSizeHelper.java getCustomDefault 方法
自定义 getCustomDefault 方法,设置默认分辨率。 这里直接写死,或者 根据客需要求设置为最大、最小 等。
public static String getCustomDefault(List<String> supportedEntryValues){
for (int i=0;i< supportedEntryValues.size();i++) {
/*Size size = valueToSize(supportedEntryValues.get(i));
temp = size.width * size.height;
if (temp > maxSize) {
maxSize = temp;
maxIndex = i;
}*/
LogHelper.d(TAG, "getCustomDefault:" +supportedEntryValues.get(i));
}
return "1920x1088";
}
源码分析
设置拍照尺寸的核心类
\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\picturesize\src\com\mediatek\camera\feature\setting\picturesize\PictureSize.java
\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\picturesize\src\com\mediatek\camera\feature\setting\picturesize\PictureSizeHelper.java
\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\picturesize\src\com\mediatek\camera\feature\setting\picturesize\PictureSizeSettingView.java
源码逐步分析
关联的照片大小搜索
grep -rn 照片大小

找到如下路径相关关键字:照片大小
feature/mode/vsdof/res/values-zh-rCN/strings.xml
<string name="sdof_picture_size_title">"照片大小"</string>
feature/setting/picturesize/res/values-zh-rCN/strings.xml
<string name="pref_camera_picturesize_title">"照片大小"</string>
PictureSizeSelector
上面已经找到了两个关键字,这里先根据第一个关键字找一下源码:
路径:
/vendor/mediatek/proprietary/packages/apps/Camera2/feature/setting/picturesize/src/com/mediatek/camera/feature/setting/picturesize/PictureSizeSelector.java
R.string.pref_camera_picturesize_title

我们看类定义:
/**
* Picture size selector.
*/
public class PictureSizeSelector extends PreferenceFragment {
就是图片大小选择器
对应的是如下界面:

既然是这个界面,那就看一下点击选中方法和进入这个界面的设置方法
进入界面选中的逻辑
这里关联的有四个方法,对应的进入界面选中逻辑:
@Override
public void onCreate(Bundle savedInstanceState) {
LogHelper.d(TAG, "[onCreate]");
super.onCreate(savedInstanceState);
prepareValuesOnShown();
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
if (toolbar != null) {
toolbar.setTitle(getActivity().getResources()
.getString(R.string.pref_camera_picturesize_title));
}
addPreferencesFromResource(R.xml.picturesize_selector_preference);
PreferenceScreen screen = getPreferenceScreen();
for (int i = 0 ; i < mEntryValues.size(); i++) {
RadioPreference preference = new RadioPreference(getActivity());
if (mEntryValues.get(i).equals(mSelectedValue)) {
preference.setChecked(true);
}
LogHelper

最低0.47元/天 解锁文章
1627

被折叠的 条评论
为什么被折叠?



