您的位置:首页 > 其它

V4L2的一些结构体 和指令 找了好久才找到

2017-11-02 14:28 218 查看
VIDIOC_REQBUFS:
 分配内存

VIDIOC_QUERYBUF: 把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址

VIDIOC_QUERYCAP: 查询驱动功能

VIDIOC_ENUM_FMT: 获取当前驱动支持的视频格式

VIDIOC_S_FMT: 设置当前驱动的频捕获格式

VIDIOC_G_FMT: 读取当前驱动的频捕获格式

VIDIOC_TRY_FMT: 验证当前驱动的显示格式

VIDIOC_CROPCAP: 查询驱动的修剪能力

VIDIOC_S_CROP: 设置视频信号的边框

VIDIOC_G_CROP: 读取视频信号的边框

VIDIOC_QBUF: 把数据放回缓存队列

VIDIOC_DQBUF: 把数据从缓存中读取出来

VIDIOC_STREAMON: 开始视频显示函数

VIDIOC_STREAMOFF: 结束视频显示函数

VIDIOC_QUERYSTD: 检查当前视频设备支持的标准,例如PAL或NTSC。

常用的结构体(参见/usr/include/linux/videodev2.h):

struct v4l2_requestbuffers reqbufs; //向驱动申请帧缓冲的请求,里面包含申请的个数

struct v4l2_capability cap; //这个设备的功能,比如是否是视频输入设备

struct v4l2_input input; //视频输入

struct v4l2_standard std; //视频的制式,比如PAL,NTSC

struct v4l2_format fmt; //帧的格式,比如宽度,高度等

struct v4l2_buffer buf; //代表驱动中的一帧

v4l2_std_id stdid; //视频制式,例如:V4L2_STD_PAL_B

struct v4l2_queryctrl query; //查询的控制

struct v4l2_control control; //具体控制的值

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct v412_standard 结构体:

[cpp] view
plain copy

 print?

typedef u64 v4l2_std_id;  

struct v4l2_standard {  

    u32 index;  

    v4l2_std_id id;  

    u8 name[24];  

    struct v4l2_fract frameperiod; /* Frames, not fields */  

    u32 framelines;  

    u32 reserved[4];  

};  

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct v412_input 结构体:

[cpp] view
plain copy

 print?

struct v4l2_input {  

    __u32 index;        /* Which input */  

    __u8 name[32];      /* Label */  

    __u32 type;         /* Type of input */  

    __u32 audioset;     /* Associated audios (bitfield) */  

    __u32 tuner;        /* Associated tuner */  

    v4l2_std_id std;  

    __u32 status;  

    __u32 reserved[4];  

};  

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct v412_crop 结构体:

[cpp] view
plain copy

 print?

struct v4l2_crop  

{  

    enum v4l2_buf_type type;   // 应用程序设置  

    struct v4l2_rect c;  

}  

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct v412_cropcap 结构体:

[cpp] view
plain copy

 print?

struct v4l2_cropcap  

{  

    enum v4l2_buf_type type;    // 数据流的类型,应用程序设置  

    struct v4l2_rect bounds;    // 这是 camera 的镜头能捕捉到的窗口大小的局限  

    struct v4l2_rect defrect; // 定义默认窗口大小,包括起点位置及长,宽的大小,大小以像素为单位  

    struct v4l2_fract pixelaspect;  // 定义了图片的宽高比  

};  

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

stuct v412_fmtdesc结构体:

[cpp] view
plain copy

 print?

struct v4l2_fmtdesc  

{  

    u32 index;          // 要查询的格式序号,应用程序设置  

    enum v4l2_buf_type type;    // 帧类型,应用程序设置  

    u32 flags;          // 是否为压缩格式  

    u8 description[32];         // 格式名称  

    u32 pixelformat;        // 格式  

    u32 reserved[4];        // 保留  

};  

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct v412_capability结构体:

[cpp] view
plain copy

 print?

struct v4l2_capability  

{  

    u8 driver[16];      // 驱动名字  

    u8 card[32];        // 设备名字  

    u8 bus_info[32];    // 设备在系统中的位置  

    u32 version;        // 驱动版本号  

    u32 capabilities;   // 设备支持的操作  

    u32 reserved[4];    // 保留字段  

};  

其中域 capabilities 代表设备支持的操作模式,常见的值有 V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING 表示是一个视频捕捉设备并且具有数据流控制模式;另外 driver 域需要和 struct video_device
中的 name 匹配

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

v4l2_format 结构如下

[cpp] view
plain copy

 print?

struct v4l2_format {    

    enum v4l2_buf_type type;    

    union {    

        struct v4l2_pix_format         pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */    

        struct v4l2_window             win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */    

        struct v4l2_vbi_format         vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */    

        struct v4l2_sliced_vbi_format  sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */    

        __u8   raw_data[200];                   /* user-defined */    

    } fmt;    

};    

其中    

enum v4l2_buf_type {    

    V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,    

    V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,    

    V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,    

    ...    

    V4L2_BUF_TYPE_PRIVATE              = 0x80,    

};    

    

struct v4l2_pix_format {    

    __u32                   width;   // 宽,必须是16的倍数  

    __u32                   height;    // 高,必须是16的倍数  

    __u32                   pixelformat;   // 视频数据存储类型,例如是//YUV4:2:2还是RGB  

    enum v4l2_field         field;    

    __u32                   bytesperline;   /* for padding, zero if unused */    

    __u32                   sizeimage;    

    enum v4l2_colorspace    colorspace;    

    __u32                   priv;           /* private data, depends on pixelformat */    

};  

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct v412_requestbuffers结构体如下:

[cpp] view
plain copy

 print?

struct v4l2_requestbuffers  

{  

    __u32 count;            // 缓存数量,也就是说在缓存队列里保持多少张照片  

    enum v4l2_buf_type type;    // 数据流类型,必须永远是V4L2_BUF_TYPE_VIDEO_CAPTURE  

    enum v4l2_memory memory;    // V4L2_MEMORY_MMAP 或 V4L2_MEMORY_USERPTR  

    __u32 reserved[2];  

};  

 enum v4l2_memory {    

        V4L2_MEMORY_MMAP             = 1,    

        V4L2_MEMORY_USERPTR          = 2,    

        V4L2_MEMORY_OVERLAY          = 3,    

 };   

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

typedef struct VideBuffer结构体:

[cpp] view
plain copy

 print?

typedef struct VideoBuffer {  

    void *start;  

    size_t  length;  

} VideoBuffer;  

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

stuct v412_buffer结构体

[cpp] view
plain copy

 print?

truct v4l2_buffer  

{  

    u32 index;          //buffer 序号  

    enum v4l2_buf_type type;    //buffer 类型  

    u32 byteused;           //buffer 中已使用的字节数  

    u32 flags;          // 区分是MMAP 还是USERPTR  

    enum v4l2_field field;  

    struct timeval timestamp;   // 获取第一个字节时的系统时间  

    struct v4l2_timecode timecode;  

    u32 sequence; // 队列中的序号  

    enum v4l2_memory memory;    //IO 方式,被应用程序设置  

    union m{  

        u32 offset;     // 缓冲帧地址,只对MMAP 有效  

        unsigned long userptr;  

    };  

    u32 length;         // 缓冲帧长度  

    u32 input;  

    u32 reserved;  

};  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐