mtk ccu调试

参考平台:MT6765Q

一、概念

CCU(Camera Control Unit,相机控制单元),用来控制相机拍出来的画面

二、简介

mtk的ccu有单独的mcu,在CCU中跑AE相关运算,可以省掉CPU的AE运算时间。

  • 通过ccu调用i2c接口写入sensor的shutter和gain。可以省掉cpu调用i2c接口的时间,但不能加速AE收敛;

  • 在ccu中跑AE Algo,可以省掉cpu跑AE Algo的时间,而且可以加速AE收敛;

  • 不同平台之间,有的平台强制跑CCU AE Algo,有的则可以切到CPU AE Algo。

三、ccu rules

由于CCU driver 由系统工具根据sensor driver 自动生成,故而ccu要求image sensor driver遵守以下rules:

1.无论添加的sensor驱动文件名字是什么,在kd_imgsensor.h定义的sensor driver name必须和驱动文件名一致。比如添加gc5025的驱动文件名为"gc5025_mipi_raw",则kd_imgsensor.h中应该作如下定义:


#define SENSOR_DRVNAME_GC5025_MIPI_RAW  "gc5025_mipi_raw"

2.驱动文件中.c和.h文件除去.c/.h后缀后名字应该保持一致

如:gc5025mipiraw_Sensor.c和gc5025mipiraw_Sensor.h

3.驱动文件中应该使用ccu支持的函数,除了以下白名单中的函数:

  • iWriteRegI2C

  • iWriteRegI2CTiming

  • iReadRegI2C

  • iReadRegI2CTiming

  • fls

4.驱动文件中使用的宏必须先在sensor驱动.c/.h中声明,不允许使用在其他文件中定义的宏

四、相关FAQ

1.开启ccu log

adb root
adb shell setprop vendor.debug.drv.ccu_drv 5
adb shell setprop vendor.debug.ccuif.ccu_drv 5
adb shell pkill camera*

注意:ccu log打印在main log中,在main log中搜索"I2C wr dump",就可以看到ccu写给sensor的register值了。

2.更新shutter和gain函数后,快速编译ccu lib的方法

由于ccu的代码跑在自己的mcu中,会对kernel driver中shutter和gain相关的函数单独编译。此时只编译bootimage无法更新ccu的内容,shutter和gain的修改不能生效。此时要么全编代码要么快速变异ccu lib,方法如下:

1)清掉旧的ccu lib文件

$out/target/product/$platform/obj_arm/EXECUTABLES/libccu_$sensor_name.dm_intermediates
$out/target/product/$platform/obj_arm/EXECUTABLES/libccu_$sensor_name.pm_intermediates
$out/target/product/$platform/obj_arm/EXECUTABLES/libccu_$sensor_name_intermediates

2)部分编译ccu_tool目录

3) 把新生成的下面内容,push到手机内(system/vendor/bin)

$out/target/product/$platform/vendor/bin/libccu_$sensor_name.dm
$out/target/product/$platform/vendor/bin/libccu_$sensor_name.pm

3.mt6765关闭ccu

修改文件关闭CCU总开关

alps/vendor/mediatek/proprietary/hardware/libcamera_ext/ccu/mt6765/ver1/drv/src/ccuif/src/ccu_mgr.cpp

void CcuMgr::_checkCcuEnable()
{
    CcuMgr::IsCcuMgrEnabled = false;
    char value[100] = {'\0'};
    //property_get("debug.ccu_mgr_ccu.enable", value, "1");  
    property_get("debug.ccu_mgr_ccu.enable", value, "0"); // 把ccu 的总开关关闭。
    CcuMgr::IsCcuMgrEnabled = atoi(value);
}

 

你可能感兴趣的:(android,mtk)