snifer

【原创】Video4linux 下视频编程的流程

0
阅读(1350) 评论(0)

最近一直在忙基金申报,今天终于顺利提交了,剩下的就看缘分啦。今天有时间写写Video4linux 下视频编程的流程。Video4linux(简称 V4L),是linux 中关于视频设备的内核驱动。现在已有Video4linux2,还未加入linux 内核,使用的时候要自己下载补丁,今天就讲讲Video4linux 下视频编程的流程。

Video4linux 支持的主要数据结构

video_capability

包含设备的基本信息,包含的成员:

name[32]; 设备名称

type; 是否能capture,彩色还是黑白,是否能裁剪等等。值如 VID_TYPE_CAPTURE 等

channels; 信号源个数

audios; 音频设备数目

maxwidth; 支持视频显示的宽度上限

maxheight; 视频显示的高度上限

minwidth;

minheight;

video_picture

设备采集的图象的各种属性,在应用程序中使用VIDIOCSPICT ioctl 来改变设备的此种属性。包含的成员:

brightness 亮度 0~65535

hue 色调

colour 颜色(彩色模式)

contrast 对比度

whiteness 白色度(灰度级模式)

depth 捕获深度(配合显示缓冲区的颜色深度)

palette 调色板信息

video_channel

关于各个信号源的属性,每种video4linux 视频或者音频设备可以从一个或者多个信号源捕获数据。调用的ioctl 接口是VDIOCGCHAN。调用前必须设置信号源的各个信道域。包含的成员:

channel 信号源的标号

name 信号源名称

tuners tuners 的数目

flags tuner 的属性

type 输入类型

norm 制式

video_mbuf

利用mmap 进行映射的帧的信息。系统调用syscall 时会从设备返回下一个可用的影像。而调用者

首先要设置获取图像的大小和格式。通过调用ioctl 接口 VDIOCGCHAN 实现。注意并不是所有的设备

都支持此种操作:

size 帧大小

frames 最多支持的帧数

offsets[VIDEO_MAX_FRAME] 每帧相对基址的偏移

编程流程:

1、打开视频设备:视频设备是设备文件,可以像访问普通文件一样对其进行读写,在我们

的平台上,摄像头设备是/dev/v4l/video0。

2、读取设备信息

3、更改设备当前的设置(如果有必要)

4.进行视频采集,视频采集主要有两种方法:

(1)内存映射(本实验中采用)

(2)直接从设备读取

5、对采集的视频进行处理(本实验中没有做处理)

6、关闭视频设备。

、实验步骤

1、首先配置内核make menuconfig

(1)进入Multimedia devices ---> 选中video for Linux 后;

blob.png

在video for Linux 选项展开中如下选中V4L information in proc filesystem

blob.png

(2)进入USB Suppot, 在 ---USB Multimedia devices 中选中 USB OV511 Camera Support

后退出。

2、编译内核make; make zImage;

3、烧录kernel

4、启动Linux,之后插入USB 摄像头设备,显示提示信息:blob.png

5、编译视频采集应用程序v4lcap,进入 /实验目录/v4lcap; make;

6、挂载nfs 文件系统,运行刚生成的v4lcap 程序

blob.png

7、通过参数调整视频输出的尺寸,

[]#./v4lcap -s 320:240

8、若为中兴微zx301 芯片的摄像头,把spca5xx.o 文件拷贝到开发板,在开发板上插入

zx301 芯片的驱动spca5xx.o,插入usb 摄像头,然后运行v4lcap 应用程序。

就写这么多吧,很久没来了,谢谢大家一直关注我。