作者:刘洪涛,华清远见嵌入式学院讲师。
编写基于V4L2视频驱动主要涉及到以下几个知识点:
● 摄像头方面的知识
要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。
● Camera解码器、控制器
如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作。
● V4L2的API和数据结构
编写驱动前要熟悉应用程序访问V4L2的方法及设计到的数据结构。
● V4L2的驱动架构
最后编写出符合V4L2规范的视频驱动。
本文介绍基于S3C2440硬件平台的V4L2视频驱动开发。摄像头采用OmniVision公司的OV9650和OV9655。主要包含以下几个方面的内容:
视频驱动的整体驱动框架
● 3C2440 camera控制器+ov9650(ov9655)
● V4L2 API及数据结构
● V4L2驱动框架
● ov9650(ov9655)+s3c2440+V4L2实例
一、 视频驱动的整体框架
视频驱动的整体框架见下图:
二、S3C2440 camera控制器+ov9650(ov9655)
(1)S3C2440 camera控制器介绍
S3C2440支持ITU-R BT601/656格式的数字图像输入,支持的2个通道的DMA,Preview通道和Codec通道,参见下图。
Preview通道可以将YCbCr4:2:2格式的图像转换为RGB(16bit或24bit)格式的数据,并存放于为Preview DMA分配的内存中,最大分辨率为640*480。主要用于本地液晶屏显示。如果将Preview DMA的内存和Framebuffer内存重叠的话,就可以实现采集直接输出到液晶屏上了。
Codec通道可以输出YCbCr4:2:0或YCbCr4:2:2格式到为Codec DMA分配的内存中。最大分辨率为4096*4096。主要用于图像的编解码处理。
上图中的window cut功能是指在图像可以先做一个裁剪。通过设置CIWDOFST完成此功能,见下图。图像进入P、C通道后,各自的scaler单元还可以对其进行缩放、旋转等处理。
S3C2440 camera控制器支持乒乓存储。为了防止采集和输出之间的冲突,采用了乒乓存储方式。每次采集一帧后,自动转到下一个存储区。如果你因为内存空间不足,不想使用此功能的话,可以将四个区域设置到同一块空间。
在做图像处理时,需要关注到最后存储区中的图像格式,如codec通道硬件自动把Y、Cb、Cr分离存储。
S3C2440 camera 控制器Last IRQ功能的使用,也是需要掌握的。如