相机预览流P2StreamingNode流程梳理

发布于:2025-04-19 ⋅ 阅读:(60) ⋅ 点赞:(0)

和你一起终身学习,这里是程序员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 流程分析
image.png
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 流程

image.png

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

点个在看,为大佬点赞!


网站公告

今日签到

点亮在社区的每一天
去签到