【camx】算法node中dump图片信息方式

一 . 对于高通已经有的算法node 如IFE IPE 高通给了自己定义的dump 方式

(1) Dump 图片数据首先要打开dump 图片数据的自动总开关其位置在camxsettings.xml 中
camx/src/core/camxsettings.xml

在此文件中我们查找自动dump图片的变量名 autoImageDump 会找到如下setting数据;

Dump 图片的开关;
            <setting>
1040             <Name>Auto Image Dump</Name>                                                                                                                                                               
1041             <Help>Dumps output images for all enabled nodes. This will run extremely slow</Help>                                                                                                       

1042             <VariableName>autoImageDump</VariableName>                                                                                                                                                 
1043             <VariableType>BOOL</VariableType> 
1044             <SetpropKey>persist.vendor.camera.autoImageDump</SetpropKey>                                                                                                                               
1045             <DefaultValue>FALSE</DefaultValue>                                                                                                                                                         
1046             <Dynamic>FALSE</Dynamic>                                                                                                                                                                   
1047         </setting>

通过上面代码可以看到 DefaultValue 默认值是false; 我们需要把其打开 ,设置方式如下:

// 0 代表false  1 代表 true
adb shell setprop  persist.vendor.camera.autoImageDump 1
(2) dump 输出口的图片数据,
例如我要dump IPE Node 输出口图片数据如下:

​ 我们可以在camxsettings.xml文件中找到关键字 :Auto Output Image Dump Node/Port Mask 表示输出口 dump 图片数据的定义.

1091         <setting>                                                                                                                                                               
1092             <Name>Auto Output Image Dump Node/Port Mask</Name>                                                                                                                                         
1093             <Help>
1094               Will limit dumps to only the specified nodes and ports when autoImageDump is enabled
1095                       Uses ImageDumpType to define the flags
1096                       No dumps                                      = 0x0
1097                       All output ports for IFE                      = 0x1
1098                       All output ports for IPE                      = 0x2
1099                       All output ports for BPS                      = 0x4
1100                       All JPEG output ports for all JPEG nodes      = 0x8
1101                       All output ports for FDHw                     = 0x10
1102                       All output ports for LRME                     = 0x20
1103                       All output ports for RANSAC                   = 0x40
1104                       All output ports for all ChiNodes             = 0x80
1105                       All other nodes not explicitly listed above   = 0x40000000
1106             </Help>
1107             <VariableName>autoImageDumpMask</VariableName>
1108             <VariableType>UINT</VariableType>
1109             <SetpropKey>persist.vendor.camera.autoImageDumpMask</SetpropKey>
1110             <DefaultValue>0x400000ff</DefaultValue>
1111             <Dynamic>FALSE</Dynamic>
1112         </setting>

从上面可以看出:我们要从IPE Dump 数据所以需要设置为0x2

所以设置方式如下:

//打开总开关
adb shell setprop  persist.vendor.camera.autoImageDump 1
//设置dump 类型为IPE 
adb shell setprop   persist.vendor.camera.autoImageDumpMask 0x02

上面两项设置完成后需要杀服务

adb shell ps -A |grep camera
cameraserver  7642     1   53280   3400 binder_ioctl_write_read 0 S cameraserver
cameraserver  7643     1  499652  13100 binder_ioctl_write_read 0 S android.hardware.camera.provider@2.4-service_64
adb shell killall android.hardware.camera.provider@2.4-service_64 cameraserver
(3) dump 输入口的图片数据,

例如我要dump IPE Node 输入口图片数据如下:

069         <setting>                                                                                                                                                                                      
1070             <Name>Auto Input Image Dump Node/Port Mask</Name>                                                                                                                                          
1071             <Help> 
1072               Will limit dumps to only the specified nodes when autoInputImageDump is enabled 
1073                       Uses ImageDumpType to define the flags 
1074                       No dumps                                      = 0x0 
1075                       All input ports for IFE                       = 0x1 
1076                       All input ports for IPE                       = 0x2                                                                                                                              
1077                       All input ports for BPS                       = 0x4 
1078                       All JPEG input ports for all JPEG nodes       = 0x8 
1079                       All input ports for FDHw                      = 0x10                                                                                                                             
1080                       All input ports for LRME                      = 0x20 
1081                       All input ports for RANSAC                    = 0x40 
1082                       All input ports for all ChiNodes              = 0x80 
1083                       All other nodes not explicitly listed above   = 0x40000000 
1084             </Help>                                                                                                                                                                                    
1085             <VariableName>autoInputImageDumpMask</VariableName>                                                                                                                                        
1086             <VariableType>UINT</VariableType> 
1087             <SetpropKey>persist.vendor.camera.autoInputImageDumpMask</SetpropKey>                                                                                                                      
1088             <DefaultValue>0x400000ff</DefaultValue> 
1089             <Dynamic>FALSE</Dynamic> 
1090         </setting>

从上面可以看出:我们要从IPE Dump 输入数据所以需要设置为0x2

所以设置方式如下:

adb shell setprop   persist.vendor.camera.autoInputImageDumpMask 0x02

当dump IPE 输入口时还需要设置autoImageDumpIPEinputPortMask 的类型此处设置为IPEInputPortFull =0x1

<setting>
          <Name>Auto Image Dump Input Port Mask for IPE </Name>
          <Help>
               Input port mask for IPE:
               IPEInputPortFull             = 0x1;
               IPEInputPortDS4              = 0x2;
               IPEInputPortDS16             = 0x4;
               IPEInputPortDS64             = 0x8;
               IPEInputPortFullRef          = 0x10;
               IPEInputPortDS4Ref           = 0x20;
               IPEInputPortDS16Ref          = 0x40;
               IPEInputPortDS64Ref          = 0x80;
               ALLports                     = 0xFF
          </Help>
          <VariableName>autoImageDumpIPEinputPortMask</VariableName>
          <VariableType>UINT</VariableType>
          <SetpropKey>persist.vendor.camera.autoImageDumpIPEinputPortMask</SetpropKey>
          <DefaultValue>0x0F</DefaultValue>
          <Dynamic>FALSE</Dynamic>
        </setting>

所以最终的设置方式如下:

//打开总开关
adb shell setprop  persist.vendor.camera.autoImageDump 1
//设置dump 输入的类型是IPE
adb shell setprop   persist.vendor.camera.autoInputImageDumpMask 0x02
adb shell setprop   persist.vendor.camera.autoImageDumpIPEinputPortMask 0x01
(3) 以上操作完成后我们需要开启相机, 稍微会出现一点卡顿现象, 开启3到4 秒。后就可以关闭掉了

dump 数据存储在:

 data/vendor/camera/

查看数据的方式:通过ImagePlayer 软件进行查看数据这个是windows 软件;

最后: 还需要在不用的时候关闭掉, dump 数据的设置,

adb shell setprop  persist.vendor.camera.autoImageDump 0
adb shell setprop   persist.vendor.camera.autoImageDumpMask 0x0

二. 我们在node中自己写Dump图片数据 的方式:

(1)我们以memcpyNode 为例子进行讲解:

我们需要在其node 中的ProcessRequest()方法中进行我们的dump 数据操作, 此方法不断的在刷新我们每一帧数据的buffer

假设我们在其中调用一个我们已经写好的dump方法,其名字如下:DumpIntPutOrOutPut()方法;

其调用的具体位置代码如下:

CDKResult ChiMemCpyNode::ProcessRequest(
    CHINODEPROCESSREQUESTINFO* pProcessRequestInfo)
{
      ......
            if (TRUE == IsBypassableNode())
            {
             ......
            }
            else
            {
                if (0 == i)
                {
                //dump图片调用自己写的方法,传入参数,第一个参数是node 的输出buffer数据信息
                //第二个参数是node 的输入buffer数据信息;
                //第三个参数是当期是那一桢数据;    
		       DumpIntPutOrOutPut(pProcessRequestInfo>phOutputBuffer[i]
                                          ,pProcessRequestInfo>phInputBuffer[i]
                                          ,pProcessRequestInfo->frameNum);
              
                CopyImage(pProcessRequestInfo->phOutputBuffer[i], pProcessRequestInfo->phInputBuffer[i]);
                  
                }
                else if (1 == i)
                {
                    CopyImage(pProcessRequestInfo->phOutputBuffer[i], pProcessRequestInfo->phInputBuffer[0]);
                    LOG_INFO(CamxLogGroupChi, "CopyImage done for two output ports");
                }
            }
        }

        m_processedFrame++;
        UpdateMetaData(pProcessRequestInfo->frameNum);
    }
    return CDKResultSuccess;
}

(2) 一个简单的dump 图方法的写法如下:


/// dump 图片算法数据
///CHINODEBUFFERHANDLE  hOutput 图片输出buffer
///CHINODEBUFFERHANDLE hInput   图片输入buffer
///UINT64  requestId     当前是哪一帧

VOID ChiMemCpyNode:: DumpIntPutOrOutPut(  CHINODEBUFFERHANDLE hOutput,
    CHINODEBUFFERHANDLE hInput
,
    UINT64  requestId)
{
//表示我在第八帧的时候才进行数据dump
 if(requestId==8){
     //算法node 输出图的高度
    UINT32 outHeight       = hOutput->format.formatParams.yuvFormat[0].height;
     //算法node 输出图的宽度
    UINT32 outWidth       = hOutput->format.formatParams.yuvFormat[0].width;
     //算法node 输入图高度
    UINT32 inHeight        = hInput->format.formatParams.yuvFormat[0].height;
     //算法node 输入图宽度
    UINT32 inWidth        = hInput->format.formatParams.yuvFormat[0].width;
     //创建我们要保存到的文件file,"wb+":只进行读写
     FILE *fpIn4k = fopen("/data/vendor/camera/eptzinput3.nv12", "wb+");
      if (fpIn4k)
    {
      //向文件中写入图片数据;
       fwrite(hInput->pImageList[0].pAddr[0], 1, inHeight*inWidth*1.5, fpIn4k);
        //关闭流操作
        fclose(fpIn4k);
    }else{
     LOG_ERROR(CamxLogGroupChi, "dengbaocheng:  fpint false");
    }
    FILE *fpout1080p = fopen("/data/vendor/camera/eptzoutput3.nv12", "wb+");
     if (fpout1080p)
    {

       fwrite( hOutput->pImageList[0].pAddr[0], 1, outHeight*outWidth*1.5, fpout1080p);
        fclose(fpout1080p);
    }else{

        LOG_ERROR(CamxLogGroupChi, "dengbaocheng:  fpout false");
    }

  }

  
}

dump 数据的查看工具:
下载地址
提取码: eaye

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值