编译配置
关闭闪光灯
ProjectConfig.mk
CUSTOM_HAL_FLASHLIGHT = dummy_flashlight CUSTOM_KERNEL_FLASHLIGHT = dummy_flashlight
android.hardware.camera.xml
注释掉:<feature name=”android.hardware.camera.flash” />
打开闪光灯
ProjectConfig.mk
CUSTOM_HAL_FLASHLIGHT = constant_flashlight CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight
android.hardware.camera.xml
确保:<feature name=”android.hardware.camera.flash” />
flash_tuning_custom.cpp解析
作用
主要用于设定闪光灯强度、亮度、闪光灯预闪
函数
cust_isNeedAFLamp
return 1 //打开触摸对焦辅助灯 return 0 //关闭触摸对焦辅助灯
cust_getFlashProjectPara
duty //占空比,数值越大,电流越大 step //阻抗,数值越大,电阻越小,电流越大 para.coolTimeOutPara.tabId[2]=12; //分段管理,第三段duty值为12 para.coolTimeOutPara.coolingTM[2]=2; //分段保护,第三段冷却时间为发光持续时间两倍 para.coolTimeOutPara.timOutMs[2]=600; //分段持续时间,第三段发光时间最多为600ms para.maxCapExpTimeUs=50000;//66000; //最大曝光时间
Flashlight Kernel Driver
MTK PMIC/GPIO Flashlight IC
constant_flashlight_open
fl_Init(); timerInit();
constant_flashlight_ioctl
FLASH_IOC_SET_TIME_OUT_TIME_MS FLASH_IOC_SET_DUTY //fl_dim_duty()设置电流 FLASH_IOC_SET_STEP //fl_step()设置阻抗 FLASH_IOC_SET_ONOFF //fl_enable 开关
constant_flashlight_release
fl_uninit()
flash_tuning_custom_cct.cpp解析
作用
太暗或太亮、ISO过高、曝光时间过长、预闪太久
函数
getDefaultStrobeNVRam
engTab[] //存储闪光灯段数亮度
//tuning para 所有值为-10到10 yTar //闪光灯AE target,AE收敛值,值越大,亮度越高 antiIsoLevel //值越大,ISO越低 antiExpLevel //值越大,曝光时间越短 antiStrobeLevel //值越大,曝光时间越长 antiUnderLevel //值越大,画面越亮、越容易过曝 antiOverLevel //值越大,画面越暗 foregroundLevel //加强主体权重,值越大,前景越重要 isRefAfDistance //尚未开放 accuracyLevel //值越高,比较暗的场景preflash的时间会变长,画面亮度较亮
LOG解析
搜索Flashlight
preiew log
setOnOff() isOn = 1 //预闪打开 keyword:VsyncUpdate setOnOff() isOn = 0 //预闪关闭 keyword:PrecaptureEnd
Capture log
setOnOff() isOn = 1 //主闪打开 keyword:CaptureStart setOnOff() isOn = 0//主闪打开 keyword:CaptureEnd
ISSUE汇总
闪光灯异常闪烁
解决:到MTK申请patch ALPS00477654
APK手电筒无法打开闪光灯
解决:到MTK申请patch ALPS00507478
video flash异常
解决:到MTK申请patch ALPS00497611
开闪光灯拍照,概率性黑片
解决:到MTK申请patch ALPS00488383
外挂Flash,连拍闪光灯发热量大,导致重启
解决:根据flash_tuning_custom.cpp文件中定义的duty(pfduty = 0 mfdupy = 1)值来判断是flash/torch mode,区分主闪和预闪
开闪光灯拍照概率性死机重启
解决:fl_init函数中添加timeout保护函数:
INIT_WORK(&workTimeOut, work_timeOutFunc);