博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
V4L2常用命令标志符和结构体
阅读量:4298 次
发布时间:2019-05-27

本文共 4529 字,大约阅读时间需要 15 分钟。

在进行V4L2开发中,一般会用到以下的命令标志符:

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 结构体:

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 结构体:

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 结构体:

struct v4l2_crop{	enum v4l2_buf_type type;   // 应用程序设置	struct v4l2_rect c;}

////

struct v412_cropcap 结构体:

struct v4l2_cropcap{	enum v4l2_buf_type type; 	// 数据流的类型,应用程序设置	struct v4l2_rect bounds; 	// 这是 camera 的镜头能捕捉到的窗口大小的局限	struct v4l2_rect defrect; // 定义默认窗口大小,包括起点位置及长,宽的大小,大小以像素为单位	struct v4l2_fract pixelaspect; 	// 定义了图片的宽高比};

////

stuct v412_fmtdesc结构体:

struct v4l2_fmtdesc{	u32 index; 			// 要查询的格式序号,应用程序设置	enum v4l2_buf_type type; 	// 帧类型,应用程序设置	u32 flags; 			// 是否为压缩格式	u8 description[32]; 		// 格式名称	u32 pixelformat;		// 格式	u32 reserved[4]; 		// 保留};

////

struct v412_capability结构体:

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 结构如下

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结构体如下:

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结构体:

typedef struct VideoBuffer {	void *start;	size_t  length;} VideoBuffer;

/
/
/
//

stuct v412_buffer结构体

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;};

/////

转载地址:http://ounws.baihongyu.com/

你可能感兴趣的文章
海龟交易法则15_万事俱备
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>
通向财务自由之路02_成功的决定因素:你
查看>>
中低频量化交易策略研发01_引言
查看>>
中低频量化交易策略研发06_推进的择时策略
查看>>
史丹·温斯坦称傲牛熊市的秘密
查看>>
期货市场技术分析01_理论基础
查看>>
期货市场技术分析02_趋势的基本概念
查看>>
期货市场技术分析03_主要反转形态
查看>>
期货市场技术分析04_持续形态
查看>>
期货市场技术分析05_交易量和持仓兴趣
查看>>
TB交易开拓者入门教程
查看>>
TB创建公式应用dll失败 请检查用户权限,终极解决方案
查看>>
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>