linux下V4L视频采集总结

视频采集,调用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........

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值