高通camera调试经验总结

1. 关闭自动对焦

/* 不同系统可能会有差异 */
adb shell setprop vendor.debug.camera.af.manual 2  //使能手动对焦
adb shell setprop vendor.debug.camera.af.manual 0  //使能自动对焦

2. 手动调节曝光和帧率

// 1. 关闭自动曝光调节
adb root
adb remount
adb shell "echo disableAECStatsProcessing=1>>/vendor/etc/camera/camxoverridesettings.txt"
adb reboot // 或着kill camera进程
// 2. 手动修改曝光值,修改曝光值帧率也会相应发生变化
adb shell setprop vendor.debug.camera.aec.ctrl.expTime 33000000 //示例33ms,值越大曝光越大
// 3. 手动修改gain值
adb shell setprop vendor.debug.camera.aec.ctrl.gain 32.0 //示例32倍gain,该值调节亮度梯度,最小值为1.0
// 4. 开启曝光自动调节,即通过apk调节
adb root
adb remount
adb shell "echo disableAECStatsProcessing=0>>/vendor/etc/camera/camxoverridesettings.txt"
adb reboot // 或着kill camera进程

3.camx架构xml解析

文件路径 vendor/qcom/proprietary/camx/src/

4.打开CAM_DBG的log

4.1 开启方式一

/* 打开OIS log */
adb root && adb shell "echo 0x100000 > /sys/module/camera/parameters/debug_mdl"
/* 打开AF的log */
adb root && adb shell "echo 0x2000 > /sys/module/camera/parameters/debug_mdl"
/* 打开Sensor的log */
adb root && adb shell "echo 0x20 > /sys/module/camera/parameters/debug_mdl"

/* 打开OIS/AF/Sensor的log */
adb root && adb shell "echo 0x102020 > /sys/module/camera/parameters/debug_mdl"

/* 打开所有log方式1 */
adb root && adb shell "echo 0x1fffff > /sys/module/camera/parameters/debug_mdl"
/* 打开所有log方式2 */
adb shell setprop persist.vendor.camera.logVerboseMask 0xFFFFFFFF
adb shell setprop persist.vendor.camera.logInfoMask 0xFFFFFFFF

在这里插入图片描述

4.2 开启方式二

/* 开启上层log的命令格式如下:*/
adb shell setprop <setting> <value>
/* 开启AF debug log */
adb shell setprop persist.vendor.camera.logInfoMask 0x000002
/* 所有的camera debug log 遵循下面的格式: */
CamX: [<Verbosity Level>][<Group>] <File>:<Line Number> <Function Name> <Message>
/* 注意:有的配置需要杀 camera 进程 或者 重启设备 才能生效 */

camera driver debug log 分割成了很多组,每组对应很多的log,使能这部分log需要设置正确的bitmask,规则如下:

在这里插入图片描述

camera debug 调试技巧请参考博客:https://blog.csdn.net/shangbolei/article/details/106629827

4.3 AF对焦调试

调试AF过程中可能会遇到无法对焦的情况,如果手中恰巧没有逻辑分析仪等设备,debug会有一定困难。在此使用抓取log的方式可以粗略的先测试AF对焦值是否正确的下发

/* adb命令打开AF和CCI的相关log */
adb root && adb shell "echo 0x6000 > /sys/module/camera/parameters/debug_mdl"
/* 抓取log并过滤关键字。包含sid 0x0c或者MoveFocus或者cmd_size */
/* sid 0x0c表示AF从机地址0x0c */
adb shell "logcat -b all | grep -E 'sid 0x0c|MoveFocus|cmd_size'"
/* 打开相机,命令框会实时输出log */

log中关键字出现的位置

5. 脚本打开和关闭camera

通过adb 命令的形式打开和关闭camera有两种方式:
1. adb命令输入屏幕上打开和关闭camera坐标点;
2. adb命令开启和关闭对应的camera服务。

5.1 开启和关闭对应的camera服务

5.1.1 查询对应整机上camera对应的代号

adb root
adb remount
adb shell "getprop | grep cam"

在这里插入图片描述

有时会查询到多个代号,无法确认具体是哪一个,如下图所示。

在这里插入图片描述

此时需要通过top查询当前进程,输入下面命令,然后打开相机,观察显示的camera相关服务

adb root
adb remount
adb shell "top | grep cam"

在这里插入图片描述

5.1.2 编写脚本打开关闭camera

编写bat脚本,循环打开和关闭camera
使用goto跳转实现不计次数的循环执行

//拷贝下面脚本使用时,请删除注释部分
@echo off
adb root
adb remount
set start_time=%DATE:~0,4%.%DATE:~5,2%.%DATE:~8,2%-%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
set /a var=0 //初始化计数变量
:start //起始标志位,对应下面goto start
echo "Test open/close camera %var% times."
echo "open camera apk."
adb shell am start org.codeaurora.snapcam //snapcam为相机服务代号,查询方法参考5.2.1
choice /t 8 /d y /n >nul //延时8秒
echo "close camera apk."
adb shell am force-stop org.codeaurora.snapcam
choice /t 2 /d y /n > nul //延时2秒
set /a var=%var%+1 //变量值累加
set end_time=%DATE:~0,4%.%DATE:~5,2%.%DATE:~8,2%-%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
echo "save times log to file"
echo Loop_%var%_%end_time% >> open_close_camera_history_%start_time%.txt
echo "return to start position"
goto start //返回到上面的:start处,重新执行命令
pause

编写shell脚本

#!/bin/bash
adb wait-for-device
starttime=$(date +"%Y-%m-%d_%H_%M_%S")
time=$(date "+%m月%d日-%H时%M分%S秒")

echo "AW86006 test start ${time}"
for((j=1; j<=10000; j++))
do
	echo "Test open/close camera $j times."
	echo "open camera apk."
	adb shell am start org.codeaurora.snapcam
	sleep 5s
	echo "close camera apk."
	adb shell am force-stop org.codeaurora.snapcam
	sleep 1s
	endtime=$(date +"%Y-%m-%d :%H:%M:%S")
	echo "Loop: $j, endtime: ${endtime}" >> open_close_camera_history_"${starttime}".txt
done
sleep 600

5.2 输入坐标点打开关闭camera

1.开启手机开发者模式
2.开启显示屏幕坐标点功能,并记录需要点击的坐标点
3.adb 命令输入坐标点,实现自动点击屏幕上camera功能

5.2.1 启用开发者模式

1.打开设置
2.关于手机
3.版本号,快速点击多次即可看到提示进入开发者模式

在这里插入图片描述

5.2.2 开启坐标功能

1.进入开发者模式后
2.返回设置首页
3.系统和更新
4.开发者人员选项
5.打开显示触摸操作、指针位置。此时屏幕上方出现坐标值

在这里插入图片描述

5.2.3 adb 输入坐标命令

adb shell input tap X Y /* 输入X Y的坐标值 */

6. OIS/Sensor设置并行初始化

高通平台在初始化OIS和Sensor时,默认是串行模式,即初始化有先后顺序,如果OIS初始化时需要固件更新,更新时间内sensor无法正常初始化,会造成黑屏的现象,为了解决这个问题,可以将初始化设置成并行模式。

文件路径:sm8250_android_q_aosp/vendor/qcom/proprietary/camx/src/settings/
文件:g_camxsetting.xml,有些平台为camxsetting.xml

/* 搜索 OISOptimization,将DefaultValue和Dynamic改为TRUE */
        <setting>
            <Name>Enable OIS Optimization</Name>
            <Help> Enable OIS Optimization</Help>
            <VariableName>enableOISOptimization</VariableName>
            <VariableType>BOOL</VariableType>
            <SetpropKey>vendor.debug.camera.enableOISOptimization</SetpropKey>
            <DefaultValue>TRUE</DefaultValue>
            <Dynamic>TRUE</Dynamic>
        </setting>

7. 高通平台CCI的相关配置修改

修改CCI的i2c stretch、i2c占空比、i2时钟修改都在dtsi中
路径: vendor/qcom/proprietary/camera-devicetree/
文件: {工程名}-camera.dtsi

比如开发平台未kona,文件为kona-camera.dtsi

i2c stretch,i2c时钟延展,主机处理速度远大于从机处理速度,打开时钟延展为了让主机等待从机,直到从机处理完成。如果时钟延展关闭,可能会出现i2c timeout的问题。
占空比,i2c的占空比会影响i2c的稳定性,最好的比例是1:2,考虑到i2c stretch,在9:29时会更稳定

//找到需要修改的设备CCI对应的编号,此处用CCI 0示例
cam_cci0: qcom,cci@ac4f000 {
		cell-index = <0>;
		compatible = "qcom,cci";
		reg = <0xac4f000 0x1000>;
		reg-names = "cci";
		reg-cam-base = <0x4f000>;

		//找到对应i2c 频率,100K,400K,1M位置相同,在此以1MHz为例
		i2c_freq_1Mhz_cci0: qcom,i2c_fast_plus_mode {
			hw-thigh = <16>; //i2c占空比高电平
			hw-tlow = <22>; //i2c占空比低电平
			hw-tsu-sto = <17>;
			hw-tsu-sta = <18>;
			hw-thd-dat = <16>;
			hw-thd-sta = <15>;
			hw-tbuf = <24>;
			hw-scl-stretch-en = <1>;//i2c stretch时钟延展,默认0表示关闭,设置为1表示开启
			hw-trdhld = <3>;
			hw-tsp = <3>;
			cci-clk-src = <37500000>;//CCI时钟选择,100K、400K时如果不配置,默认19.2M,1M时必须配置为37.5M
			status = "ok";
		};
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值