OV511视频采集设计文档

301 篇文章 0 订阅
271 篇文章 2 订阅

作者:曾永刚

转自:http://zyg0227.blog.51cto.com/1043164/316934


BCNG 
 
                                 OV511视频采集设计文档
 
版 本:1.0
作 者:hgang
日 期:2008-07-12
 

 
  
一.    概述
 本项目是在基于 S3C2440的嵌入式开发板上实现视频图像采集,压缩,传输等功能,本文主要介绍视频采集部分。
视频采集使用的是带有 OV511芯片的 V2000摄像头, linux系统自带了 OV511的驱动程序,所以无需另外安装驱动,只需在编译内核时加载进去

二.    编译内核与驱动加载
1.  静态加载
(1)       /home/xiyong/bcng2440/linux-bcng2440-xiyong目录下 make menuconfig
(即板子的内核目录,如果要在 PC上使用摄像头则在 /usr/src/linux-2.4下操作)
(2)       首先 (*)(“ y”键)选择 Multimedia device->下的 Video for linux。加载 video4linux模块,为视频采集设备提供编程接口;
(3)       然后在 usb support->目录下 (*)选择 support for usbusb camera ov511
support
。这使得在内核中加入了对采用 OV511接口芯片的 USB数字摄像头的驱动支持。
(4)       保存配置退出。
(5)        make dep
(6)       修改 /home/xiyong/bcng2440/linux-bcng2440-xiyong/drivers/media/video目录下
videodev.c程序(修改方法在后面调试过程部分有叙述)。
(7)       make zImage,然后 cp ./arch/arm/boot/zImage  /tftpboot/;
2.  动态加载
(1)       arm linux kernel 目录下 make menuconfig
(2)       首先 <*> 选择 Multimedia device-> 下的 Video for linux
(3)       然后在 usb support-> 目录下 <*> 选择 support for usb <M> 选择 usb camera
ov511 support
(4)       保存退出。
(5)      Make dep;
(6)       修改 videodev.c 程序。
(7)      make zImage;make modules 然后就在 /driver/usb 下生成 ov511.o ,同
时生成的 zImage 自动放在 /tftpboot 下。
(8)      后用新内核启动板子后 insmod ov511.o 就可以成功加载。
 
我们使用的是静态加载;内核编译完以后板子的启动命令为 t 30008000 zImage; go 30008000;
 
需要注意的是:
(1)     编译内核是要选择正确的路径,编译 PC机内核路径是 /usr/src/linux-2.4.18-14,编译板子是 /home/xiyong/bcng2440/linux-bcng2440-xiyong
(2)     注意“ *”( y键)选和“ M”选的不同。
三.    设计方案
3.  定义的数据结构
 
typedef struct v4l_struct
{
       int fd;// 设备名
       struct video_capability capability;// 设备信息
       struct video_picture picture;// 摄像头缓冲区内图像信息
       struct video_window window;// 窗口信息
       struct video_mmap mmap;// 用于内存映射
       struct video_mbuf mbuf;// 利用 mmap 进行映射的帧的信息
unsigned char *map;// 用于存储映射得到的图片的首地址
       int framestat[2];// 定义帧状态
}v4l_device;
 
 
(1)           video_capability 包含设备的基本信息(设备名称、支持的最大最小分辨 率、信号源信息等)
name[32] 设备名称
maxwidth
maxheight
minwidth
minheight
Channels 信号源个数
type 是否能capture 彩色还是黑白, 是否能裁剪等等。值如VID_TYPE_CAPTURE
 
       可以调用
       ioctl(vd->fd,VIDIOCGCAP,&(vd->capability)
       来读取这些信息。
             
(2)           video_picture 设备采集的图象的各种属性
Brightness 0~65535
hue
colour
contrast
whiteness
depth 8 16 24 32
palette VIDEO_PALETTE_RGB24 | VIDEO_PALETTE_RGB565|
VIDEO_PALETTE_JPEG| VIDEO_PALETTE_RGB32|VIDEO_PALETTE_YUV420 等。
       可以调用
       ioctl(vd->fd,VIDIOCGPICT,&(vd->picture)) 读取各信息,
       ioctl(vd->fd,VIDIOCSPICT,&(vd->picture)) 重新设置各信息分量。
 
(3)           video_mbuf 利用mmap 进行映射的帧的信息size 每帧大小
Frames 最多支持的帧数
Offsets 每帧相对基址的偏移
可以调用
ioctl(vd->fd, VIDIOCGMBUF, &vd->mbuf)
读取各信息分量。
 
这部分出现的问题:
(1)     在程序开始之时声明一个v4l_device 结构之后一定要为其分配内存空间
v4l_device *vd;
       vd=(v4l_device *)malloc(sizeof(v4l_device));
否则会导致问题,在读取vd->mbuf 信息时vd->mbuf.offsets 为一个非常大的负值,然后在读取映射图片的地址时(vd->map + vd->mbuf.offsets[frame] )就会导致读取数据失败。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值