V4L2视频采集实现例程

V4L2视频采集实现例程

http://zhougaofeng.ixiezi.com/2009/12/01/v4l2/#more-59

Video4linux 简介
Video4Linux是为市场现在常见的电视捕获卡和并口及USB口的摄像头提供统一的编程接口。同时也提供无线电通信和文字电视广播解码和垂直消隐的数据接口。本文主要针对USB摄像头设备文件/dev/video0,进行视频图像采集方面的程序设计。

Video4linux 编程指南
1.视频编程的流程
(1)打开视频设备:
(2)读取设备信息
(3)更改设备当前设置(可以不做)
(4)进行视频采集,两种方法:
 a.内存映射
 b.直接从设备读取
(5)对采集的视频进行处理( 本程序没做,下次再show给大家)
(6)关闭视频设备

//下面我对这些操作做了个简单的函数封装
#ifndef _V4L_H
#define _V4L_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <error.h>
#include <assert.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <linux/videodev.h>
#include <sys/types.h>
#include <string.h>

/*采集的图像的最大长和宽*/
#define MAX_WIDTH 400
#define MAX_HEIGHT 300
/*设备文件*/
#define DEFAULT_DEVICE “/dev/video0″
/*自定义数据结构,包含v4l 中用到的数据结构*/
typedef struct v4l_struct
{
    int fd;/*设备号*/
    struct video_capability capability; //包含设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等)
    struct video_channel channel[8];//信号源个数
    struct video_picture picture;//设备采集的图象的各种属性
    struct video_mmap mmap;//用于mmap         
    struct video_mbuf mbuf;//利用mmap进行映射的帧的信息            
    unsigned char *buffer ;/*图像数据存放区*/
    unsigned char *map;/*mmap方式获取数据时,数据的首地址*/
    int frame_current;
    int frame_using[2]; /*这个帧的状态0 表示可用,1表示不可用*/
}v4l_device;

 

/**************************************************************
* 函数名:v4l_open
* 功  能: 打开设备
* 输  入: dev,vd
* 输  出: 无
* 返  回:  -1—-失败  0—-成功
**************************************************************/
int v4l_open( char *dev, v4l_device *vd )
{
    if( !dev )

    {
        dev=DEFAULT_DEVICE ;

    }
    if( ( vd->fd = open( dev, O_RDWR ) )  < 0 )

    {
        perror( “v4l_open error” );

        return -1;
    }

    return 0;

}

/**************************************************************
* 函数名: v4l_get_capability
* 功  能: 获取设备属性
* 输  入: vd
* 输  出: 无
* 返  回:  -1—-失败 0—-成功
*************************************************************

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值