上篇文章讲解了如何加载Node
这篇文章以memcpy 为例讲解下Node的简单集成 (这里我们不去关注算法本身,只关注集成流程----简单集成)
一、准备相关文件:
1.在以下列举的node中,将memcpy node文件夹复制一份,命名为memcpy2:
2.更改相关文件名称:
2.1 更改文件名称,并在camxchinodememcpy2.cpp中,需要将node的 sectionname更改为com.qti.node.memcpy2.
每个node的sectionname需要与mk文件中要生成的so文件名相对应。
2.2 更改算法文件中的mk文件,将包含的头文件与源文件修改成一致:
LOCAL_INC_FINES:需要包含的所有头文件
LOCAL_SRC_FILES:需要包含的所有源文件
LOCAL_MODULE:编译生成的库文件名称
3.算法自己的mk文件已修改完毕,需要注意:算法本身处于CHI中,这里需要修改上级mk文件,将算法包含进来:
准备工作已经ok了,通过以下命令进行编译:
mmm vendor/qcom/proprietary/chi-cdk/ -j32 2>&1 | tee chilog
算法库文件生成的路径在
二、现在已经有了算法库,该如何应用到具体的相机场景中去呢?
以ZSL普通拍照为例:
将算法memcpy2 node嵌入到拍照流程中,如下图所示:
修改前后如下:
具体修改方案patch如下:
+++ b/oem/qcom/topology/usecase-components/pipelines/camxZSLSnapshotYUV.xml@@ -21,6 +21,18 @@ <NodeInstance>IPEInstanceName0</NodeInstance>
<NodeInstanceId>0</NodeInstanceId>
</Node>
+ <Node>
+ <NodeName>ChiNode</NodeName>
+ <NodeId>255</NodeId>
+ <NodeInstance>ChiNodeInstanceName0</NodeInstance>
+ <NodeInstanceId>0</NodeInstanceId>
+ <NodeProperty>
+ <NodePropertyName>NodePropertyCustomLib</NodePropertyName>
+ <NodePropertyId>1</NodePropertyId>
+ <NodePropertyDataType>STRING</NodePropertyDataType>
+ <NodePropertyValue>com.qti.node.memcpy2</NodePropertyValue>
+ </NodeProperty>
+ </Node>
</NodesList>
<PortLinkages>
<TargetName>TARGET_BUFFER_RAW</TargetName>@@ -161,5 +173,42 @@ <NodeInstanceId>0</NodeInstanceId> </DstPort> </Link>
+ <Link>
+ <SrcPort>
+ <PortName>IPEOutputPortDisplay</PortName>
+ <PortId>9</PortId>
+ <NodeName>IPE</NodeName>
+ <NodeId>65538</NodeId>
+ <NodeInstance>IPEInstanceName0</NodeInstance>
+ <NodeInstanceId>0</NodeInstanceId>
+ </SrcPort>
+ <DstPort>
+ <PortName>ChiNodeInputPortFull-0</PortName>
+ <PortId>0</PortId>
+ <NodeName>ChiNode</NodeName>
+ <NodeId>255</NodeId>
+ <NodeInstance>ChiNodeInstanceName0</NodeInstance>
+ <NodeInstanceId>0</NodeInstanceId>
+ </DstPort>
+ </Link>
+ <Link>
+ <SrcPort>
+ <PortName>ChiNodeOutputPortFull</PortName>
+ <PortId>0</PortId>
+ <NodeName>ChiNode</NodeName>
+ <NodeId>255</NodeId>
+ <NodeInstance>ChiNodeInstanceName0</NodeInstance>
+ <NodeInstanceId>0</NodeInstanceId>
+ </SrcPort>
+ <DstPort>
+ <PortName>TARGET_BUFFER_YUV</PortName>
+ <PortId>1</PortId>
+ <NodeName>SinkBuffer</NodeName>
+ <NodeId>2</NodeId>
+ <NodeInstance>SinkInstanceName0</NodeInstance>
+ <NodeInstanceId>0</NodeInstanceId>
+ </DstPort>
+ </Link>
到这里,基本集成流程也差不多了,当然,算法集成不可能一帆风顺,也不会这么简单。这里只介绍大概的流程,仅供了解,有错误的地方欢迎指出。