基于V4L2的视频驱动开发(1)
编写基于V4L2视频驱动主要涉及到以下几个知识点:
l 摄像头方面的知识
要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。
l Camera解码器、控制器
如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作。
l V4L2的API和数据结构
编写驱动前要熟悉应用程序访问V4L2的方法及设计到的数据结构。
l V4L2的驱动架构
最后编写出符合V4L2规范的视频驱动。
本文介绍基于S3C2440硬件平台的V4L2视频驱动开发。摄像头采用OmniVision公司的OV9650和OV9655。主要包含以下几个方面的内容:
l 视频驱动的整体驱动框架
l S3C2440 camera控制器+ov9650(ov9655)
l V4L2 API及数据结构
l V4L2驱动框架
l 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功能的使用,也是需要掌握的。如果处理不好,输出的图像效果会受影响。
控制器会在每个VSYNC下降沿判断ImgCptEn信号等命令。如果在下降沿发现ImgCptEn信号有效,则产生IRQ中断。然后才开始一帧图像的真正采集。而如果在VSYNC下降沿判断到ImgCptEn为低电平且之前LastIRQEn没有使能,则不会产生任何中断,且不会再进行下一帧的采集。如果你想在ImgCptEn关闭后,一帧采集完后产生一个中断通知你,那么就需要在最后一次中断产生前(stop capturing后的vysnc下将沿)使能lastirq就可以了。
我在移植linux驱动时就遇到了一个Last IRQ的问题。现象是输出图像上面总是有一条比其它部分反应慢。采集运动图像,就能看出现象。查看代码是因为没有设立lastirq,因为每次如果不在lastirq产生的情况下读取,图像缓冲中的数据是不稳定的,可能照成图像不完整。修改代码支持lastirq后,问题解决。
Camera控制器时钟设置也是需要注意的,ov9650需要Camera控制器为其提供时钟。
提供给外部摄像头的时钟是由UPLL输出时钟分频得到的。而CAMIF的时钟是由HCLK提供的。本例中,提供给ov9650的时钟为24M。
(2)ov9650(ov9655)设置方法
OV9650是OmniVision公司的COMS摄像头,130万像素,支持SXVGA、VGA、QVGA、CIF等图像输出格式。 最大速率在SXVGA时为15fps,在VGA时为30fps。
OV9650摄像头时序如下图:
上图中D[9:2]用于8-bitYUV或者RGB565/RGB555(D[9]MSB、D[2]LSB)。D[9:0]用于10-bit RGB。本例中使用8-bit YUV模式。
我手边开发板的Camera和S3C2440的接线原理图如下(对应camera中具体的信号名称参见前文的驱动整体架构图)。
注:GPG12用于PWEN信号
(3)编写ARM测试代码测试camera功能
在Keil环境下编写一个测试代码完成从摄像头采集图像输出到液晶屏。下面列出程序的流程。
(4)编写测试代码过程中常见的问题
l 摄像头寄存器的配置
因为摄像头有很多寄存器,可能一下无法理解里面所有的配置含义,所以开始时希望得到一份可用的配置。但往往从别人的测试代码中拿到配置后,仍然无法使用。我这里列出几个可能的原因:(1)摄像头中的图像输出格式和你在camera控制器中设置的不一致,同一个摄像头可以设置多种输入格式,如:YCbYCr或CbYCrY。(2)图像输出的一些时序和你的camera控制器设置不一致,摄像头可以设置一些时序,如:图像数据在CAMPCLK的上升沿有效还是下降沿有效。(3)注意输出图像的格式和Framebuffer控制器的匹配,如字节顺序等问题。
l Ov9650和ov9655的使用区别
这里主要列出两者之间在复位信号上有差别,ov9650是高电平复位,而ov9655是低电平复位。
基于V4L2的视频驱动开发(1)相关推荐
- 基于V4L2的视频驱动开发(2) 华清远见 刘洪涛
基于V4L2的视频驱动开发(2) 华清远见 刘洪涛 三. V4L2 API及数据结构 V4L2是V4L的升级版本,为linux下视频设备程序提供了一套接口规范.包括一套数据结构和 ...
- 基于V4L2的视频驱动开发
基于V4L2的视频驱动开发 编写基于V4L2视频驱动主要涉及到以下几个知识点: ●摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法.各种参数的配置方法.信号输出类型等. ●Camera解码 ...
- 基于V4L2的视频驱动开发(1)---Camera
编写基于V4L2视频驱动主要涉及到以下几个知识点: ● 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法.各种参数的配置方法.信号输出类型等. ● ...
- 基于V4L2的视频驱动开发(2
三. V4L2 API及数据结构 V4L2是V4L的升级版本,为linux下视频设备程序提供了一套接口规范.包括一套数据结构和底层V4L2驱动接口. 1.常用的结构体在内核目录i ...
- 基于MTD的NAND驱动开发(二)
基于MTD的NAND驱动开发(二) 基于MTD的NAND驱动开发(三) http://blog.csdn.net/leibniz_zsu/article/details/4977853 http:// ...
- 分享自清客 《基于MTD的NAND驱动开发(完) (转)》
url:http://blog.csdn.net/mianyy/article/details/6712631 六.NAND驱动中的坏块管理 由 于NAND Flash的现有工艺不能保证NAND的Me ...
- 基于DM642 RAW采集格式的视频驱动开发及应用
摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析.修改用于标准格式的视频 ...
- 基于Video4Linux的视频采集模块开发
linux系统中,摄像头驱动程序安装好后,为了进行视频采集必须加入Video4Linux模块,从而可以通过Video4Linux模块提供的编程接口(API)从摄像头设备中获取图像帧.下面具体研究基于V ...
- vxWorks6.6下基于vxBus的以太网驱动开发
最近更换mpc8313的phy芯片,由原来的lxt972Phy更换为DP83849I,在此记录下本人在驱动开发过程中的点滴记录,以备日后查询,基于vxbus的网络驱动,vxBus驱动的注册遵循一致的方 ...
最新文章
- 关于jetty的那些奇葩问题
- Android 设置EditText光标位置(转)
- Nginx代理功能与负载均衡详解
- VTK:Qt之RenderWindowUISingleInheritance
- JS----JavaScript数组去重(12种方法,史上最全)
- 静态变量读取属性文件_一种通过变量插值读取属性的方法
- javascript学习系列(16):数组中的every方法
- 手把手教你用Python实现“坦克大战”,附详细代码!
- python试卷生成_小学初中高中试卷自动生成
- 推荐一种优秀的数据结构技巧
- MongoDB复制集全量同步改进
- Atitit jpql ast总结v2 t025.docx 目录 1.1. 多select字段 1 1.2. 多个and条件 (ok) 2 1.3. Select 字段函数(聚合等) 2 1.4. [
- Linux忘记密码的找回方法
- linux安装软件统一格式化,Ubuntu 14.04安装格式转换软件Format Junkie 1.07
- 有线网络、无线网络、蜂窝网络、移动网络到底是啥?
- Chrome 插件集推荐
- 计算机网络水晶头博客,网线水晶头接法顺序图解分享,这个简单口诀记好了(超实用)...
- javascript 简繁转换
- 6个杰出的国产APP推荐,你知道多少呢?
- 用函数求最大公约数c语言,C语言求最大公约数公式分享
热门文章
- UE4 Slate九 控件反射器Widget Reflector介绍
- 基2FFT算法matlab程序编写,按时间抽取的基2FFT算法分析及MATLAB实现
- javascript购物车实现详细代码讲解
- Mozilla Firefox 全版本下载
- 如何用计算机做函数图像,用计算机画函数图像 优秀教学实录
- java tostring格式化日期_Java格式化日期的三种方式
- git-常见问题解决方法(全)
- 故障描述:服务器应用程序不可用
- c语言中3%3e2%3e1的值,Javascript中的空数组值
- AsyncTask 的参数