p2p网站建设资质,产品开发流程梳理,站长平台怎么添加网站,自媒体账号申请做高通 Camera HAL3开发的一些技术点的总结、整理。
做个记录#xff0c;方便后续查阅。
1.目录、so、配置文件
productName是项目名 out Target路径#xff1a;\out\target\product\productName\chi-cdk#xff1a;\vendor\qcom\proprietary\chi-cdk\ldc node#xff1…做高通 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.sousecase xml文件chi-cdk\oem\qcom\topology\titan\fillmore\fillmore_usecase.xmlpipelines xml文件chi-cdk\oem\qcom\topology\titan\usecase-components\usecases\UsecaseZSL\pipelines\vendortag文件chi-cdk\oem\qcom\vendortag\chivendortagoemdefines.hRealTimeFeature.xmlchi-cdk\oem\qcom\topology\titan\usecase-components\segments\fillmore\RealTimeFeature.xmlcamxoverridesettings.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 enableDSMFALSE camxoverridesettings.txt/vendor/etc/camera # cat camxoverridesettings.txt 4.camxoverridesettings.txt日志设置
chi log:例如:CHX_LOG_ERROR(fmt, args)
adb shell echo overrideLogLevels0x1f /vendor/etc/camera/camxoverridesettings.txt
或adb shell setprop vendor.debug.camera.overrideLogLevels 0x1F (camxsettings.xml中定义不同的代码可能有区别)
平常开的log(按需要开全部都开会丢日志且影响性能):
hal/core/chi adb shell echo logInfoMask0x50080 /vendor/etc/camera/camxoverridesettings.txt adb shell setprop persist.vendor.camera.logVerboseMask 0xFFFFFFFFadb shell setprop persist.vendor.camera.logEntryExitMask 0xFFFFFFFFadb shell setprop persist.vendor.camera.logInfoMask 0xFFFFFFFFadb shell setprop persist.vendor.camera.logWarningMask 0xFFFFFFFFadb shell setprop persist.vendor.camera.logConfigMask 0xFFFFFFFFadb shell setprop persist.vendor.camera.systemLogEnable TRUEadb shell setprop persist.vendor.camera.logLogDRQMask 0xFFFFFFFF camx log: adb shell echo overrideLogLevels0xF /vendor/etc/camera/camxoverridesettings.txtadb shell echo logVerboseMask0x1000 /vendor/etc/camera/camxoverridesettings.txtadb shell echo logInfoMask0xFFFFFFFF /vendor/etc/camera/camxoverridesettings.txt 5.选择featuregraph的日志
Chifeature2graphselector.cpp:1549 SelectFeatureGraphforRequestFromTable()
Tag:Selected feature graph for request:
通常需要先执行如下命令才能打印出Log adb shell echo overrideLogLevels0x9 /vendor/etc/camera/camxoverridesettings.txtadb shell echo overrideLogLevels8 echo/vendor/etc/camera/camxoverridesettings.txt 平台不同具体也有所区别
8350: static const UINT32 CHX LOG CONFIG MASK 4:adb shell echo overrideLogLevels4 /vendor/etc/camera/camxoverridesettings.txt 8450: adb shell overrideLogLevels8 echo/vendor/etc/camera/camxoverridesettings.txtCHX LOG INFO(Selected feature graph for request %u : %spFeature2RequestObject-GetAppFrameNumber ()requestGraph. pGraphDesc-pFeatureGraphName); sm4350: adb shell echo overrideLogLevels4/vendor/etc/camera/camxoverridesettings.txtCHX LOG CONFIG(Feature2Mapping: Selected feature graph : %spChiFeature2GraphDesc-pFeatureGraphName); 6.如何查找pipeline
代码查找
找到chifeature2rawhdrdescriptor.cpp
查找ChiFeature2PipelineDescriptor 日志查找
Tag: StreamingOn 7.CreatePipelines()
AdvancedCameraUsecaseUsecaseMultiCamera等usecase 会 调用CreatePipelines()创建 pipeline
chifeature2也会调用 CreatePipelines() 创建 pipeline
举个例子:
在SAT模式下预览走的是非featue2拍照走的是feature2:
//创建的三个pipelineSATOfflinePreviewRealtimePreviewSATOMerge3YuvCustomTolYuv 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 segmentxxxxxxxxxx/ 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 verticalOffset10verticalOffset maxLineCount65525maxLineCount 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.未完待续、持续补充