NXP S32V234 如何抓取图像的 Buffer 进而分析

 

前言:

有时候在 S32V234 上进行 Camera 调试的时候无法正常显示图像,可以尝试抓取图像的 Buffer 来进行分析,下面我们这里用 isp_sonyimx224_csi_dcu 的 Demo 来举例如何抓取图像 Buffer ,再通过第三方工具帮助进行分析我们调试过程中遇到的问题。

 

1. 在Demo 的main.cpp 文件中添加代码

 (1)添加抓取 Buffer 相关宏定义以及图像容器 gFrameCAM 的定义。 
#define CAM_SAVE    save_file_from_frame


#ifdef CAM_SAVE

#define CAM_LINES (720)

#define CAM_SAVE_PIXELS (1280)

#define CAM_SAVE_STRIDERGB (CAM_SAVE_PIXELS*3)

vsdk::Mat gFrameCAM;​


#endif

添加到图中如下位置。 
 


 

(2)如下添加的部分是把 buffer 中的内容保存为文件的函数。

#ifdef CAM_SAVE

int32_t FrameSave()

{

int32_t lRet = 0;

FILE *lpSavefile=0;

//int j;

unsigned char *data;

lpSavefile=fopen("data/dv_fortame","w+");

if (!lpSavefile) {

printf("Error: could not open save file %s\n",lpSavefile);

return -1;

}

data = (unsigned char*)gFrameCAM.data;

OAL_MemoryInvalidate(data, CAM_SAVE_STRIDERGB * CAM_LINES);

printf(" fwrite return: %d \n",(fwrite(data,CAM_SAVE_STRIDERGB, CAM_LINES,lpSavefile)));

fclose(lpSavefile);

return lRet;

}

 

#endif 添加到 main.cpp 文件中能够被调用到即可,我这里添加到 Run() 函数之前。 


(3)添加如代码,执行 framePop() 函数之后对图像进行保存。 
#ifdef CAM_SAVE
gFrameCAM = lFrame.mUMat.getMat(vsdk::ACCESS_RW | OAL_USAGE_CACHED);
FrameSave();
#endif


如下图这部分代码添加在 Run() 函数中,framePop() 函数之后。 

 


 (4)添加完成之后,进行编译生成 elf 文件,拷贝至 SD 卡中,执行 elf 可执行文件,需要注意的的是,在代码中是在 data/ 目录下生成 dv_fortame 来保存图像数据。所以需要在 elf 文件的同级目录中创建 data/ 目录,否则无法创建 dv_fortame 文件。
 



2. 分析图像

下载一款可以查看图像数据的软件,这里是使用的 7yuv 这款软件的试用版,安装好之后把保存的 dv_fortame 拖进到 7yuv 软件中即可打开。
 打开发现不是正常显示的图像,我们知道这个 Demo 的图像是 RGB24 格式1280x720 输出的,所以我们把右侧的参数修改为 GBR888 ( 数据存贮为 GBR 顺序的排列 ) 和 1280x720 再进行查看,此时发现能够正常显示图片。 

 通过调整右上角格式和分辨率等参数,我们能知道所抓取的图像的是否为我们需要的格式或者大小,进而分析 Camera 和 ISP 在调试过程中的问题。   




参考资料
[1] S32V234RM_Rev2.1.pdf

 

上一篇:NXP S32V234 ISP 模块的 IPUS 指令集

下一篇:NXP S32V234 CSE Disable 方法

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★博文作者未开放评论功能