做高通 Camera HAL3开发的一些技术点的总结、整理。

做个记录,方便后续查阅。

1.目录、so、配置文件

productName是项目名

  • out Target路径:\out\target\product\productName\
  • chi-cdk:\vendor\qcom\proprietary\chi-cdk\
  • ldc node:\vendor\qcom\proprietary\chi-cdk\oem\qcom\node\ldc\
  • node编译出来的so:\vendor\lib64\camera\components\
  • usecase编译的so: \vendor\lib64\com.qti.chiusecaseselector.so (修改pipeline的xml后需要编译usecase的so)
  • chi-cdk编译的so: \vendor\lib64\hw\com.qti.chi.override.so
  • usecase xml文件:chi-cdk\oem\qcom\topology\titan\fillmore\fillmore_usecase.xml
  • pipelines xml文件:chi-cdk\oem\qcom\topology\titan\usecase-components\usecases\UsecaseZSL\pipelines\
  • vendortag文件:chi-cdk\oem\qcom\vendortag\chivendortagoemdefines.h
  • RealTimeFeature.xml:chi-cdk\oem\qcom\topology\titan\usecase-components\segments\fillmore\RealTimeFeature.xml
  • camxoverridesettings.txt:高通提供给开发者的临时调试方式,控制log打印、数据dump等、在设备目录的vendor/etc/camera/下,目录camera和camxoverridesettings.txt都需要自己手动创建

2.驱动相关路径:

bin文件:/vendor/lib64/camera (如果将bin文件删除到只剩一个,那么驱动上电就只上一个,打开相机就只打开这个摄像头)

配置文件:

  • \vendor\qcom\proprietary\chi-cdk\oem\qcom\buildbins\build\android\binary_taro
  • /vendor/qcom/proprietary/chi-cdk/oem/qcom/module

驱动文件:

  • \vendor\qcom\proprietary\chi-cdk\oem\qcom\sensor\s5khm6

3.camxsettings.xml

在/vendor/qcom/proprietary下查找camxsettings.xml,找到后通过修改camxoverridesettings.txt来改变camxsettings.xml中定义的变量的值

  • /vendor/etc/camera # echo enableDSM=FALSE >> camxoverridesettings.txt
  • /vendor/etc/camera # cat camxoverridesettings.txt

4.camxoverridesettings.txt日志设置:

chi log:例如:CHX_LOG_ERROR(fmt, args);

adb shell "echo overrideLogLevels=0x1f >> /vendor/etc/camera/camxoverridesettings.txt"

或:adb shell setprop vendor.debug.camera.overrideLogLevels 0x1F (camxsettings.xml中定义,不同的代码可能有区别)

平常开的log(按需要开,全部都开会丢日志且影响性能):

hal/core/chi

  • adb shell "echo logInfoMask=0x50080 >> /vendor/etc/camera/camxoverridesettings.txt"   
  • adb shell setprop persist.vendor.camera.logVerboseMask 0xFFFFFFFF
  • adb shell setprop persist.vendor.camera.logEntryExitMask 0xFFFFFFFF
  • adb shell setprop persist.vendor.camera.logInfoMask 0xFFFFFFFF
  • adb shell setprop persist.vendor.camera.logWarningMask 0xFFFFFFFF
  • adb shell setprop persist.vendor.camera.logConfigMask 0xFFFFFFFF
  • adb shell setprop persist.vendor.camera.systemLogEnable TRUE
  • adb shell setprop persist.vendor.camera.logLogDRQMask 0xFFFFFFFF

camx log:

  • adb shell "echo overrideLogLevels=0xF >> /vendor/etc/camera/camxoverridesettings.txt"
  • adb shell "echo logVerboseMask=0x1000 >> /vendor/etc/camera/camxoverridesettings.txt"
  • adb shell "echo logInfoMask=0xFFFFFFFF >> /vendor/etc/camera/camxoverridesettings.txt"

5.选择featuregraph的日志:

Chifeature2graphselector.cpp:1549 SelectFeatureGraphforRequestFromTable()

Tag:"Selected feature graph for request:"

通常需要先执行如下命令才能打印出Log:

  • adb shell  echo "overrideLogLevels=0x9" >>/vendor/etc/camera/camxoverridesettings.txt
  • adb shell echo overrideLogLevels=8 >>echo/vendor/etc/camera/camxoverridesettings.txt

平台不同,具体也有所区别:

8350:

  • static const UINT32 CHX LOG CONFIG MASK =4:
  • adb shell echo overrideLogLevels=4 >>/vendor/etc/camera/camxoverridesettings.txt

8450:

  • adb shell overrideLogLevels=8 >>"echo/vendor/etc/camera/camxoverridesettings.txt
  • CHX LOG INFO("Selected feature graph for request %u : %spFeature2RequestObject->GetAppFrameNumber (),requestGraph. pGraphDesc->pFeatureGraphName);

sm4350:

  • adb shell "echo overrideLogLevels=4>>/vendor/etc/camera/camxoverridesettings.txt
  • CHX LOG CONFIG(Feature2Mapping: Selected feature graph : %s"pChiFeature2GraphDesc->pFeatureGraphName);

6.如何查找pipeline

代码查找:

找到chifeature2rawhdrdescriptor.cpp

查找ChiFeature2PipelineDescriptor

日志查找:

Tag: "StreamingOn"


7.CreatePipelines()

AdvancedCameraUsecase,UsecaseMultiCamera等usecase 会 调用CreatePipelines()创建 pipeline

chifeature2也会调用 CreatePipelines() 创建 pipeline

举个例子:

在SAT模式下,预览走的是非featue2,拍照走的是feature2:

//创建的三个pipeline:SATOfflinePreview;RealtimePreviewSATO;Merge3YuvCustomTolYuv


8. 如何查找pipeline node配置文件:

1.Log TAG:"StreamingOn for pipeline"查当前pipeline
2.\vendor\qcom\proprietary\chi-cdk\oem\qcom\topology\titan 目录下找pipeline的xml
3.pipeline xml里看<CamxInclude segment="xxxxxxxxxx"/>
4.找到CamxInclude的xml
5.添加node


9.添加堆栈打印:

在\camx\src\core\hal\camxhal3stream.cpp中添加堆栈打印

camx/src/lib/build/android/Android.mk 里添加 LOCAL_SHARED_LIBRARIES += libutilscallstack

代码中要打印堆栈的地方添加:android::CallStack stackprintf("xxxxxx");


10.添加一个VendorTag用于控制Feature:

详细见《Add a VendorTag》篇

高通 Camera HAL3:添加一个VendorTag_shawn·xiao的博客-CSDN博客


11.摄像头Id配置文件

chi-cdk\oem\qcom\multicamera\chimcxcameraconfig\configs\fillmore\fillmore_legacymc.xml


12.排查node中算法影响

可以只用memcopy Node来排除:


13.底层添加debug系统属性:

头文件:#include <cutils/properties.h>

\chi-cdk\oem\qcom\node\awrawhdr\build\android\Android.mk下添加:

LOCAL_SHARED_LIBRARIES :=

libcutils \

代码:if(property_get_int32("debug.vendor.camera.dumpawraw",0))


13.查看AEC日志:

主要看第二个

(1).05-14 06:40:13.737 7710 7779 V CamX : [ VERB][STATS_AEC] caecxcontrol.h:586: PrintFrameControl CID 1 role 0 fID 227 mode PerFrame skipped:0 flash off lux 276.5 ISO 640 (short safe long) G 13.319 13.319 13.319 ET 60000000 60000000 60000000 SI 799110720 799110720 799110720 settled 1 brightness settled 1 FL 219.9 snapshot normal LED1 0 LED2 0 LEDAF 0 LEDFD 0 predictive 1.0 flashduration 0 compenDB 1.000 compenADRC 1.000 shortBlend 1.000000 FinalFlickerMode 1

(2) Gain:ExpTime

14.去掉驱动配置的QCFA Size

找到注摄的驱动setting文件

qssi12_7450/vendor/qcom/proprietary/chi-cdk/oem/qcom/sensor/s5khm6/s5khm6_sensor.xml

找到Qcfa定义,全部去掉


15.查找最大,中间,最小曝光值

\chi-cdk\core\chiframework\chimcxdevicecaps.cpp

填曝光值函数:FillExposureTime()

\camx\src\core\camximagesensordata.cpp

从sensor xml中获取配置并计算 赋值最小、中间和最大曝光值:GetSensorStaticCapability()

/chi-cdk/oem/qcom/sensor/s5khm6/s5khm6_sensor.xml

驱动配置文件里配置:
<exposureControllnfo>
<verticalOffset>10<verticalOffset>
<maxLineCount>65525<maxLineCount>

16.常见usecase、pipeline

之前的博文中也有列举过,再列举一次

不同机型,产品性能及定位不同,即使基线一样usecase等也有可能不一样,

高通这么做给了手机厂商极大的自定义空间,举个某机型例子,UseCase可以场景复用,对应的pipeline也可以不用或复用

17.文件权限修改

标定结果写入calib_result的patch,文件777权限没有设置成功,导致生成的calib_result文件没有第三方可读权限,

可通过adb shell ls -laZ calib_result查看为-rwx------

如下改动patch,经调试第三方可以读取calib_result,权限变为-rwxrwxrwx:

{mode_t pCurMask = umask(0);......umask(pCurMask);}

18.通过配置camxoverridesettings.txt实现dump yuv和raw

dump raw:

autoImageDumpMask=1 
offlineImageDumpOnly=FALSE 
reprocessDump=TRUE 
autoImageDump=TRUE 
autoInputImageDumpMask=0x1
autoImageDumpIFEoutputportMask=0xFB8

dump yuv:

autoImageDumpMask=1 
offlineImageDumpOnly=FALSE 
reprocessDump=TRUE 
autoImageDump=TRUE  
autoImageDumpIPEoutputportMask=0x700

19.未完待续、持续补充

高通 Camera HAL3:项目开发技术点总结相关推荐

  1. 高通 Camera HAL3:CAMX、CHI-CDK 详解

    网上关于高通CameraHAL3的介绍文档不多,之前做高通CameraHAL3的一些总结.整理,杂乱了一点,将就着看吧. 一.初步认知 高通CameraHAL3的架构很庞大,代码量也很巨大. 先对CA ...

  2. 高通camera hal3学习

    高通camera camx-chi框架 配流 open request

  3. 高通 Camera HAL3:CAMX中实现Dump YUV、RAW

    CMAX开发过程中,经常要在HAL层dump yuv或raw图进行分析 怎么在CAMX中实现Dump YUV.RAW的功能? 废话不多说,上代码 一.Dump YUV 功能实现代码 1. 在头文件中加 ...

  4. 高通平台开发系列讲解(外设篇)高通Camera软件架构

    文章目录 一.高通Camera软件架构 1.1.Camera App 1.2.Camera Framework 1.3.Camera Service 1.4.Camera Provider 1.5.C ...

  5. 高通Camera 软件工程师的成长之路

    本文以个人的工作学习经历来描述一 Camera 软件工程师的披荆斩棘之路,时间从大学开始,以至任职于高通 Camera 软件工程师结束,杂以本人学习过程当中的一系列学习笔记和博客文章,绝对是干货满满, ...

  6. 高通Android智能平台开发总结

    高通Android智能平台开发总结 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境. 7 1.2 搭建高通平台环境开发环境. 7 1.2.1 高通android智能平台概 ...

  7. 高通Camera数字成像系统简介

    转载: https://deepinout.com/qcom-camx-chi/qcom-camx-system-intro.html 整理:小驰笔记 相机的硬件层,作为整个框架的最底层,通过硬件模块 ...

  8. 高通Android手机软件开发培训

    为期两天的高通Android手机软件开发培训结束了.这次高通针对QSC7x27/7x25/QSD8x50的基带芯片进行了两天的Android手机软件开发培训.参加人员都是我这样的各个OEM厂商的软件开 ...

  9. 高通骁龙410C开发板基础知识

    高通骁龙410C开发板基础知识 高通骁龙410C开发板是基于高通400系列处理器的第一块开发板,性能优异,方便调试.它包含先进的电源管理,WIFI 蓝牙,GPS等等,所有都集成在一张信用卡大小的PCB ...

最新文章

  1. mysql中行转列,MySQL 中行转列的方法
  2. Oracle数据库基础知识点汇总
  3. PCB电路设计10大基本原则
  4. TSP问题遗传算法通用Matlab程序
  5. python 数组写txt_python txt文件常用读写操作
  6. SQL 字符串分割表函数
  7. 机器学习实战之logistic回归分类
  8. zookeeper 可视化_大厂,常用,四款,大屏可视化工具
  9. Python工作笔记-往dll中传入char*类型的参数并且如何接收char*的值
  10. xmpppy获取服务器版本信息,为什么XMPP? - 今幕明的个人页面 - OSCHINA - 中文开源技术交流社区...
  11. kafka学习笔记一
  12. java访问 mysql返回空格_JAVA连接数据库返回输出信息
  13. c语言sqlist结构体,数据结构的一个题目,有什么问题吗?问什么一直显示Sqlist结构体没定义...
  14. android qq 邮箱格式,qq邮箱怎么填写格式 qq邮箱格式写法介绍
  15. Rob Knight: PCR不需要做三个平行再混合!
  16. 哈工程转专业计算机,2021年哈尔滨工程大学大一新生转专业及入学考试相关规定...
  17. Threejs实现卫星太阳板折叠动画,信号发射,姿态调整
  18. Django ORM查询之外键、关系的反向引用
  19. kali系统升级(包含软件信息、所有软件、整个系统)
  20. 业务高速增长场景下的稳定性建设实战

热门文章

  1. Android开发音效中录制WAV音频和录制MP3音频的讲解及实战(超详细 附源码)
  2. 理论力学(静力学)-2-约束的类型
  3. Eclipse 在编辑窗口切换页面快捷键
  4. HDU4825_01字典树
  5. 服务器安装centos系统并分区
  6. bugku-writeup-MISC-富强民主
  7. Jmeter 采用Jsr223和beanshell将接口获得结果写入到文件
  8. JTS 空间数据关系分析
  9. SPSS计算极值、平均值、中位数、方差、偏度、峰度、变异系数
  10. centos 配置SAN存储--IPSAN