DSP

基于DM6467的OV5642视频采集编码程序设计(3)——PAL格式输入及其他调试

2019-07-13 15:14发布

 

1        OV5642各种输出格式调试记录

OV5642支持许多种格式输出,几乎能输出不大于2592 x 1944的任意分辨率和不大于30fps的任意帧率视频,但是要让OV5642输出想要的格式却并不是件容易的事,因为需要设置许多寄存器,都是一些相关模拟参数设置,并且数据手册中没有详细说明。所以,要设置OV5642为某种输出格式就只能使用官方提供的配置方案。 通过在网上找了很长时间,发现飞思卡尔的imx平台(类似的DaVinci的视频处理平台)也使用OV5642,并提供对应的linux设备驱动文件(详情见参考文献中的两个.c文件),于是,将其中的各种配置拷贝过来在CCS中进行测试,最终测试结果如下。   经过测试,发现其中的各种配置只有VGA15fps和PAL 15fps两种可以使用。VGA 15fps情况下输出的图像经Matlab处理后显示效果如下所示。
PAL 15fps模式下输出的视频图像经Matlab处理后显示效果如下所示。

2        OV5642 PAL格式输出调试

要在Linux中使用OV5642进行视频采集,需要修改内核,编写应用程序。由于之前的《OV5642视频采集编码程序设计.doc》已经对如何编写驱动程序和修改内核有了详细说明,所以这里不再细说。 要添加Linux内核对OV5642输出PAL 15fps格式的支持,需要修改以下文件: ./arch/arm/mach-davinci/board-dm646x-evm.c ./driver/media/video/ov5642.c ./driver/media/video/v4l2-ioctl.c ./include/linux/videodev2.h ./driver/media/video/davinci/vpif.c ./driver/media/video/davinci/vpif_capture.c 至于具体怎么修改可参考kernel_pal目录下的各个对应文件。 在修改完linux内核之后,需要修改DVSDK中的DMAI API以兼容PAL 15fps的OV5642输入格式,这非常简单,只需要在以下文件中添加相关定义即可,具体可参考DMAI文件中的对应文件。 VideoStd.h VideoStd.c /linux/Capture.c 修改完DMAI之后,需要修改demo程序。由于之前已经修改过demo支持OV5642的vga输入,现在要改为pal输入,只需要修改main.c文件中的default_args和capture.c中的Capture_Attrs,也非常简单,具体请参考相关文件夹中的代码。 由于我们的显示器只支持PAL和NTSC格式输入,而我们的上位机视频解码软件只支持PAL D1解码,所以在修改OV5642为PAL 15fps输出之后这些工具都可以使用了。 使用encodedecode demo通过OV5642采集播放视频的效果如下所示。
使用encode demo通过OV5642采集视频并进行网络传输播放的效果如下所示。

3        ARM端处理能力测试

由于现在使用的H264编码器和解码器都是使用YUV420PSEMI颜 {MOD}空间格式作为输入输出,而OV5642输入的是YUYV422格式,而且还是10bit位宽,所以使用ARM进行颜 {MOD}空间转换,而ARM的计算能力是很差的,为了测试ARM的处理能力,将OV5642分别置为输出vga 7.5fps和vga 15fps以及pal 15fps格式,看encode demo的运行情况。 VGA 7.5fps输入时encodedemo运行情况如下:    VGA 15fps输入时encodedemo的运行情况如下:    PAL 15fps输入时encodedemo的运行情况如下:    可以看出,ARM在VGA输入时只能承受10fps的速率,在PAL输入时只能承受7fps的速率,考虑到PAL输入时每一帧的数据量是VGA输入时的1.35倍,而10/7=1.42,这数据明显是没有问题的。 所以,如果不修改H264编解码器(这个比较困难,因为codec的源码没有对外开放),那么在使用OV5642输入时只能处理很低帧率的视频,并且分辨率越高时候帧率越低。