Android 修改Camera的最大变焦倍数

本文最后更新于:2024年5月31日 下午

   由于项目的摄像头在预览时如果放大太多倍(比如放大4倍或者8倍)会出现模糊的情况,所以我们需要做出限制,修改Camera的最大变焦倍数。(以下示例为Android13 MTK平台)

一、前摄后摄都修改

  1. 第一种修改方案:
1
vendor/vendor/mediatek/proprietary/custom/common/hal/imgsensor_metadata/common/config_static_metadata_scaler.h

例如我们这里修改的就是4倍

1
2
3
4
5
//==========================================================================
CONFIG_METADATA_BEGIN(MTK_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)
CONFIG_ENTRY_VALUE(4, MFLOAT) //此参数表示最大支持变焦数
CONFIG_METADATA_END()
//==========================================================================
  1. 第二种修改方案:
1
vendor/vendor/mediatek/proprietary/packages/apps/Camera2/feature/setting/zoom/src/com/mediatek/camera/feature/setting/zoom/ZoomCaptureRequestConfig.java

   将mMaxZoom变量重新赋值为我们想要的变焦倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override
public void setCameraCharacteristics(CameraCharacteristics characteristics) {
//........省略多余代码.........

} else {
mMaxZoom = characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);
}
LogHelper.d(TAG, "[setCameraCharacteristics] MaxZoom: " + mMaxZoom);

//将mMaxZoom重新赋值
mMaxZoom = 2.0f; //此参数表示最大支持变焦数
LogHelper.d(TAG, "[setCameraCharacteristics] MaxZoom: " + mMaxZoom);

//judge whether support zoom ratio or not
Range<Float> zoomRatioRange =characteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE);
mZoomRatioSupported = zoomRatioRange != null && zoomRatioRange.getUpper() >0;

//........省略多余代码.........

二、只修改前摄或后摄

   首先,我们要找到项目中所用到的前摄、后摄的目录名称是什么。例如我当前的项目的前摄是在gc05a2_mipi_raw目录下,那么我们就找到其中的metadata.sensor文件去修改即可。

   那知道项目中前摄后摄的目录是哪一个怎么办?

   我们在vendor/vendor/device/xxxx/类似这样的目录中去找到ProjectConfig.mk,里面的CUSTOM_HAL_IMGSENSOR和CUSTOM_KERNEL_IMGSENSOR这两个字段里面就包含前后摄的目录名称。

类似于这样

1
2
CUSTOM_HAL_IMGSENSOR = gc13a0_mipi_raw gc05a2_mipi_raw gc02m1_mipi_raw ov9281_mipi_raw
CUSTOM_KERNEL_IMGSENSOR = gc13a0_mipi_raw gc05a2_mipi_raw gc02m1_mipi_raw ov9281_mipi_raw
1
vendor/vendor/mediatek/proprietary/custom/common/hal/imgsensor_metadata/sensor/gc05a2_mipi_raw/config_static_metadata.sensor.gc05a2mipiraw.h

   在config_static_metadata.sensor.gc05a2mipiraw.h文件中加上这样的修改,这样就相当于前摄我们修改为了最大两倍。在编译时,这里配置的变量会覆盖掉common目录中的,所以最终会以这里修改的为准。

1
2
3
4
5
//==========================================================================
CONFIG_METADATA_BEGIN(MTK_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)
CONFIG_ENTRY_VALUE(2, MFLOAT) //此参数表示最大支持变焦数
CONFIG_METADATA_END()
//==========================================================================
因为不可能,所以才值得相信。

Android 修改Camera的最大变焦倍数
http://example.com/2024/04/28/Android 修改Camera的最大变焦倍数/
作者
阿波~
发布于
2024年4月28日
更新于
2024年5月31日
许可协议