一,功能参考
目录
V4L2 close() - 关闭一个V4L2设备
V4L2 ioctl() - 创建的V4L2设备
ioctl VIDIOC_CROPCAP - 视频裁剪和缩放功能信息
ioctl VIDIOC_DBG_G_REGISTER,VIDIOC_DBG_S_REGISTER - 读或写硬件注册表
ioctl VIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD - 执行编码器命令
ioctl VIDIOC_ENUMAUDIO - 枚举音频输入
ioctl VIDIOC_ENUMAUDOUT - 枚举音频输出
ioctl VIDIOC_ENUM_FMT - 枚举图像格式
ioctl VIDIOC_ENUM_FRAMESIZES - 枚举外形尺寸
ioctl VIDIOC_ENUM_FRAMEINTERVALS - 枚举帧间隔
ioctl VIDIOC_ENUMINPUT - 枚举视频输入
ioctl VIDIOC_ENUMOUTPUT - 枚举视频输出
ioctl VIDIOC_ENUMSTD - 枚举支持的视频标准
ioctl VIDIOC_G_AUDIO,VIDIOC_S_AUDIO - 查询或选择当前的音频输入和它的属性
ioctl VIDIOC_G_AUDOUT,VIDIOC_S_AUDOUT - 查询或选择当前的音频输出
ioctl VIDIOC_G_CHIP_IDENT –识别电视卡的芯片
ioctl VIDIOC_G_CROP,VIDIOC_S_CROP - 获取或设置当前裁剪矩形
ioctl VIDIOC_G_CTRL,VIDIOC_S_CTRL - 获取或设置控件的值
ioctl VIDIOC_G_ENC_INDEX - 获取关于压缩视频流的元数据
ioctl VIDIOC_G_EXT_CTRLS,VIDIOC_S_EXT_CTRLS,VIDIOC_TRY_EXT_CTRLS
- 获取或设置控件的值数,尽量控制值
ioctl VIDIOC_G_FBUF,VIDIOC_S_FBUF - 获取或设置参数帧缓冲区覆盖
ioctl VIDIOC_G_FMT,VIDIOC_S_FMT,VIDIOC_TRY_FMT
- 获取或设置数据格式,试验格式
ioctl VIDIOC_G_FREQUENCY,VIDIOC_S_FREQUENCY - 获取或设置调谐器或射频调制器
ioctl VIDIOC_G_INPUT,VIDIOC_S_INPUT - 查询或选择当前视频输入
ioctl VIDIOC_G_JPEGCOMP,VIDIOC_S_JPEGCOMP - 
ioctl VIDIOC_G_MODULATOR,VIDIOC_S_MODULATOR - 调制器,获取或设置属性
ioctl VIDIOC_G_OUTPUT,VIDIOC_S_OUTPUT - 查询或选择当前视频输出
ioctl VIDIOC_G_PARM,VIDIOC_S_PARM - 获取或设置流参数
ioctl VIDIOC_G_PRIORITY,VIDIOC_S_PRIORITY - 查询或要求访问的优先级与文件描述符关联
ioctl VIDIOC_G_SLICED_VBI_CAP - 查询切片的VBI功能
ioctl VIDIOC_G_STD,VIDIOC_S_STD - 查询或选择当前输入视频标准
ioctl VIDIOC_G_TUNER,VIDIOC_S_TUNER - 获取或设置调谐器属性
ioctl VIDIOC_LOG_STATUS - 记录驱动程序的状态信息
ioctl VIDIOC_OVERLAY - 启动或停止视频覆盖
ioctl VIDIOC_QBUF,VIDIOC_DQBUF - 交流与驱动程序缓冲区
ioctl VIDIOC_QUERYBUF - 查询一个缓冲区的状态
ioctl VIDIOC_QUERYCAP - 查询设备的功能
ioctl VIDIOC_QUERYCTRL,VIDIOC_QUERYMENU - 枚举控制和菜单控制项目
ioctl VIDIOC_QUERYSTD – 识别由目前的输入接收的视频标准
ioctl VIDIOC_REQBUFS - 启动用户指针或内存映射的I / O
ioctl VIDIOC_STREAMON,VIDIOC_STREAMOFF - 启动或停止流I / O
V4L2 mmap() - 映射设备内存到应用程序的地址空间
V4L2 munmap() - 取消映射设备内存
V4L2 open() - 打开的V4L2设备
V4L2调查() - 等待某些事件对一个文件描述符
V4L2阅读() - 读取V4L2设备
V4L2选择() - 同步I / O复用
V4L2写() - 写入V4L2设备

V4L2
close()

名称
V4L2 的关闭 - 关闭一个V4L2设备
概要
#include <unistd.h>int close(int fd);
fd

打开()返回的文件描述符。

说明
关闭设备。即程序中所有I / O被终止和文件描述符相关的资源被释放。但是数据格式参数,电流输入或输出,控制值或其他属性保持不变。

返回值
该函数成功返回0,失败返回-1并设置适当的errno。即可能的错误代码:
EBADF
fd不是一个有效的打开文件描述符。

V4L2 ioctl()

名称
V4L2 -ioctl – 创建一个V4L2设备
概要
#include <sys/ioctl.h>int ioctl(int fd, int request, void *argp);
参数
fd
打开()返回的文件描述符。
要求
V4L2 IOCTL要求代码与videodev.h头文件中定义的一致,例如VIDIOC_QUERYCAP。
argp
指针指向一个函数的参数,通常是一个结构。
说明
ioctl()函数用于创建V4L2设备。fd参数必须是一个开放的文件描述符。IOCTL要求把所有参数编码进去,无论参数是一个输入,输出或读/写参数,而且参数argp要以字节为单位。宏和定义明确的V4L2 ioctl要求都位于videodev.h头文件中。应用程序应该使用他们自己的副本,不包括在他们的系统上编译的内核源代码的版本。所有的V4L2 ioctl要求,即它们各自的功能和参数,都规定在Reference I, Function Reference.中

返回值
成功的ioctl()函数将返回0,不会重置errno变量。如果失败返回-1,当IOCTL将输出或读/写参数,它保持不变,并相应地设置errno变量。请参阅下面的可能的错误代码。像EBADF EFAULT一般错误不单独列在讨论ioctl要求部分。

注意ioctl可能会返回未定义错误代码。由于有这样的错误可能使一个驱动重起申请意外终止。
EBADF
fd不是一个有效的打开文件描述符。

EBUSY
该属性不能立即改变。通常当I / O正在进行或者驱动程序多重打开,而另一个进程锁定了它的所有权时返回这个错误代码。

EFAULT
argp引用一个不可存取的内存区域。

ENOTTY
fd不与字符特殊设备关联。

EINVAL
请求或数据argp指向的是无效的。这是一个非常常见的错误代码,请参阅Reference I中特殊ioctl要求,原因借鉴Function Reference。

ENOMEM
没有足够的物理或虚拟内存可用来完成请求。

ERANGE的
应用程序试图建立一个超出控制VIDIOC_S_CTRL ioctl范围的值。

ioctl VIDIOC_CROPCAP

名称
VIDIOC_CROPCAP - 视频裁剪和缩放功能信息
概要

int ioctl(int fd, int request, struct v4l2_cropcap *argp);
参数
fd
打开()返回的文件描述符。
请求
VIDIOC_CROPCAP
argp
说明
应用程序使用此功能来查询裁剪限制,图像的像素方面及计算数值范围的信息。他们建立了一个以各自的缓冲(stresm)型的v4l2_cropcap结构的类型字段,并用这个结构的指针调用VIDIOC_CROPCAP ioctl。驱动补充结构的其余部分。结果是不变的,除非切换视频标准。请记住当切换视频输入或输出时,这个开关会隐藏。

Table 1. struct v4l2_cropcap

enum v4l2_buf_type    type

应用程序设置数据流的类型。这些类型是有效的,只有在这里:V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_BUF_TYPE_VIDEO_OUTPUT,
V4L2_BUF_TYPE_VIDEO_OVERLAY,和自定义(驱动程序定义)类型时用代码V4L2_BUF_TYPE_PRIVATE或者更高级的代码。
struct v4l2_rect      bounds
 定义了窗口内捕捉或输出是可能的,这可能排除例如,水平和垂直消隐区。裁剪矩形不能超过这些限制。宽度和高度以像素为单位定义,在模拟域中驱动程序编写者可以自由选择原点和坐标系的单位。
struct v4l2_rect     defrect
默认裁剪矩形,它应当包括“全貌”。假设像素宽高比为1 / 1,这可能是比如一个在活动图像区域中心用于NTSC 的640 × 480的矩形,或者用于PAL和SECAM的768 × 576的矩形。同样的坐标系用于边界的定义。
struct v4l2_fract     pixelaspect
在像素方面(y / x),当没有缩放应用时,实际采样频率比和频率需要得到方形像素频率。
当裁剪坐标指的是方形像素时,驱动设置pixelaspect为1 / 1。其他常见的值是NTSC制式为PAL和SECAM,11/10 54/59采样按[国际电联BT.601]。

Table 2. struct v4l2_rect
__s32   left
 顶部左边的矩形角横向偏移,以像素为单位。
__s32  top  顶部左边的矩形角垂直偏移,以像素为单位。
__s32  width  矩形的宽度,以像素为单位。
__s32  height  矩形的高度,以像素为单位。宽度和高度不能为负数,否则该字段将被标示为异常的原因。

返回值
成功返回0,错误返回-1,errno变量设置正确:
EINVAL
该结构v4l2_cropcap类型是无效或不支持ioctl。这时视频捕捉,输出和覆盖设备是不允许的,他们必须支持VIDIOC_CROPCAP.。

ioctl
VIDIOC_DBG_G_REGISTER, VIDIOC_DBG_S_REGISTER

名称
VIDIOC_DBG_G_REGISTER,VIDIOC_DBG_S_REGISTER - 读或写硬件注册表
概要

int ioctl(int fd, int request, struct v4l2_register *argp);

int ioctl(int fd, int request, const struct v4l2_register *argp);
参数

fd
打开()返回的文件描述符。
请求
VIDIOC_DBG_G_REGISTER,VIDIOC_DBG_S_REGISTER
argp
说明
实验性:这是一个实验接口,并在未来可能改变。
为了调试驱动程序,这些IOCTL允许测试应用程序直接访问硬件注册表。普通应用程序不能使用它们。

由于写或读注册表可能危及系统的安全性,稳定性和损坏硬件,所有的ioctl需要超级用户权限。此外,Linux内核必须编译CONFIG_VIDEO_ADV_DEBUG选项以启用这些IOCTL。

要编写一个注册表应用程序必须初始化一个结构
v4l2_register所有字段,并用这个结构的指针调用VIDIOC_DBG_S_REGISTER。 match_type和match_chip字段选择电视卡上的一个芯片,这个注册表字段指定一个注册表数目,Val字段值被写入到注册表。
要读取注册表的应用程序必须初始化match_type,match_chip和REG字段,并该结构的指针调用VIDIOC_DBG_G_REGISTER。成功的话,驱动程序会把注册表中的值存储在Val字段中。失败的话,该结构保持不变。

当match_type为V4L2_CHIP_MATCH_HOST时,match_chip选择电视卡上的第n个nonI2C芯片。驱动也许会理解为一个随机ID
match_chip,但是我们不这么理解。数字零始终选择主芯片,例如芯片连接到PCI总线。你可以找出哪些芯片提供VIDIOC_G_CHIP_IDENT
ioctl。

当match_type为V4L2_CHIP_MATCH_I2C_DRIVER时,像linux/i2c-id.h头文件中定义的那样, match_chip包含一个驱动ID,例如I2C_DRIVERID_SAA7127将匹配任何saa7127驱动支持的芯片,不管其I2C总线地址。当由相同的驱动程序支持的多种芯片正在运行时,这些IOCTL影响是不确定的。此外用VIDIOC_G_CHIP_IDENTioctl可以找出正在运行的I2C芯片。

当match_type为V4L2_CHIP_MATCH_I2C_ADDR时,match_chip用7位I2C总线地址选择了一个芯片。

成功没有保证:由于在Linux
I2C总线驱动程序中的一个缺陷,这些IOCTL可能会成功返回而不用实际读取或写入一个注册表。要找到最有可能失败的地方,我们建议一个VIDIOC_G_CHIP_IDENT命令确认正在运行的所选的I2C芯片。

这些IOCTL具有选择性,不是所有的驱动程序支持它们。然而,当一个驱动程序支持这些IOCTL时也必须支持VIDIOC_G_CHIP_IDENT。相反它可能支持VIDIOC_G_CHIP_IDENT但不支持这些IOCTL。

在Linux
2.6.21将介绍VIDIOC_DBG_G_REGISTER和VIDIOC_DBG_S_REGISTER。

我们建议用V4L2
- dbg实用工具直接结束调用这些IOCTL。这可从LinuxTV
v41 -DVB库中看到;访问指令http://linuxtv.org/repo/。

Table 1. struct v4l2_register

__u32     match_type   
见表2的可能类型表。
__u32     match_chip    
由这个代码匹配芯片,根据match_type字段解释执行。
__u64    
reg              一个注册代码。
__u64     val           
这个值从注册表中读出,或写入到注册表。

Table 2. Chip Match Types
V4L2_CHIP_MATCH_HOST          0   
匹配的卡上的 n个芯片,0为主机芯片。不匹配I2C芯片。
V4L2_CHIP_MATCH_I2C_DRIVER    1    用linux/i2c-id.h头文件中的驱动程序的ID匹配I2C芯片。
V4L2_CHIP_MATCH_I2C_ADDR      2   
匹配7位I2C总线地址芯片。

返回值
成功返回0,错误返回-1,errno变量相应地设置:

EINVAL
该驱动程序不支持该IOCTL,或内核不是CONFIG_VIDEO_ADV_DEBUG选项编译,或match_type为无效,或选定的芯片或注册表不存在。

返回EPERM
没有足够的权限。Root权限才能执行这些IOCTL。

ioctl
VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD

名称
VIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD - 执行编码器命令
简介
int ioctl(int fd, int request, struct v4l2_encoder_cmd *argp);
参数
fd
打开()返回的文件描述符。
请求
VIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD
argp

说明
实验性:这是一个实验接口,并在未来可能改变。

这些IOCTL控制音频/视频(通常的MPEG -)编码器。 VIDIOC_ENCODER_CMD向编码器发送一个命令,VIDIOC_TRY_ENCODER_CMD可以用来尝试一个命令而不用实际执行这个命令。
要发送一个命令程序必须初始化一个struct v4l2_encoder_cmd的所有字段和用该结构的指针调用VIDIOC_ENCODER_CMD或VIDIOC_TRY_ENCODER_CMD。
在cmd字段必须包含命令代码。这些标志字段一般只用于停机命令,并包含一个字节:如果V4L2_ENC_CMD_STOP_AT_GOP_END标志设定,编码将持续到当前组的图片结束,否则会立即停止。

如果编码器尚未开始,一个read()调用将向它发送一个开始命令。执行STOP命令后,read()调用将读取由驱动程序缓冲的剩余数据。当缓冲区是空的,read()将返回零,下一个read()调用将重新启动编码器。
一个close()调用将停止命令发送到编码器,所有缓冲的数据将被清除。

这些IOCTL是可选的,不是所有的驱动程序都支持它们。他们将在Linux 2.6.21介绍。

Table 1. struct v4l2_encoder_cmd

__u32     cmd    
编码器命令,见表2。
__u32      flags    标志命令,见表3。如果没有这个标志定义命令,驱动程序和应用程序必须设置此字段为零。
__u32     data[8]    为未来的扩展保留。驱动程序和应用程序必须设置数组为零。

Table 2. Encoder Commands

V4L2_ENC_CMD_START     0   开始运行编码器。当编码器已在运行或暂停,这个命令不执行任何操作。这个命令不定义任何标志。V4L2_ENC_CMD_STOP      1    停止编码器。当V4L2_ENC_CMD_STOP_AT_GOP_END标志设定,编码将持续到当前组的图片结束,否则,编码将立即停止。当编码器已经停止,该命令不执行任何操作。
V4L2_ENC_CMD_PAUSE     2  暂停编码器。当编码器还没有开始,驱动程序将返回一个返回EPERM错误代码。当编码器已经暂停,这个命令不执行任何操作。这个命令不定义任何标志。

V4L2_ENC_CMD_RESUME   3    暂停后恢复编码命令。当编码器还没有开始,驱动程序将返回一个返回EPERM错误代码。当编码器已在运行,这个命令不执行任何操作。这个命令不定义任何标志。

Table 3. Encoder Command Flags

V4L2_ENC_CMD_STOP_AT_GOP_END   0x0001  停止编码当前图像组而不是立刻结束。

返回值
成功返回0,错误返回-1,errno变量设置正确:

EINVAL
该驱动程序不支持该IOCTL,或在cmd字段是无效的。

EPERM
当编码器没有运行时,应用程序发送一个暂停或恢复命令。

ioctl
VIDIOC_ENUMAUDIO

名称
VIDIOC_ENUMAUDIO -
枚举音频输入
简介
int ioctl(int fd, int request, struct v4l2_audio *argp);
参数
fd
打开()返回的文件描述符。
请求
VIDIOC_ENUMAUDIO
argp

说明
要查询音频输入应用程序的属性要初始化了一个结构v4l2_audio保留数组的索引字段和零,并呼吁以这种结构指针VIDIOC_ENUMAUDIO的ioctl。司机填写的结构休息或返回EINVAL错误代码时,索引超出范围。枚举所有的音频输入申请须在索引零开始,由司机返回EINVAL,直到一个递增。

参见描述的结构v4l2_audio的ioctl VIDIOC_G_AUDIO,VIDIOC_S_AUDIO(2)。

返回值
成功返回0,错误-1,errno变量设置正确:

EINVAL
将音频输入的号码是出界,或者有完全没有音频输入,该IOCTL不支持音频输入。

ioctl
VIDIOC_ENUMAUDOUT

名称
VIDIOC_ENUMAUDOUT
- 枚举音频输出
简介

int ioctl(int fd, int request, struct v4l2_audioout *argp);

参数

fd
打开()返回的文件描述符。

要求
VIDIOC_ENUMAUDOUT

argp

说明
要查询的音频输出应用的属性初始化了索引字段和归零一个v4l2_audioout结构的保留数组,并用指针调用这种结构VIDIOC_G_AUDOUT ioctl。当索引超出范围时,驱动程序将停止该结构或返回EINVAL错误代码。枚举所有的音频输出,申请须在索引由零开始,然后递增直到驱动程序返回EINVAL。

注意 电视卡上的连接器回送收到的音频信号,在这个意义上声卡没有音频输出。

参见描述的结构v4l2_audioout的ioctl VIDIOC_G_AUDOUT,VIDIOC_S_AUDOUT(2)。

返回值
成功返回0,错误-1,errno变量设置正确:

EINVAL
音频输出数超出范围,或者完全没有音频输出和该IOCTL不支持音频输出。

v4l2功能列表大全【转】的更多相关文章

  1. Python 爬虫的工具列表大全

    Python 爬虫的工具列表大全 这个列表包含与网页抓取和数据处理的Python库.网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pyc ...

  2. Android 手机卫士--设置界面&功能列表界面跳转逻辑处理

    在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...

  3. JavaScript 键盘event.keyCode值列表大全

      JavaScript 键盘event.keyCode值列表大全   event.keyCode值列表大全,对于需要根据键盘按键触发相应事件的朋友需要. 网上收集的KeyCode值方便大家查找: k ...

  4. 【转】char码值对应列表大全

    char("56") A char("97") a [转]char码值对应列表大全 Char("0") 为0的字符Char("1& ...

  5. dir()函数:罗列出参数所有的功能列表

    #coding=utf-8import sysprint dir(sys)#罗列出参数中所有的功能列表sys.__doc__#调用参数中的函数 #dir()函数扩展展详解python中dir()函数不 ...

  6. 驰骋开源的asp.net工作流程引擎java工作流 2015 正文 驰骋工作流引擎ccflow6的功能列表

    关键词: 驰骋工作流引擎   ccflow的功能列表   工作流功能列表  表单引擎功能列表 我们工作流引擎ccflow6重构之后对功能做了一些调整,要想快速了解ccbpm的功能,可以以下面列表为准 ...

  7. PHP文件操作功能函数大全

    PHP文件操作功能函数大全 <?php /* 转换字节大小 */ function transByte($size){ $arr=array("B","KB&quo ...

  8. Eclipse快捷键列表大全

    from: http://hi.baidu.com/lzycsd/item/c6febccceacc173c44941684 from: http://www.open-open.com/bbs/vi ...

  9. GPS部标监控平台的功能设计(一)-功能列表

    在2011年交通部的796标准推出后,随着各地交管部门的硬性要求,大多数的GPS监控系统或者车辆管理系统或者物流管理系统,无论是旧的,还是新开发的,都必须要以796标准为基础蓝本,首先要满足796的要 ...

随机推荐

  1. 自学Linux Shell12.6-嵌套循环for命令

    点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...

  2. 洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告

    P2463 [SDOI2008]Sandy的卡片 题意 给\(n(\le 1000)\)串,定义两个串相等为"长度相同,且一个串每个数加某个数与另一个串完全相同",求所有串的最长公 ...

  3. Java -- JDBC 学习--事务

    数据库事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个 ...

  4. Linux下定时器

    http://unix8.net/linux%E4%B8%8B%E5%AE%9A%E6%97%B6%E5%99%A8.html 一. 基础知识 1.时间类型.Linux下常用的时间类型有4个:time ...

  5. 【洛谷P1073】最优贸易

    题目大意:给定一个 N 个点,M 条边(存在反向边)的有向图,点有点权,求一条从 1 到 N 的路径上,任意选出两个点 p,q (p 在前,q在后),两点点权的差值最大. 根据最短路的 dp 思想,可 ...

  6. 【POJ1015】Jury compromise 多个费用的背包

    这是一道比较综合的动态规划问题. 首先,根据题目中的从N个人中选出M个人,并且要使得某个目标函数最优,可以想到是背包问题,且因为要取出M个人,人数也应该作为背包体积的一个维度. 其次,要求输出路径,因 ...

  7. dijkstra 的优先队列优化

    既然要学习算法,就要学习到它的精髓,才能够使用起来得心应手. 我还是远远不够啊. 早就知道,dijkstra 算法可以用优先队列优化,我却一直不知道该怎样优化.当时,我的思路是这样的:假设有n个顶点, ...

  8. kubectl命令自动补全

    kubectl这个命令行工具非常重要,与之相关的命令也很多,我们也记不住那么多的命令,而且也会经常写错,所以命令自动补全是非常有必要的,kubectl命令行工具本身就支持complication,只需 ...

  9. Hadoop基础-配置历史服务器

    Hadoop基础-配置历史服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比 ...

  10. BootStrap行内编辑

    Bootstrap行内编辑,这里下载了一个X-Editable的插件,在Nuget里面就可以搜到. 引用的js和css大致如下: @*.Jquery组件引用*@ <script src=&quo ...