最近一直在忙基金申报,今天终于顺利提交了,剩下的就看缘分啦。今天有时间写写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 后;
在video for Linux 选项展开中如下选中V4L information in proc filesystem
(2)进入USB Suppot, 在 ---USB Multimedia devices 中选中 USB OV511 Camera Support
后退出。
2、编译内核make; make zImage;
3、烧录kernel
4、启动Linux,之后插入USB 摄像头设备,显示提示信息:
5、编译视频采集应用程序v4lcap,进入 /实验目录/v4lcap; make;
6、挂载nfs 文件系统,运行刚生成的v4lcap 程序
7、通过参数调整视频输出的尺寸,
[]#./v4lcap -s 320:240
8、若为中兴微zx301 芯片的摄像头,把spca5xx.o 文件拷贝到开发板,在开发板上插入
zx301 芯片的驱动spca5xx.o,插入usb 摄像头,然后运行v4lcap 应用程序。
就写这么多吧,很久没来了,谢谢大家一直关注我。