高通camera架构CamX添加自定义node

一、自定义Node的核心步骤

1. 创建Node代码
  • 路径规范
    自定义Node代码需放置在chi-cdk/oem/qcom/node/目录下,可参考现有Node(如MemCpyNode)结构编写1。

  • 代码结构

    • 继承ChiNode基类,实现ExecuteProcessRequest等核心方法。

    • 定义输入/输出端口数量、Buffer格式支持(如RAW、YUV等)。

    • 示例:添加水印功能的Node需在ExecuteProcessRequest中实现像素叠加逻辑5。

2. 修改构建配置
  • Android.mk文件
    在Node目录的build/android/Android.mk中修改LOCAL_MODULE为自定义名称(如com.qti.node.hitest),并更新源文件引用1。

  • 全局注册
    chi-cdk/oem/Android.mk中添加新Node的构建路径,确保编译时包含该模块1。

3. 注册Node到CamX
  • XML配置
    在Usecase的XML文件中声明Node,例如:

    <NodesList>
        <Node NodeId="255" NodeInstance="HitestNode" NodeType="SW" MaxInputPorts="1" MaxOutputPorts="1" />
    </NodesList>

    运行 HTML

    • NodeId必须为255(自定义Node的保留标识),硬件Node(如IFE、IPE)使用预定义ID(如IFE=65536)6。

  • 端口连接
    PortLinkages中定义输入输出关系,确保Buffer格式一致(如RAW10RAW10)7。

4. 集成到Pipeline
  • Usecase配置
    在对应的Usecase XML(如camxUsecaseZSL.xml)中添加对新Pipeline的引用:

    <CamxInclude>PipelineCustomHitest.xml</CamxInclude>

    运行 HTML

  • 目标流映射
    Targets中定义输出目标(如TARGET_BUFFER_YUV_OUT),并在代码中通过TargetStreamMap关联数据流7。


二、调试与验证

1. 日志输出
  • 开启调试日志:设置系统属性persist.vendor.camera.logInfoMask=0x3FF,观察Node处理流程及数据链路7。

  • 关键日志示例

    CamX: [INFO][CORE] Node:HitestNode:0 Processing input port 0
    CamX: [ERROR][CORE] Buffer format mismatch at SinkPort 1 (Expected YUV420, Actual RAW10)
2. 工具验证
  • 使用camxhal3test工具测试Node功能:

    adb shell camxhal3test -usecase zsl -pipeline PipelineCustomHitest

三、实际案例参考

  1. 水印添加Node 5

    • 方式二:将水印处理封装为独立Node,在Usecase XML中插入到IFE和BPS之间。

    • 代码逻辑:在camxnode.cpp中修改像素数据,需注意字节对齐问题(如YUV420的宽度需为偶数)。

  2. 多帧降噪(MFNR)Node 3

    • 输入:从上游Feature获取多帧P010格式数据。

    • 处理:运行降噪算法,输出单帧YUV数据到下游Feature。


四、常见问题与注意事项

问题类型解决方法与注意事项
NodeId冲突自定义Node必须使用ID 255,禁止与预定义硬件Node(如IFE=65536)重复6。
端口不匹配检查输入/输出端口的Buffer格式(如RAW10 vs YUV420)及分辨率是否一致。
编译失败确保所有代码文件命名替换彻底(如全局替换MemCpyHitest)1。
数据流中断验证XML中PortLinkages的连接顺序,禁止形成环形链路(需为有向无环图)7。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值