和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、P2StreamingNode log开关
如果要开 P2S 所有 module 的 log 开关,则下:
adb shell setprop vendor.debug.trace.p2 1
or
adb shell setprop persist.vendor.trace.p2 1
二、P2Streaming 流程分析
2.1 P2Streaming init 流程分析
2.1.1 log 流程分析:
13:40:25.481063 3496 3500 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 0, overrideFormat: YCRCB_420_SP, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 12, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
13:40:25.481102 3496 3500 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 1, overrideFormat: BLOB, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 11, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
13:40:25.481134 3496 3500 I mtkcam_hal_aidl_device: [0-aidl-session::configureStreams] HalStream{id: 2, overrideFormat: YCBCR_420_888, producerUsage: 131123, consumerUsage: CPU_READ_NEVER, maxBuffers: 12, overrideDataSpace: JFIF, physicalCameraId: -1, supportOffline: false, enableHalBufferManager: false}
//1.P2_StreamingNode.cpp init(`StreamingNode::init`) 开始Stream 流初始化
13:40:25.481985 3496 3930 D MtkCam/P2/StreamingNode: [init+] P2S cam 0:
13:40:25.483438 3496 3930 I MtkCam/P2/StreamingNode: [init] P2S cam 0: init lock +
13:40:25.483466 3496 3930 I MtkCam/P2/StreamingNode: [init] P2S cam 0: init lock -
// 2.P2_StreamingNode.cpp init parseInitParam 后会向下调用P2_DispatchProcessor.cpp init 方法 继续初始化
13:40:25.483515 3496 3930 D MtkCam/P2/StreamingNode: [parseInitParam+] P2S cam 0:
13:40:25.496790 3496 3930 D MtkCam/P2/StreamingNode: [parseInitParam-] P2S cam 0:
// 3.P2_DispatchProcessor.cpp 在初始化的时候会 Enable Basic/Streaming 分别用来慢动作以及正常streaming 流 mStreamingProcessor.init 初始化
13:40:25.496873 3496 3930 D MtkCam/P2/DispatchProcessor: [onInit+] P2S cam 0:
//4.正常预览流会走到 P2_StreamingProcessor.cpp init(P2_Dispatch:init()) 函数进行 initFeaturePipe(FeaturePipe create) && init3A ,然后再进行 initSSDN(),init3DNR(), RSSOMgr.init 等
13:40:25.496913 3496 3930 I MtkCam/P2/DispatchProcessor: [onInit]Enable Basic/Streaming (0/1)
13:40:25.498007 3496 3930 D MtkCam/P2/StreamingProcessor: [onInit+] P2S cam 0:
//5.P2_StreamingProcessor.cpp initFeaturePipe 会call 到 getFeatureUsageHint,然后创建 StreamingFeaturePipe 实例后进行SFP init初始化
13:40:25.498084 3496 3930 D MtkCam/P2/StreamingProcessor: [initFeaturePipe+] P2S cam 0:
13:40:25.498115 3496 3930 D MtkCam/P2/StreamingProcessor: [getFeatureUsageHint+] P2S cam 0:
13:40:25.499275 3496 3930 D MtkCam/P2/StreamingProcessor: [getFeatureUsageHint]p2rb: ReadbackMask(0x0)
13:40:25.499397 3496 3930 D MtkCam/P2/StreamingProcessor: [getFeatureUsageHint-] P2S cam 0:
13:40:25.500193 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][p2s] out port count=2, mUseIONFD=1
13:40:25.500841 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][p2s] out port count=2, mUseIONFD=1
13:40:25.501025 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][p2s] out port count=2, mUseIONFD=1
13:40:25.501381 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][p2s] out port count=2, mUseIONFD=1
13:40:25.501559 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][fpipe.helper] out port count=2, mUseIONFD=1
13:40:25.502112 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][VMDPNode] out port count=2, mUseIONFD=1
13:40:25.503192 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][VMDPNode] out port count=2, mUseIONFD=1
13:40:25.503451 3496 3930 I MtkCam/StreamingPipe/MDPWrapper: [MDPWrapper][XNode] out port count=2, mUseIONFD=1
//6.StreamingFeaturePipe.cpp create pipe 后调用 prepareGeneralPipe 进行DIPStrean 实例创建与初始化
13:40:25.503541 3496 3930 I MtkCam/StreamingPipe/Pipe: [StreamingFeaturePipe]create pipe(0xb400007b166ddcb0): SensorIndex=0 sensorNum(1) dualMode(0),UsageMode=2 EisMode=0x0 3DNRMode=67 AISSMode=0 DSDN(mode/m/d/layer/p1ctrl/10bit)=(0/1/2/1/0/0) tsq=0 StreamingSize=1280x960 Out(max/phy/large/fd/video)=(4/0/1/640x360/0x0) In(fps/p1Batch)=(30/1), secType=0 HDR10=(0/0)
13:40:25.503572 3496 3930 I MtkCam/StreamingPipe/Pipe: [prepareGeneralPipe]create & init DIPStream ++
13:40:25.521260 3496 3930 I MtkCam/StreamingPipe/Pipe: [prepareGeneralPipe]create & init DIPStream(0xb400007ba2f05220) -- secTag(0), #P2EnqueDepth(3), #subFrame(2), #SMVRBatchNum(0)
// 7.P2_StreamingProcessor.cpp mFeaturePipe -> init 会调用StreamingFeaturePipe.cpp init 方法
//8.StreamingFeaturePipe.cpp init 的时候通过InitTPIGroup --> TPIMgr-->createInstance --> createSession --> TPIMgr_PluginWrapper.cpp createPluginSession --> initSession -->
13:40:25.521363 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createSession]+ sensor(#1:main=0) mask=[0x0000400c00181020] size(raw:1280x960 app:1280x720) margin(1.000)
//9.TPIMgr_PluginWrapper.cpp createSession --> createPluginSession
13:40:25.522529 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:1]+ [0x0000000000080000][MTK ASYNC ASD] match=1 isDualPlugin=0
13:40:25.522599 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:1]- name=[MTK ASYNC ASD] match=1 run=0
13:40:25.522618 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:2]+ [0x0000000000080000][MTK META only] match=1 isDualPlugin=0
13:40:25.522804 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:2]- name=[MTK META only] match=1 run=0
13:40:25.522839 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:3]+ [0x0000000000000020][MTK DISP] match=1 isDualPlugin=0
13:40:25.522911 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:3]- name=[MTK DISP] match=1 run=0
13:40:25.522943 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:4]+ [0x0000000000001000][MTK EISQ] match=1 isDualPlugin=0
13:40:25.523102 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:4]- name=[MTK EISQ] match=1 run=0
13:40:25.523136 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:5]+ [0x0000000000000020][MTK FB] match=1 isDualPlugin=0
13:40:25.523662 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:5]- name=[MTK FB] match=1 run=0
13:40:25.523729 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:6]+ [0x0000000000000020][MTK GREEN] match=1 isDualPlugin=0
13:40:25.523872 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:6]- name=[MTK GREEN] match=1 run=0
13:40:25.523908 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:7]+ [0x0000000000008000][MTK TK_3rdPartyPlugin] match=0 isDualPlugin=1
13:40:25.523932 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:7]- name=[MTK TK_3rdPartyPlugin] match=0 run=0
13:40:25.523956 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:8]+ [0x0000000000100000][MTK TK_3RD_FOVA_Plugin] match=1 isDualPlugin=0
13:40:25.524030 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:8]- name=[MTK TK_3RD_FOVA_Plugin] match=1 run=0
13:40:25.524060 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:9]+ [0x0000000000004000][MTK DUAL 3rdPartyPlugin] match=0 isDualPlugin=1
13:40:25.524815 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:9]- name=[MTK DUAL 3rdPartyPlugin] match=0 run=0
13:40:25.525010 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:10]+ [0x0010000000000000][TP_FEATURE_EDGEFILTER] match=0 isDualPlugin=0
13:40:25.525053 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createPluginSession]negotiate[ID:10]- name=[TP_FEATURE_EDGEFILTER] match=0 run=0
13:40:25.525113 3496 3930 D MtkCam/StreamingPipe/TPI_MGR: [print]Session:0(0xb400007cc2f3f090) sensor:0 scenario:1(streaming single) cookie:0x0
13:40:25.525146 3496 3930 I MtkCam/StreamingPipe/TPI_MGR_Plugin: [createSession]- ret=1
//10.StreamingFeaturePipe.cpp InitP2AGroup() initNodes() -->
//11 然后call 到P2GMgr.cpp init 下面常用的初始化 initSensorProvider,initHALisp,initTimgoHAL,init3DNR,initASDNHAL,initSMVR
13:40:25.525914 3496 3930 I MtkCam/StreamingPipe/PipeUsage: [config]config usage : mSuppoRtSharedInput(1),supportSlaveNR(0), supportPhysicalNR(0)
13:40:25.527119 3496 3930 E MtkCam/StreamingPipe/DcesoHal: [init]missing isp buffer info (init){#72:vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/streaming/DcesoHal.cpp}
13:40:25.527139 3496 3930 I MtkCam/StreamingPipe/DreHal: [init]info=0 infoSize=0 debugSize=0 usedSize=0
13:40:25.527264 3496 3930 D MtkCam/StreamingPipe/DsdnHal: [init]mode=dsdn_off layer=0 fmt(full/ds/dn)=UNKNOW/UNKNOW/UNKNOW dsdn20Prof(-1), ver(0), forceLoopValid(0)
13:40:25.527287 3496 3930 I MtkCam/StreamingPipe/SMVRHal: [init]SMVR enable=0 size=(1280x960) p1=1 p2=1->1 recover=0
13:40:25.527515 3496 3930 I MtkCam/StreamingPipe/P2G_MGR: [printBufferPool]BufferPool: fat[1],tun[9]sync[0]dre_tun[0]msftun[0]msfSram[0]omctun[0]dce[8]timg[3]full[6]conf[0]idi[0]omc[0]ds[0x0=>0]dn[0x0=>0]pds[0x0=>0]wei[0x0=>0]dsw[0x0=>0]
13:40:25.527586 3496 3930 I MtkCam/StreamingPipe/EISQControl: [init]useQ=0 tsQ=0 pSize=1 qSize=0
13:40:25.527608 3496 3930 I MtkCam/StreamingPipe/Pipe: [onInit]+
13:40:25.527659 3496 3930 D MtkCam/StreamingPipe/Pipe: [prepareDebugSetting]forceOnMask=0x0000, forceOffMask=0x3fe1
13:40:25.527745 3496 3930 D MtkCam/StreamingPipe/Pipe: [prepareBuffer]sensor(0) StreamingSize=(1280x960) align64=(1280x960)
13:40:25.527805 3496 3930 D MtkCam/StreamingPipe/Pipe: [createFullImgPool]sensor(0) size=(1280x960) format(842094169) GraphicBuffer
13:40:25.527824 3496 3930 I MtkCam/StreamingPipe/Pipe: [onInit]-
13:40:25.527872 3496 3930 I MtkCam/StreamingPipe/Node: [enableDumpMask]fpipe.p2amdp current dumpMask(0xcff) prop(vendor.debug.mask.fpipe.p2amdp)
13:40:25.528746 3496 3930 D MtkCam/P2/StreamingProcessor: [initFeaturePipe-] P2S cam 0:
//12.StreamingFeaturePipe 然后call 到 init3A 流程
13:40:25.528786 3496 3930 D MtkCam/P2/StreamingProcessor: [init3A+] P2S cam 0:
13:40:25.529296 3496 3930 D MtkCam/P2/StreamingProcessor: [init3A-] P2S cam 0:
13:40:25.529913 3496 3930 D MtkCam/P2/StreamingProcessor: [init+]
13:40:25.530544 3496 3930 D MtkCam/P2/StreamingProcessor: [init]triger: cache=0xb400007c32ef8610
13:40:25.530556 3496 3930 D MtkCam/P2/StreamingProcessor: [init-]
13:40:25.530571 3496 3930 D MtkCam/P2/StreamingProcessor: [onInit-] P2S cam 0:
13:40:25.531028 3496 3930 D MtkCam/P2/DispatchProcessor: [onInit-] P2S cam 0:
13:40:25.531079 3496 3930 D MtkCam/P2/DispatchProcessor: [onThreadStart+] P2S cam 0:
13:40:25.531094 3496 3930 D MtkCam/P2/DispatchProcessor: [onThreadStart-] P2S cam 0:
13:40:25.531130 3496 3930 D MtkCam/P2/StreamingNode: [init-] P2S cam 0:
2.1.2 Systrace 流程分析

2.1.3 代码大致流程图
1.P2_StreamingNode.cpp init(StreamingNode::init
) 开始Stream 流初始化
2.P2_StreamingNode.cpp init parseInitParam 后会向下调用P2_DispatchProcessor.cpp init 方法 继续初始化
3.P2_DispatchProcessor.cpp 在初始化的时候会 Enable Basic/Streaming 分别用来慢动作以及正常streaming 流 mStreamingProcessor.init 初始化
4.正常预览流会走到 P2_StreamingProcessor.cpp init(P2_Dispatch:init()) 函数进行 initFeaturePipe(FeaturePipe create
) && init3A ,然后再进行 initSSDN(),init3DNR(), RSSOMgr.init 等
5.P2_StreamingProcessor.cpp initFeaturePipe 会call 到 getFeatureUsageHint,然后创建 StreamingFeaturePipe 实例后进行SFP init初始化
6.StreamingFeaturePipe.cpp create pipe 后调用 prepareGeneralPipe 进行DIPStrean 实例创建与初始化
7.P2_StreamingProcessor.cpp mFeaturePipe -> init 会调用StreamingFeaturePipe.cpp init 方法
8.StreamingFeaturePipe.cpp init 的时候通过InitTPIGroup --> TPIMgr-->createInstance --> createSession --> TPIMgr_PluginWrapper.cpp createPluginSession --> initSession -->
9.TPIMgr_PluginWrapper.cpp createSession --> createPluginSession
10.StreamingFeaturePipe.cpp InitP2AGroup() initNodes() -->
11 然后call 到P2GMgr.cpp init 下面常用的初始化 initSensorProvider,initHALisp,initTimgoHAL,init3DNR,initASDNHAL,initSMVR
12.StreamingFeaturePipe 然后call 到 init3A 流程

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
点个在看,为大佬点赞!