关于linux命令pict的信息( 八 )


在Linux下常用的摄像头驱动是spca5xx 。这个网站还给出linux命令pict了这款驱动支持的摄像头的种类 。另外linux命令pict,ov511芯片直接就支持Linuxlinux命令pict,使用者款芯片的摄像头有网眼V2000 。我使用的是网眼V2000的摄像头linux命令pict,和Z-Star
301p+现代7131R芯片的摄像头 。后一种需要spca5xx的驱动 。关于spca5xx的安装方法 , 网上有很多介绍,这里就不说linux命令pict了 。
2. 摄像头的调试
安装好摄像头后,为了测试摄像头能否正常工作 , 可以用一下软件 。比较著名的是xawtv,在网上搜以下可以下载到 。安装好后,打开xawtv则可以调试摄像头 。
3. Video4Linux 编程获取数据
现有的video4linux有两个版本,v4l和v4l2 。本文主要是关于v4l的编程 。利用v4l API获取视频图像一般有以下几步:
a 打开设备
b 设置设备的属性,比如图像的亮度,对比度等等
c 设定传输格式和传输方式
d 开始传输数据,一般是一个循环,用以连续的传输数据
e 关闭设备
下面具体介绍v4l编程的过程 。首先指出,在video4linux编程时要包含头文件,其中包含了video4linux的数据结构和函数定义 。
1)v4l的数据结构
在video4linux API中定义了如下数据结构 , 详细的数据结构定义可以参考v4l API的文档,这里就编程中经常使用的数据结构作出说明 。
首先我们定义一个描述设备的数据结构,它包含了v4l中定义的所有数据结构:
typedef struct
_v4ldevice
{int fd;//设备号
struct video_capability capability;
struct
video_channel channel[10];
struct video_picture picture;
struct video_clip
clip;
struct video_window window;
struct video_capture capture;
struct
video_buffer buffer;
struct video_mmap mmap;
struct video_mbuf
mbuf;
struct video_unit unit;
unsigned char
*map;//mmap方式获取数据时,数据的首地址
pthread_mutex_t mutex;
int frame;
int
framestat[2];
int overlay;
}v4ldevice;
下面解释上面这个数据结构中包含的数据结构,这些结构的定义都在中 。
* struct
video_capability
name[32] Canonical name for this interface
type Type of
interface
channels Number of radio/tv channels if appropriate
audios
Number of audio devices if appropriate
maxwidth Maximum capture width in
pixels
maxheight Maximum capture height in pixels
minwidth Minimum capture
width in pixels
minheight Minimum capture height in pixels
这一个数据结构是包含了摄像头的属性,name是摄像头的名字,maxwidth maxheight是摄像头所能获取的最大图像大小 , 用像素作单位 。
在程序中,通过ioctl函数的VIDIOCGCAP控制命令读写设备通道已获取这个结构,有关ioctl的使用 , 比较复杂,这里就不说了 。下面列出获取这一数据结构的代码:
int v4lgetcapability(v4ldevice *vd)
{
if(ioctl(vd-fd,
VIDIOCGCAP, (vd-capability))0)
{
v4lperror("v4lopen:VIDIOCGCAP");
return -1;
}
return 0;
}
*
struct video_picture
brightness Picture brightness
hue Picture hue (colour
only)
colour Picture colour (colour only)
contrast Picture
contrast
whiteness The whiteness (greyscale only)
depth The capture depth
(may need to match the frame buffer depth)
palette Reports the palette that
should be used for this image
这个数据结构主要定义了图像的属性,诸如亮度,对比度,等等 。这一结构的获取通过ioctl发出VIDIOCGPICT控制命令获取 。

推荐阅读