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........

Qt开发:Qt+OpenCV在(Linux平台)PC上采集摄像头视频(源码奉送)

摄像头型号是环宇飞扬,普通的usb摄像头。运行环境是在linux上的,Opencv版本是2.1的。如果是windows下的qt开发环境,要么改下配置,要么照着源码写一下。在linux上运行是没有任何问...
  • yanzi1225627
  • yanzi1225627
  • 2013年04月08日 11:18
  • 12110

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

Video4linux2(简称V4L2),是Linux中关于视频设备的内核驱动。 V4L2较V4L有较大的改动,并已成为2.6的标准接口,函盖video\dvb\FM...,多数驱动都在向V4l2迁...
  • u010164190
  • u010164190
  • 2016年11月17日 10:54
  • 790

用v4l2和framebuffer实现usb摄像头视频采集并显示

用v4l2和framebuffer实现usb摄像头图像采集并显示   前言 很多天了,看了数不尽的论坛和各网站的帖子后,我把我遇到的问题都解决的差不多了,感觉应该是把摄像头跑起来了,...
  • imxiangzi
  • imxiangzi
  • 2015年08月31日 11:37
  • 1775

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

linux下对于自己编译的opencv版本 调用视频抓取的时候,有时会出现 HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP 方法 1. 安装 依赖库 (有人...
  • billbliss
  • billbliss
  • 2017年05月15日 14:13
  • 2410

V4L搞定 +QT显示摄像头视频

V4L搞定 +QT显示摄像头视频 +QT显示GIF动画 2009-11-02 09:32 哎 两星期前终于搞定了qt上显示摄像头视频采集 现在来把最终重要的代码总结下 ...
  • langonghan
  • langonghan
  • 2010年06月16日 11:13
  • 2630

基于linux V4L视频采集摄像程序

gcc -o linux_m4v linux_m4v.c -lc -lm -lxvidcore*****************************************************...
  • legendzjut
  • legendzjut
  • 2006年09月26日 13:40
  • 2443

linux v4l 编程 V4L 查询操作(代码参考)

#include #include #include #include #include #include #include #include ...
  • dulin201004
  • dulin201004
  • 2012年08月15日 13:47
  • 997

Video4linux(v4l)摄像头采集jpeg图片

1、Video4linux下视频编程的流程 (1)打开视频设备: (2) 读取设备信息 (3)更改设备当前设置(没必要的话可以不做) (4)进行视频采集,两种方法:         a.内...
  • luxiaoxun
  • luxiaoxun
  • 2012年05月15日 14:54
  • 3132

linux 下视频设备设置的几个参数 v4l video4linux v4l2 ioctl

 用一系列的ioctl发命令控制设备。v4l支持的ioctl命令大概有二十几个,为了尽快的编出一个简单的图象捕捉程序,让我们先来看看几个主要的命令:1. ioctl(fd,VIDIOCGCAP,&ca...
  • lanmanck
  • lanmanck
  • 2009年04月13日 15:37
  • 6231

v4l(video for Linux)使用摄像头实验的一点小感慨

v4l(video for Linux)使用摄像头实验的一点小感慨 前言     学习Linux快1个月了,Linux教学视频看完了,然后在虚拟机上装了个CentOS6.3把该做的实验大多也做了。...
  • ddddwant
  • ddddwant
  • 2012年12月31日 03:56
  • 6222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下V4L视频采集总结
举报原因:
原因补充:

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