没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
46页
编写基于V4L2视频驱动主要涉及到以下几个知识点: ● 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。 ● Camera解码器、控制器 如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作。 ● V4L2的API和数据结构 编写驱动前要熟悉应用程序访问V4L2的方法及设计到的数据结构。 ● V4L2的驱动架构 最后编写出符合V4L2规范的视频驱动。
资源推荐
资源详情
资源评论
基于 V4L2 的视频驱动开发
基于 V4L2 的视频驱动开发
编写基于 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 控制器介绍
1
基于 V4L2 的视频驱动开发
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。主要用于图像的编解码处理。
2
基于 V4L2 的视频驱动开发
上图中的 window cut 功能是指在图像可以先做一个裁剪。通过设置 CIWDOFST 完成此功能,见
下图。图像进入 P、C 通道后,各自的 scaler 单元还可以对其进行缩放、旋转等处理。
S3C2440 camera 控制器支持乒乓存储。为了防止采集和输出之间的冲突,采用了乒乓存储方式。
每次采集一帧后,自动转到下一个存储区。如果你因为内存空间不足,不想使用此功能的话,可
以将四个区域设置到同一块空间。
在做图像处理时,需要关注到最后存储区中的图像格式,如 codec 通道硬件自动把 Y、Cb、Cr 分
离存储。
3
基于 V4L2 的视频驱动开发
S3C2440 camera 控制器 Last IRQ 功能的使用,也是需要掌握的。如果处理不好,输出的图像效
果会受影响。
控制器会在每个 VSYNC 下降沿判断 ImgCptEn 信号等命令。如果在下降沿发现 ImgCptEn 信号有
效,则产生 IRQ 中断。然后才开始一帧图像的真正采集。而如果在 VSYNC 下降沿判断到
ImgCptEn 为低电平且之前 LastIRQEn 没有使能,则不会产生任何中断,且不会再进行下一帧的
采集。如果你想在 ImgCptEn 关闭后,一帧采集完后产生一个中断通知你,那么就需要在最后一
次中断产生前(stop capturing 后的 vysnc 下将沿)使能 lastirq 就可以了。
我在移植 linux 驱动时就遇到了一个 Last IRQ 的问题。现象是输出图像上面总是有一条比其它部
分反应慢。采集运动图像,就能看出现象。查看代码是因为没有设立 lastirq,因为每次如果不在
4
基于 V4L2 的视频驱动开发
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 信号
5
剩余45页未读,继续阅读
资源评论
tdw200
- 粉丝: 39
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功