本文最后更新于:2024年5月31日 下午
由于项目的摄像头在预览时如果放大太多倍(比如放大4倍或者8倍)会出现模糊的情况,所以我们需要做出限制,修改Camera的最大变焦倍数。(以下示例为Android13 MTK平台)
一、前摄后摄都修改
第一种修改方案:
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 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 = 2.0f ; LogHelper.d(TAG, "[setCameraCharacteristics] MaxZoom: " + mMaxZoom); 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()
因为不可能,所以才值得相信。