Overview
组成:
当Framework丢过来一个Frame时,会根据以上流程依次处理Frame,在StreamingFeaturePipe中RootNode总是作为第一个节点,最后一个节点一定是HelperNode,
TPINode用于挂载三方算法的节点,
P2StreamingNode:
DispatchProcessor:处理一帧中 image/meatdata 自动请求和释放
StreamingProcessor:
StreamingFeaturePipe:
P2StreamingNode:
PipelineModel 根据 Request 生成一个PipelineFrame,放到Pipeline Context中,流到节点 P2StreamingNode 中,在其中主要做的是image/metadata的请求和释放的操作,
再将PipelineFrame封装为MWFrame,并丢给Dispatch Processor。Dispatch Processor根据分派策略把MWFrame封装为P2Request并分派给Streaming Processor 和 Basic Processor。
当stream配置为慢动作或者Debug,则会走Basic Processor这条路。配置为做feature 的 Stream会将P2Request送给Streaming Processor 。Streaming Processor 会把P2Request做一层封装,
得到Streaming Feature Parm,再丢给Streaming FeaturePipe。Streaming FeaturePipe再把Streaming Feature Parm封装为 Streaming Feature Request,并送给各个Node。
以上做封装的意义是让数据格式与其它层无关。比若说最上层的PipelineFrame数据格式发生改变,下面两层都可以不用更改Frame的数据格式。
Pipelie Frame Request:PipelineModel 根据 Request 生成的。
MW Frame Request:创建MWImg 和 MWMeta并映射。更新sensordata,framedata,metadata,从metadata中得到cropper信息,根据信息创建一个P2Corpper。根据IPipeFrame的image size来创建P2 Request向量。
P2 Request:将一个Pipelie Frame的IOmap图映射到另外一个P2Request。
StreamingProcessor:1. 准备节点的feature动作的开关及其相应的组合关系。
2. 准备输出Buffer的计算。
3. 根据不同feature将Request添加到不同的StreamingFeaturePipe队列中,并post起来等待处理。
4. 准备每个节点处理完数据后的回调。
StreamingFeaturePipe:
是P2StreamingNode和P2Driver的中间层。用于处理Streaming中数据的feature,SPF下面是各个SPF Node,SPF通过handleData将数据传递给SPF Node,
而Node通过onData将数据传递给其他Node。而且每个SPF Node都有自己的线程不断地监听并从Queue中读取,处理,传递数据。
SPF Node 连接方式:
一定是从根节点(RootNode)开始,进过P2ANode时,数据从RAW格式转化为YUV格式,之后有四条路可走
1. 走普通的预览录像通路,最后到节点HelperNode,再见数据回调上去。
2. APP需要另外的preview,VSS(一出多)时,走P2AMDPNode这条路,进行溢出VSS和preview的动作,最后HelperNode将溢出的数据回调上去。
3. Record的时候设置了EIS(电子防抖),走EISNode这条路,EISNode会计算WrapMap,在WrapNode这里将Frame数据和WrapMap数据送给Driver做crop。最后HelperNode将Frame数据回调上去。
4. 走三方算法时,三个TPINode可以挂载三个三方算法,Frame会在这些三方算法节点被处理,再经过VendorMDPNode将数据一出多,HelperNode将溢出的数据回调上去。或者也可以通过EIS进行防抖处理后再返回。
MDP:主要负责显示数据的转换和部分图像处理功能理,如YUV转RGB,放大缩小、旋转等。
如何在streaming中挂载三方算法:
1. 创建一个文件
/vendor/mediatek/properietary/hardware/mtkcame3/3rdpart/mtk/s_fb/sample_streaming_fb.cpp
2.文件中定义一个类并继承 JoinPlugin::IProvider
class FB_Plugin : public JoinPlugin::IProvider
3. 重写JoinPlugin::IProvider相关函数
property()
negotiate()
selection.cfgorder = // 设置三方算法挂载的顺序
selection.cfgjoinentry = // 设置三方算法的挂载点
selection.cfginplace = //
selection.cfgenablefd = // frame是否需要FD信息
selection.cfgrun = // 是否运行挂载的三方算法
process()
4. REGISTER_PLUGIN_PROVIDER(join,plugin_name) 调用函数将实现的类注册到Pipeline Plugin
5. 在 /vendor/mediatek/properietary/hardware/mtkcame3/3rdpart/mtk/Android,mk下将sample_streaming_fb.cpp编译到库中
LOCAL_SRC_FILES += s_fb/sample_streaming_fb.cpp
Debug: adb下开启P2StreamingNode的log。
开启P2S的所有模块的Log:adb shell setprop vendor.debug.trace.p21 / presist.vendor.trace.p21
开启P2S单独模块的Log:adb shell setprop vendor.debug.trace.p2(P2_CLASS_TAG)1 / presist.vendor.trace.p2(P2_CLASS_TAG)1
P2_CLASS_TAG是各个cpp文件定义的宏值。
StreamingNode: MtkCam/P2/StreamingNode
DispatchProcessor: MtkCam/P2/DispatchProcessor
StreamingProcessor: MtkCam/P2/StreamingProcessor
StreamingFeaturePipe: MtkCam/StreamingFeaturePipe
MtkCam/StreamingFeaturePipe/xxxNode(Timer,Data,Pipe)
如何Dump Buffer:
1. root权限
2. adb shell setprop "vendor.debug.p2f.dump.enbale" 2
3. 设置dump 模式为 P2_DUMP_NDD(normal data dump 导出全部数据)
P2_DUMP_DEBUG(debug data dump 导出单个模块的数据)
adb shell setprop "vendor.debug.p2f.dump.mode" 2 // 设置为dump单个p2f模块
adb shell setprop "vendor.debug.p2f.dump.start" x // 从第x帧开始dump
adb shell setprop "vendor.debug.p2f.dump.count" y // 这次要dump的帧数为y
3. adb shell stop camerahalserver //重启camerahalserver,使得设置生效
adb shell startcamerahalserver
4. 降dump的buffer拿出来:
adb pull /data/vendor/camera_dump E:\xxx
5. 清除dump信息:
adb shell rm -fr /data/vendor/camera_dump/*
6.buffer数据格式(7yuv程序看)
例:dump SFP Node buffer
1. mkdir /vendor/dump
2. adb shell setprop "vemdor.debug.fpipe.force.dump" m
adb shell setprop "vemdor.debug.fpipe.force.dump.count" x
adb shell setprop "vemdor.debug.fpipe.dump.by.record.no" y // 从recordNo第y张开始 ,从requestNo第y张开始
3. adb shell stop camerahalserver //
adb shell startcamerahalserver
用手机拍照
4. adb pull /data/vendor/camera_dump E:\xxx
源码路径:
StreamingNode: /vendor/mediateck/properietary/hardware/mtkcam3/pipeline/hwnode/p2
StreamingFeaturePipe: /vendor/mediateck/properietary/hardware/mtkcam3/feature/core/featurePipe/streaming
标签:Node,P2,shell,vendor,dump,adb,P2Streaming,debug From: https://www.cnblogs.com/zsy12138/p/11401545.html