高通 Camera HAL3:项目开发技术点总结
做高通 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.未完待续、持续补充
相关文章:
高通 Camera HAL3:项目开发技术点总结
做高通 Camera HAL3开发的一些技术点的总结、整理。 做个记录,方便后续查阅。 1.目录、so、配置文件 productName是项目名 out Target路径:\out\target\product\productName\chi-cdk:\vendor\qcom\proprietary\chi-cdk\ldc node࿱…...
chatgpt赋能python:Python怎么删除列表中的最大值和最小值
Python怎么删除列表中的最大值和最小值 在Python中,一个列表(List)是一种非常常见的数据结构,它允许我们以有序的方式存储和访问数据。但是,有时候我们需要从列表中删除最大或最小的值,以满足我们的特定需…...
简述Vue的生命周期以及每个阶段做的事情
03_简述Vue的生命周期以及每个阶段做的事情 思路 给出概念 列举出生命周期各个阶段 阐述整体流程 结合实际 扩展:vue3变化 回答范例 每个vue组件实例被创建后都会经过一系列步骤。比如它需要数据观测、模板编译、挂载实例到dom、以及数据变化的时候更新dom、…...
LeetCode-C#-0004.寻找两个正序数组的中位数
0.声明 该题目来源于LeetCode 如有侵权,立马删除。 解法不唯一,如有新解法可一同讨论。 1.题目 0004寻找两个正序数组的中位数 给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。 请你找出并返回着两个正序数组的中位…...
Vue.js 中的 $emit 和 $on 方法有什么区别?
Vue.js 中的 $emit 和 $on 方法有什么区别? 在 Vue.js 中,$emit 和 $on 方法是两个常用的方法,用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件,并在另一个组件中监听这个事件,从而实现组件间的…...
LAZADA平台的商品评论Python封装API接口接入文档和参数说明
LAZADA是一个位于东南亚的电商平台,成立于2012年。该平台覆盖的国家包括新加坡、马来西亚、印尼、菲律宾、泰国和越南等地。它提供了一个多样化的产品选择,包括时尚、美容、数码、母婴等商品,并且拥有许多知名品牌的官方旗舰店。同时…...
云原生Docker镜像管理
docker是什么? docker是一个go语言开发的应用容器引擎。 docker的作用? ①运行容器里的应用; ②docker是用来管理容器和镜像的一种工具。 #容器 与 虚拟机 的区别? 容器虚拟机所有容器共享宿主机内核每个虚拟机都有独立的操…...
ChatGPT+小红书的8种高级玩法
掌握了这套万能命令,让你快速做出小红书爆款文案! 一、用ChatGPT做定位 我是一个大龄的普通人,没有什么特殊的技能,接下来,请你作为一位小红书的账号定位专家,通过与我对话的方式,为我找到我的小红书账号定…...
shell脚本学习记录1(运算符)
Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个…...
vector 迭代器失效问题
vector 迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指向…...
docker使用与服务器上的可视化(ROS rviz等)
1.安装docker 安装docker:官网教程,按照官网命令一步步来即可。 添加当前用户到docker用户组: 【docker】添加用户到docker组,这样后面运行docker的时候前面不需要加sudo命令,否则运行docker的时候一直需要在前面加su…...
最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包
在Portraiture有非常强大的手动功能,可以为用户进行手动调整照片中的皮肤区域以达到更加完美的效果,软件还支持同时导入上千张照片,用户可以通过自动识别照片中的人脸从而依照自己的风格进行批量处理十分的方便快捷。 最新版本Portraiture 4…...
仓储WMS对接淘宝奇门详细说明【亲测可用】
文章目录 简介名词解释奇门对接方案前期准备系统调用流程代码实现思路关键点(个人观点)奇门对接关键代码可能遇到的问题 简介 淘宝奇门项目支持 ERP、WMS 之间的系统标准化对接,通过构建 ERP、WMS 系统之间标准通信协议来实现不同系统之间的打通;对商家…...
RFID软件:简介、功能和应用范围
在当今快节奏的商业环境中,RFID(射频识别)技术已经成为物流、供应链和库存管理等领域中不可或缺的工具。本文将向您介绍RFID软件的基本知识,探讨其功能和广泛应用的范围。 第一部分:RFID软件简介 RFID软件是一种应用…...
Android 逆向之安全防护基本策略
对抗反编译 混淆 使用混淆主要可以减小包的大小。混淆对于安全保护来说,只是增加了阅读难度而已。混淆不会把关键代码混淆掉,比如MainActivity,Application等,可以通过分析smali和阅读jar包定位代码。 资源混淆也是换汤不换药&…...
基站机房:保障通信网络稳定,如何解决安全隐患?
基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…...
sqlmap -os-shell 使用方法
一、burp suite抓包。 如上图所示,红框处很明显是一个传参点,我们就在这个页面抓包。 抓到包之后将内容保存到桌面的1000.txt文件下。 二、sqlmap跑包。 打开sqlmap跑包。 python sqlmap.py -r C:\Users\16434\Desktop\1000.txt -dbmsmysql --os-shell…...
Go语言并发之Select多路选择操作符
1、Go语言并发之Select多路选择操作符 select 是类 UNIX 系统提供的一个多路复用系统 API,Go 语言借用多路复用的概念,提供了 select 关键字,用 于多路监听多个通道。当监听的通道没有状态是可读或可写的,select 是阻塞的&#…...
黄金回收小程序开发功能有哪些?
一、用户端: 1、实时查询:通过对接三方接口实现实时金价动态查看; 2、多种类珠宝实时回收:小程序支持多品类珠宝的实时回收包含黄金饰品、金条、铂金、K金、白银等,同步实现价格实时更新; …...
nginx的详解与应用
前言 说明 要义 nginx 有一个master 进程和多个worker 进程。主进程的主要目的是读取和评估配置,以及维护工作进程。工作进程对请求进行实际处理。nginx 采用基于事件的模型和依赖于操作系统的机制在工作进程之间有效地分发请求。工作进程的数量在配置文件中定义…...
快速上手ANIMATEDIFF PRO:从环境部署到视频导出的完整操作流程
快速上手ANIMATEDIFF PRO:从环境部署到视频导出的完整操作流程 1. 环境准备与快速部署 1.1 硬件要求检查 在开始之前,请确保您的设备满足以下最低配置要求: 显卡:NVIDIA RTX 3060及以上(推荐RTX 4090)显…...
RK3568 Android12长按电源键无反应?三步搞定关机菜单恢复
RK3568 Android12电源键功能失效排查与深度修复指南 在RK3568平台上进行Android12系统定制时,电源键功能异常是开发者常遇到的典型问题。不同于简单的功能缺失,这背后涉及系统级行为配置、手势交互逻辑和硬件抽象层的多层级适配。本文将带您从现象溯源到…...
Python项目依赖管理:pipreqs vs pip freeze,哪个更适合你的项目?
Python项目依赖管理:pipreqs vs pip freeze,哪个更适合你的项目? 在Python开发中,依赖管理是项目维护的重要环节。一个清晰、准确的依赖清单不仅能确保项目在不同环境中稳定运行,还能简化团队协作和部署流程。面对pip…...
OpenClaw+nanobot镜像:3步配置QQ聊天机器人触发AI任务
OpenClawnanobot镜像:3步配置QQ聊天机器人触发AI任务 1. 为什么选择OpenClawnanobot组合? 去年冬天,当我第一次尝试用QQ机器人自动处理群消息时,经历了漫长的环境配置地狱。直到发现星图平台的nanobot镜像,这个开箱即…...
【英一】考研英语一历年真题及答案解析PDF电子版(1980-2025年)
【英一】考研英语一历年真题及答案解析PDF电子版(1980-2025年)考试时间 2026年全国硕士研究生招生考试定于12月20日-21日进行。小编整理了提供1980-2025年考研英语一完整真题集,含权威答案解析。PDF高清版本支持直接打印,便于考生…...
OpenClaw飞书办公助手:Qwen3-VL:30B自动化会议纪要生成
OpenClaw飞书办公助手:Qwen3-VL:30B自动化会议纪要生成 1. 为什么需要自动化会议纪要 每次开完会最痛苦的事情是什么?对我来说就是整理会议纪要。作为团队的技术负责人,我每周要参加至少5场会议,从需求评审到技术方案讨论&#…...
Ubuntu 20.04安装MATLAB R2023B保姆级避坑指南:从卸载旧版到选对产品,一步一截图
Ubuntu 20.04安装MATLAB R2023B全流程实战:从彻底卸载到精准选配 在科研与工程计算领域,MATLAB始终保持着不可替代的地位。当最新版的R2023B遇上Ubuntu 20.04这个长期支持版本,如何实现完美部署却让不少用户望而却步。不同于Windows下的图形化…...
虚拟控制器与设备模拟从入门到精通:ViGEmBus驱动技术指南
虚拟控制器与设备模拟从入门到精通:ViGEmBus驱动技术指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在游戏开发与输入设备模拟领域…...
SDMatte开源大模型部署教程:supervisor托管+自动恢复,企业级稳定性保障
SDMatte开源大模型部署教程:supervisor托管自动恢复,企业级稳定性保障 1. SDMatte模型介绍 SDMatte是一款专注于高质量图像抠图的AI模型,特别擅长处理复杂边缘和半透明物体的提取任务。无论是电商商品图、设计素材还是专业摄影作品…...
基于模型的增程式混合动力汽车整车策略开发与建模
基于模型的整车策略开发思路、整车模型搭建流程,增程式混合动力汽车建模仿真模型,增程纯电,类似Nisson的e-power整车配置策略 具体内容包括:增程器模型、电机模型、电池模型,驾驶员模型,整车VCU控制模型等 …...
