一、node类型
qcom node分为三种,分别是default node、bypass node和inplace node。下面是高通文档对三种node的解释:
其中bypass、inplace node是高通引入的一种减少内存拷贝的方法,因为在default node上,如果要实现输入直接给到输出,只能将数据copy一份。
bypass node基本特点
① requestinfo中的outport口的buffer将不再被下一个node使用(output buffer和绑定的input buffer是不同地址,如果此node将input buffer处理完放到output里面,只会纯纯浪费时间),而是直接取与之绑定的inport口的input buffer;
② bypass node往往仅输出一些meta相关的,如sat node,当然,你也可以直接修改input buffer,达到了修改buffer的目的。。。。。。
③ 其后面必须得接一个node,而不能直接接入target buffer,否则无法使能bypass功能;
④ bypass node设置以后,需要设置一个BypassPortSrcId,用于告知当前的output port应该从哪个input port获取image数据:
<SrcPort>
<PortName>ChiNodeOutputPort</PortName>
<PortId>0</PortId>
<NodeName>ChiExternalNode_MUXER</NodeName>
<NodeId>255</NodeId>
<NodeInstance>ChiNodeInstanceName11</NodeInstance>
<NodeInstanceId>11</NodeInstanceId>
<BypassPortSrcId>0</BypassPortSrcId>
<BypassPortSrcId>30</BypassPortSrcId>
<BypassPortSrcId>60</BypassPortSrcId>
</SrcPort>
注:8750上经常看到一个output port关联了两三个BypassPortSrcId,这时在实际跑的时候只会有一个input port被保留,如muxer11(一个copy node)在非夜景下,会disable muxer 11的0/60 inport,而保留full 30 inprot。在夜景下,会disable 0/30 inport,而保留full 60 inport,这是因为muxer里面设置了aisr的裁剪优先级优于viull。
inplace node基本特点
① requestinfo中的inputHandle和outputHandle共享同一片内存;
② 仅允许有一个input port和一个output port;
③ 此node必须是最后一个node,即接下来需要连接到target buffer上;
④ 添加LinkProperties:inplacebuffer标签;
<Link>
<LinkProperties>
<LinkFlags>LinkFlagSinkInplaceBuffer</LinkFlags>
</LinkProperties>
<SrcPort>
</SrcPort>
<DstPort>
</DstPort>
</Link>
二、使能bypass
① pipeline xml配置
<Node>
<NodeName>AAAAA</NodeName>
<NodeId>255</NodeId>
<NodeInstance>INSTANCE_AAAAA</NodeInstance>
<NodeInstanceId>26</NodeInstanceId>
<PrunableVariant variantGroup="VIULL" variantType="Enabled"/>
<NodeProperty>
<NodePropertyName>NodePropertyCustomLib</NodePropertyName>
<NodePropertyId>1</NodePropertyId>
<NodePropertyDataType>STRING</Nod