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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++11学习

C++11学习本章目的:当Android用ART虚拟机替代Dalvik的时候,为了表示和Dalvik彻底划清界限的决心,Google连ART虚拟机的实现代码都切换到了C++11。C+11的标准规范于2...
  • Innost
  • Innost
  • 2016-09-19 11:14
  • 12882

随笔之如何实现一个线程池

一 缘由:    最近因工作问题,需要实现一个简单的线程池,满足一下要求,可伸缩,即一旦发现线程不够用,则可以动态增加线程。(至于缩减线程,这个可能难度比较大,暂时不考虑)。支持超时任务。比如提交一个...
  • Innost
  • Innost
  • 2011-11-24 11:45
  • 4921

《深入理解Android 卷III》第七章 深入理解SystemUI

《深入理解Android 卷III》即将发布,作者是张大伟。此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分。在一个特别讲...
  • Innost
  • Innost
  • 2015-08-14 13:43
  • 16576

SystemUI之功能介绍和UI布局实现

Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对SystemUI做下整体性回顾。

《深入理解Android 卷III》第四章 深入理解WindowManagerService

《深入理解Android 卷III》即将发布,作者是张大伟。此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分。在一个特别讲...
  • Innost
  • Innost
  • 2015-08-14 13:18
  • 26202

Android开发艺术探索读书笔记(一)

首先向各位严重推荐主席这本书《Android开发艺术探索》。     再感谢主席邀请写这篇读书笔记 + 书评。书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书从内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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