前言:
有时候在 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 软件中即可打开。参考资料
[1] S32V234RM_Rev2.1.pdf
上一篇:NXP S32V234 ISP 模块的 IPUS 指令集
下一篇:NXP S32V234 CSE Disable 方法