当前位置:   article > 正文

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

ov5642


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颜色空间格式作为输入输出,而OV5642输入的是YUYV422格式,而且还是10bit位宽,所以使用ARM进行颜色空间转换,而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输入时只能处理很低帧率的视频,并且分辨率越高时候帧率越低。


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颜色空间格式作为输入输出,而OV5642输入的是YUYV422格式,而且还是10bit位宽,所以使用ARM进行颜色空间转换,而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输入时只能处理很低帧率的视频,并且分辨率越高时候帧率越低。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/643594
推荐阅读
相关标签
  

闽ICP备14008679号