高通camera调试经验总结

文章目录

  • 1. 关闭自动对焦
  • 2. 手动调节曝光和帧率
  • 3.camx架构xml解析
  • 4.打开CAM_DBG的log
    • 4.1 开启方式一
    • 4.2 开启方式二
    • 4.3 AF对焦调试
  • 5. 脚本打开和关闭camera
    • 5.1 开启和关闭对应的camera服务
      • 5.1.1 查询对应整机上camera对应的代号
      • 5.1.2 编写脚本打开关闭camera
    • 5.2 输入坐标点打开关闭camera
      • 5.2.1 启用开发者模式
      • 5.2.2 开启坐标功能
      • 5.2.3 adb 输入坐标命令
  • 6. OIS/Sensor设置并行初始化
  • 7. 高通平台CCI的相关配置修改

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

高通camera调试经验总结_第1张图片

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调试经验总结_第2张图片

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"

高通camera调试经验总结_第3张图片

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

高通camera调试经验总结_第4张图片

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

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

高通camera调试经验总结_第5张图片

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.版本号,快速点击多次即可看到提示进入开发者模式

高通camera调试经验总结_第6张图片

5.2.2 开启坐标功能

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

高通camera调试经验总结_第7张图片

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 OptimizationName>
            <Help> Enable OIS OptimizationHelp>
            <VariableName>enableOISOptimizationVariableName>
            <VariableType>BOOLVariableType>
            <SetpropKey>vendor.debug.camera.enableOISOptimizationSetpropKey>
            <DefaultValue>TRUEDefaultValue>
            <Dynamic>TRUEDynamic>
        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";
		};
}

你可能感兴趣的:(QCOM,camera,驱动开发,开发工具使用,android,linux)