linux下V4L视频采集总结

原创 2006年06月01日 10:31:00

视频采集,调用V4L模块参数进行视频原始数据的采集。熟悉/include/linux/videodev.h,根据这个头文件来定义自己的video device的数据结构,下面是几个重要的数据结构,定义在videodev.h里   
struct video_mmap vmmap;
struct video_capability videocap;
struct video_mbuf videombuf;
struct video_picture videopict;
struct video_window videowin;
struct video_channel videochan;
struct video_param videoparam;

用mmap方法做视频采集最重要是以下两个数据结构
struct video_mmap
{
 unsigned int frame;  /* Frame (0 - n) for double buffer */
 int  height,width;
 unsigned int format;  /* should be VIDEO_PALETTE_* */
};

#define VIDEO_MAX_FRAME  32

struct video_mbuf
{
 int size;  /* Total memory to map */
 int frames;  /* Frames */
 int offsets[VIDEO_MAX_FRAME];
};
一般来说,可以通过ioctl相应的get参数获取这几个数据结构中的数据,使用mmap方法就要知道内存影射区buffers的大小,本课题使用的OV511 WebEye V2000系列摄像头都是double buffer,即buffer[0],buffer[1];整个buffers的大小为struct video_mbuf的size值,frames此时应该为2,offsets为偏移量。在使用mmap函数以后,返回的指针就指在offsets[0]上,此时的offsets[0]可以看为0,offsets[1]的大小则应该等于一个buffer的大小。
在采集之前不要忘记对视频参数的设置,重要的参数有fromat,dept,各个摄像头对其自身的参数设定都不一样,为了获得更好的软件兼容性,可以做一个format参数的probe函数,测试所有可能的fromat值是否受硬件摄像头的支持,demo代码如下:
int pal[] ={VIDEO_PALETTE_JPEG,VIDEO_PALETTE_YUV420P,VIDEO_PALETTE_RGB24,VIDEO_PALETTE_RGB565,VIDEO_PALETTE_RGB32};
struct video_picture pict;
//定义所有可能的palette format值
ioctl (vd->fd, VIDIOCGPICT, &pict);
//通过ioctl对video_picture pict的get命令,把包含format的参数保存到video_picture pict中
for(i = 0; i < 5 ; i++)
//做一个循环,验证上述5个format的可用性
pict.palette = pal[i];
  
printf("try palette %d depth %d/n",pict.palette,pict.depth);
if (ioctl (vd->fd, VIDIOCSPICT, &pict) < 0)
     {
        printf("Couldnt set palette first try %d /n", pal[i]);
     
     }
//设置成功则返回大于0值,返回小于0则说明该format值不可用
//实验证明WebeyeV2000只支持VIDEO_PALETTE_YUV420P,而Z-Star的对上面五种format都支持
 if (ioctl (vd->fd, VIDIOCGPICT, &pict) < 0)
      {
        printf("Couldnt get palette %d /n", pal[i]);
     
      }

先干活去了,明天接着写mmap的采集和处理                                                 

to be continue........

Linux下利用V4L2进行视频采集及其显示

说明: 1、本文所提及的摄像头不是zc0301p,使用的API不是V4L,显示所使用的上位机不是QT,特此说明。 2、UVC只是一个驱动,如果它能成功驱动摄像头,会在/dev目录下出现video(...

Linux基于v4l2的视频采集(含代码)

Video4linux2(简称V4L2),是linux中关于视频设备的内核驱动。 V4L2较V4L有较大的改动,并已成为2.6的标准接口,函盖video\dvb\FM...,多数驱动都在向V4l2迁...

Linux V4L2 摄像头视频采集

一,什么是 video4linuxVideo4linux(简称V4L),是linux中关于视频设备的内核驱动,现在已有Video4linux2,还未加入linux内核,使用需自己 下载补丁。在Linu...

嵌入式linux环境视频采集知识(V4L2)

Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的...

Linux V4L2 摄像头视频采集

一,什么是 video4linux Video4linux(简称V4L),是linux中关于视频设备的内核驱动,现在已有Video4linux2,还未加入linux内核,使用需自己 下载补丁。在Li...

嵌入式LINUX环境下视频采集知识(V4L2)

Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的...

嵌入式LINUX环境下视频采集知识(V4L2)

Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的...

Linux V4L2 摄像头视频采集

http://blog.chinaunix.net/uid-28798408-id-3733868.html 一,什么是 video4linux Video4linux(简称V4L),是l...

基于嵌入式Linux的视频采集系统19-----源程序----v4l_driver.h

本文来自: http://blog.chinaunix.net/uid-23093301-id-86408.html #include "v4l2_driver.h" #include "l...
  • whb_mcu
  • whb_mcu
  • 2012年04月12日 22:14
  • 760

Linux基于v4l2的视频采集(可用)

Video4linux2(简称V4L2),是Linux中关于视频设备的内核驱动。 V4L2较V4L有较大的改动,并已成为2.6的标准接口,函盖video\dvb\FM...,多数驱动都在向V4l2迁...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下V4L视频采集总结
举报原因:
原因补充:

(最多只允许输入30个字)