首页 > 编程语言 >P2Streaming Node

P2Streaming Node

时间:2024-04-17 10:46:12浏览次数:30  
标签:Node P2 shell vendor dump adb P2Streaming debug

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

相关文章

  • node安装
    一、nodejs安装下载地址:http://nodejs.cn/msi和.zip格式区别:1、.msi是Windowsinstaller开发出来的程序安装文件,它可以让你安装,修改,卸载你所安装的程序。2、.zip是一个压缩包,解压之后即可,不需要安装安装步骤“无脑下一步”。你可以设置安装的路径。二、默认安装目录这是......
  • node统计指定文件夹内代码行数
    1.来源想对于自己接触前端日常学习与思考的代码行数进行一个统计,看自己大约敲了多少代码2.代码constfs=require('fs')constpath=require('path')functioncalculateCodeLines({directory='',writeResFilePath='',fileReg=/\.(js|ts|jsx|tsx|vue|ht......
  • 如何解决node.js运行mysql报错?
    首先检查mysql客户端的密码是否正确正确后提示我没有安装mysql模板 在文件目录终端下输入cnpminstall-gmysql进行安装这时候运行还是显示错误上网搜了一下说是登录数据库的客户端跟mysql8.0不兼容了,mysql8.0密码认证采用了新的密码格式[解决方法]打开命令管理器进入m......
  • 性能监控工具 grafana + prometheus + node_exporter 下载配置
        grafana   prometheus: 时序数据库,存储数据的   node_exporter: 收集数据(收集监控数据)     node_exporter 收集linux**系统资源利用**数据   这个解决方案中,node_exporter是可变的,是根据你要收集**哪些数据来进行选择**一、安装解压配置pr......
  • 关于Nodejs入坑!!!
    关于Nodejs入门什么是nodejs?一个开源与跨平台的JavaScript运行时环境;可以理解为Node.js就是一个服务器端的、非阻塞式I/O的、事件驱动的JavaScript运行环境Node作为一个新兴的前端框架,后台语言,有很多吸引人的地方:RESTfulAPI,单线程。https://www.ruanyifeng.com特点:1......
  • node笔记1:vue+node+mongodb+studio 3T创建登录模块
    1.创建node项目:expressnodenpmipackage.json修改如下代码,便于每次修改代码都可以刷新页面:"scripts":{"start":"node-dev./bin/www"}2.如果配合node设置反向代理;3.添加mongoose模块提供数据库信息:npmimongoose--save4.以登录功能模块为例,项目文件如下:model......
  • node 和 npm 如何进行版本升级
    node和npm在某种意义上,早已成为当前前端开发中不可或缺的工具。本文将介绍如何进行node和npm的版本升级和指定等等操作。查看node和npm版本:node-vnpm-v清除npm缓存:npmcacheclean-f如何升级npm当只需要简单的升级npm的时候,可以比较方便的处理。npm升级到最新版......
  • 2-68. 基础数据创建 Node & GridNodes
    AStar算法概览先选FCost最小的点,如果FCost相同再选HCost最小的点回来的时候是找FCost最小的点数据结构创建Node脚本GridNodes修改MapData_SO因为地图上左下角的点是负数,这个点没有办法直接导入到数组下标中,所以需要对这个点进行处理,以便它能够映射到数......
  • linux 安装node
    安装参考地址:https://www.cnblogs.com/shining-feifan/p/17425518.htmlhttps://www.jianshu.com/p/900525215647 node官网下载地址https://registry.npmmirror.com/binary.html?path=node/latest-v14.x/ 一、下载安装包到本地1wget https://cdn.npmmirror.c......
  • ubuntu系统上安装nodejs
    linux上python运行execjs函数,需要js环境,需要安装nodejs和npm sudoapt-getupdatecurl-sLhttps://deb.nodesource.com/setup_18.x|sudo-Ebashapt-getinstallnodejs-y报错 dpkg-deb:error:pastesubprocesswaskilledbysignal(Brokenpipe)  E:Sub-proces......