V4L2讲解学习.docx

上传人:b****6 文档编号:5363382 上传时间:2022-12-15 格式:DOCX 页数:10 大小:22.76KB
下载 相关 举报
V4L2讲解学习.docx_第1页
第1页 / 共10页
V4L2讲解学习.docx_第2页
第2页 / 共10页
V4L2讲解学习.docx_第3页
第3页 / 共10页
V4L2讲解学习.docx_第4页
第4页 / 共10页
V4L2讲解学习.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

V4L2讲解学习.docx

《V4L2讲解学习.docx》由会员分享,可在线阅读,更多相关《V4L2讲解学习.docx(10页珍藏版)》请在冰豆网上搜索。

V4L2讲解学习.docx

V4L2讲解学习

一,功能参考

目录

V4L2close()-关闭一个V4L2设备

V4L2ioctl()-创建的V4L2设备

ioctlVIDIOC_CROPCAP-视频裁剪和缩放功能信息

ioctlVIDIOC_DBG_G_REGISTER,VIDIOC_DBG_S_REGISTER-读或写硬件注册表

ioctlVIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD-执行编码器命令

ioctlVIDIOC_ENUMAUDIO-枚举音频输入

ioctlVIDIOC_ENUMAUDOUT-枚举音频输出

ioctlVIDIOC_ENUM_FMT-枚举图像格式

ioctlVIDIOC_ENUM_FRAMESIZES-枚举外形尺寸

ioctlVIDIOC_ENUM_FRAMEINTERVALS-枚举帧间隔

ioctlVIDIOC_ENUMINPUT-枚举视频输入

ioctlVIDIOC_ENUMOUTPUT-枚举视频输出

ioctlVIDIOC_ENUMSTD-枚举支持的视频标准

ioctlVIDIOC_G_AUDIO,VIDIOC_S_AUDIO-查询或选择当前的音频输入和它的属性

ioctlVIDIOC_G_AUDOUT,VIDIOC_S_AUDOUT-查询或选择当前的音频输出

ioctlVIDIOC_G_CHIP_IDENT–识别电视卡的芯片

ioctlVIDIOC_G_CROP,VIDIOC_S_CROP-获取或设置当前裁剪矩形

ioctlVIDIOC_G_CTRL,VIDIOC_S_CTRL-获取或设置控件的值

ioctlVIDIOC_G_ENC_INDEX-获取关于压缩视频流的元数据

ioctlVIDIOC_G_EXT_CTRLS,VIDIOC_S_EXT_CTRLS,VIDIOC_TRY_EXT_CTRLS-获取或设置控件的值数,尽量控制值

ioctlVIDIOC_G_FBUF,VIDIOC_S_FBUF-获取或设置参数帧缓冲区覆盖

ioctlVIDIOC_G_FMT,VIDIOC_S_FMT,VIDIOC_TRY_FMT-获取或设置数据格式,试验格式

ioctlVIDIOC_G_FREQUENCY,VIDIOC_S_FREQUENCY-获取或设置调谐器或射频调制器

ioctlVIDIOC_G_INPUT,VIDIOC_S_INPUT-查询或选择当前视频输入

ioctlVIDIOC_G_JPEGCOMP,VIDIOC_S_JPEGCOMP- 

ioctlVIDIOC_G_MODULATOR,VIDIOC_S_MODULATOR-调制器,获取或设置属性

ioctlVIDIOC_G_OUTPUT,VIDIOC_S_OUTPUT-查询或选择当前视频输出

ioctlVIDIOC_G_PARM,VIDIOC_S_PARM-获取或设置流参数

ioctlVIDIOC_G_PRIORITY,VIDIOC_S_PRIORITY-查询或要求访问的优先级与文件描述符关联

ioctlVIDIOC_G_SLICED_VBI_CAP-查询切片的VBI功能

ioctlVIDIOC_G_STD,VIDIOC_S_STD-查询或选择当前输入视频标准

ioctlVIDIOC_G_TUNER,VIDIOC_S_TUNER-获取或设置调谐器属性

ioctlVIDIOC_LOG_STATUS-记录驱动程序的状态信息

ioctlVIDIOC_OVERLAY-启动或停止视频覆盖

ioctlVIDIOC_QBUF,VIDIOC_DQBUF-交流与驱动程序缓冲区

ioctlVIDIOC_QUERYBUF-查询一个缓冲区的状态

ioctlVIDIOC_QUERYCAP-查询设备的功能

ioctlVIDIOC_QUERYCTRL,VIDIOC_QUERYMENU-枚举控制和菜单控制项目

ioctlVIDIOC_QUERYSTD–识别由目前的输入接收的视频标准

ioctlVIDIOC_REQBUFS-启动用户指针或内存映射的I/O

ioctlVIDIOC_STREAMON,VIDIOC_STREAMOFF-启动或停止流I/O

V4L2mmap()-映射设备内存到应用程序的地址空间

V4L2munmap()-取消映射设备内存

V4L2open()-打开的V4L2设备

V4L2调查()-等待某些事件对一个文件描述符

V4L2阅读()-读取V4L2设备

V4L2选择()-同步I/O复用

V4L2写()-写入V4L2设备

V4L2close()

名称

V4L2的关闭-关闭一个V4L2设备

概要

#includeintclose(intfd);

fd

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

说明

关闭设备。

即程序中所有I/O被终止和文件描述符相关的资源被释放。

但是数据格式参数,电流输入或输出,控制值或其他属性保持不变。

返回值

该函数成功返回0,失败返回-1并设置适当的errno。

即可能的错误代码:

EBADF

fd不是一个有效的打开文件描述符。

V4L2ioctl()

名称

V4L2-ioctl–创建一个V4L2设备

概要

#includeintioctl(intfd,intrequest,void*argp);

参数

fd

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

要求

V4L2IOCTL要求代码与videodev.h头文件中定义的一致,例如VIDIOC_QUERYCAP。

argp

指针指向一个函数的参数,通常是一个结构。

说明

ioctl()函数用于创建V4L2设备。

fd参数必须是一个开放的文件描述符。

IOCTL要求把所有参数编码进去,无论参数是一个输入,输出或读/写参数,而且参数argp要以字节为单位。

宏和定义明确的V4L2ioctl要求都位于videodev.h头文件中。

应用程序应该使用他们自己的副本,不包括在他们的系统上编译的内核源代码的版本。

所有的V4L2ioctl要求,即它们各自的功能和参数,都规定在ReferenceI,FunctionReference.中

返回值

成功的ioctl()函数将返回0,不会重置errno变量。

如果失败返回-1,当IOCTL将输出或读/写参数,它保持不变,并相应地设置errno变量。

请参阅下面的可能的错误代码。

像EBADFEFAULT一般错误不单独列在讨论ioctl要求部分。

注意ioctl可能会返回未定义错误代码。

由于有这样的错误可能使一个驱动重起申请意外终止。

EBADF

fd不是一个有效的打开文件描述符。

EBUSY

该属性不能立即改变。

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

EFAULT

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

ENOTTY

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

EINVAL

请求或数据argp指向的是无效的。

这是一个非常常见的错误代码,请参阅ReferenceI中特殊ioctl要求,原因借鉴FunctionReference。

ENOMEM

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

ERANGE的

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

ioctlVIDIOC_CROPCAP

名称

VIDIOC_CROPCAP-视频裁剪和缩放功能信息

概要

intioctl(intfd,intrequest,structv4l2_cropcap*argp);

参数

fd

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

请求

VIDIOC_CROPCAP

argp

说明

应用程序使用此功能来查询裁剪限制,图像的像素方面及计算数值范围的信息。

他们建立了一个以各自的缓冲(stresm)型的v4l2_cropcap结构的类型字段,并用这个结构的指针调用VIDIOC_CROPCAPioctl。

驱动补充结构的其余部分。

结果是不变的,除非切换视频标准。

请记住当切换视频输入或输出时,这个开关会隐藏。

Table1.structv4l2_cropcap

enumv4l2_buf_typetype

自制性手工艺品。

自制饰品其实很简单,工艺一点也不复杂。

近两年来,由于手机的普及,自制的手机挂坠特别受欢迎。

应用程序设置数据流的类型。

这些类型是有效的,只有在这里:

V4L2_BUF_TYPE_VIDEO_CAPTURE,V4L2_BUF_TYPE_VIDEO_OUTPUT,V4L2_BUF_TYPE_VIDEO_OVERLAY,和自定义(驱动程序定义)类型时用代码V4L2_BUF_TYPE_PRIVATE或者更高级的代码。

structv4l2_rectbounds

 定义了窗口内捕捉或输出是可能的,这可能排除例如,水平和垂直消隐区。

裁剪矩形不能超过这些限制。

宽度和高度以像素为单位定义,在模拟域中驱动程序编写者可以自由选择原点和坐标系的单位。

structv4l2_rectdefrect

默认裁剪矩形,它应当包括“全貌”。

假设像素宽高比为1/1,这可能是比如一个在活动图像区域中心用于NTSC的640×480的矩形,或者用于PAL和SECAM的768×576的矩形。

同样的坐标系用于边界的定义。

structv4l2_fractpixelaspect

在像素方面(y/x),当没有缩放应用时,实际采样频率比和频率需要得到方形像素频率。

当裁剪坐标指的是方形像素时,驱动设置pixelaspect为1/1。

其他常见的值是NTSC制式为PAL和SECAM,11/1054/59采样按[国际电联BT.601]。

Table2.structv4l2_rect

__s32left顶部左边的矩形角横向偏移,以像素为单位。

__s32top顶部左边的矩形角垂直偏移,以像素为单位。

__s32width矩形的宽度,以像素为单位。

__s32height矩形的高度,以像素为单位。

宽度和高度不能为负数,否则该字段将被标示为异常的原因。

返回值

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

EINVAL

该结构v4l2_cropcap类型是无效或不支持ioctl。

这时视频捕捉,输出和覆盖设备是不允许的,他们必须支持VIDIOC_CROPCAP.。

ioctlVIDIOC_DBG_G_REGISTER,VIDIOC_DBG_S_REGISTER

(二)对“碧芝”自制饰品店的分析名称

VIDIOC_DBG_G_REGISTER,VIDIOC_DBG_S_REGISTER-读或写硬件注册表

概要

虽然调查显示我们的创意计划有很大的发展空间,但是各种如“漂亮女生”和“碧芝”等连锁饰品店在不久的将来将对我们的创意小屋会产生很大的威胁。

intioctl(intfd,intrequest,structv4l2_register*argp);

intioctl(intfd,intrequest,conststructv4l2_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芯片。

驱动也许会理解为一个随机IDmatch_chip,但是我们不这么理解。

数字零始终选择主芯片,例如芯片连接到PCI总线。

你可以找出哪些芯片提供VIDIOC_G_CHIP_IDENTioctl。

当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总线地址选择了一个芯片。

成功没有保证:

由于在LinuxI2C总线驱动程序中的一个缺陷,这些IOCTL可能会成功返回而不用实际读取或写入一个注册表。

要找到最有可能失败的地方,我们建议一个VIDIOC_G_CHIP_IDENT命令确认正在运行的所选的I2C芯片。

这些IOCTL具有选择性,不是所有的驱动程序支持它们。

然而,当一个驱动程序支持这些IOCTL时也必须支持VIDIOC_G_CHIP_IDENT。

相反它可能支持VIDIOC_G_CHIP_IDENT但不支持这些IOCTL。

在Linux2.6.21将介绍VIDIOC_DBG_G_REGISTER和VIDIOC_DBG_S_REGISTER。

我们建议用V4L2-dbg实用工具直接结束调用这些IOCTL。

这可从LinuxTVv41-DVB库中看到;访问指令http:

//linuxtv.org/repo/。

Table1.structv4l2_register

400-500元1326%__u32match_type见表2的可能类型表。

__u32match_chip由这个代码匹配芯片,根据match_type字段解释执行。

__u64reg一个注册代码。

__u64val这个值从注册表中读出,或写入到注册表。

Table2.ChipMatchTypes

V4L2_CHIP_MATCH_HOST0匹配的卡上的n个芯片,0为主机芯片。

不匹配I2C芯片。

V4L2_CHIP_MATCH_I2C_DRIVER1用linux/i2c-id.h头文件中的驱动程序的ID匹配I2C芯片。

V4L2_CHIP_MATCH_I2C_ADDR2匹配7位I2C总线地址芯片。

返回值

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

EINVAL

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

返回EPERM

没有足够的权限。

Root权限才能执行这些IOCTL。

(2)文化优势ioctlVIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD

在上海,随着轨道交通的发展,地铁商铺应运而生,并且在重要商圈已经形成一定的气候,投资经营地铁商铺逐渐为一大热门。

在人民广场地下的迪美购物中心,有一家DIY自制饰品店--“碧芝自制饰品店”名称

VIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD-执行编码器命令

简介

intioctl(intfd,intrequest,structv4l2_encoder_cmd*argp);

参数

fd

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

请求

VIDIOC_ENCODER_CMD,VIDIOC_TRY_ENCODER_CMD

argp

说明

实验性:

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

这些IOCTL控制音频/视频(通常的MPEG-)编码器。

VIDIOC_ENCODER_CMD向编码器发送一个命令,VIDIOC_TRY_ENCODER_CMD可以用来尝试一个命令而不用实际执行这个命令。

要发送一个命令程序必须初始化一个structv4l2_encoder_cmd的所有字段和用该结构的指针调用VIDIOC_ENCODER_CMD或VIDIOC_TRY_ENCODER_CMD。

在cmd字段必须包含命令代码。

这些标志字段一般只用于停机命令,并包含一个字节:

如果V4L2_ENC_CMD_STOP_AT_GOP_END标志设定,编码将持续到当前组的图片结束,否则会立即停止。

如果编码器尚未开始,一个read()调用将向它发送一个开始命令。

执行STOP命令后,read()调用将读取由驱动程序缓冲的剩余数据。

当缓冲区是空的,read()将返回零,下一个read()调用将重新启动编码器。

一个close()调用将停止命令发送到编码器,所有缓冲的数据将被清除。

这些IOCTL是可选的,不是所有的驱动程序都支持它们。

他们将在Linux2.6.21介绍。

Table1.structv4l2_encoder_cmd

__u32cmd编码器命令,见表2。

__u32flags标志命令,见表3。

如果没有这个标志定义命令,驱动程序和应用程序必须设置此字段为零。

__u32data[8]为未来的扩展保留。

驱动程序和应用程序必须设置数组为零。

Table2.EncoderCommands

V4L2_ENC_CMD_START0开始运行编码器。

当编码器已在运行或暂停,这个命令不执行任何操作。

这个命令不定义任何标志。

V4L2_ENC_CMD_STOP1停止编码器。

当V4L2_ENC_CMD_STOP_AT_GOP_END标志设定,编码将持续到当前组的图片结束,否则,编码将立即停止。

当编码器已经停止,该命令不执行任何操作。

V4L2_ENC_CMD_PAUSE2暂停编码器。

当编码器还没有开始,驱动程序将返回一个返回EPERM错误代码。

当编码器已经暂停,这个命令不执行任何操作。

这个命令不定义任何标志。

功能性手工艺品。

不同的玉石具有不同的功效,比如石榴石可以促进血液循环,改善风湿和关节炎;白水晶则可以增强记忆力;茶晶能够帮助镇定情绪,缓解失眠、头昏等症状。

顾客可以根据自己的需要和喜好自行搭配,每一件都独一无二、与众不同。

V4L2_ENC_CMD_RESUME3暂停后恢复编码命令。

当编码器还没有开始,驱动程序将返回一个返回EPERM错误代码。

当编码器已在运行,这个命令不执行任何操作。

这个命令不定义任何标志。

Table3.EncoderCommandFlags

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

返回值

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

EINVAL

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

EPERM

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

夏日的街头,吊带装、露背装、一步裙、迷你裙五彩缤纷、争妍斗艳。

爱美的女孩们不仅在服饰搭配上费尽心机,饰品的选择也十分讲究。

可惜在商店里买的项链、手链、手机挂坠等往往样式平淡无奇,还容易出现雷同现象。

ioctlVIDIOC_ENUMAUDIO

尽管售价不菲,但仍没挡住喜欢它的人来来往往。

这里有营业员们向顾客们示范着制作各种风格迥异的饰品,许多顾客也是学得不亦乐乎。

在现场,有上班族在里面精挑细选成品,有细心的小女孩在仔细盘算着用料和价钱,准备自己制作的原料。

可以想见,用本来稀奇的原料,加上别具匠心的制作,每一款成品都必是独一无二的。

而这也许正是自己制造所能带来最大的快乐吧。

名称

VIDIOC_ENUMAUDIO-枚举音频输入

简介

intioctl(intfd,intrequest,structv4l2_audio*argp);

参数

fd

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

请求

VIDIOC_ENUMAUDIO

argp

说明

要查询音频输入应用程序的属性要初始化了一个结构v4l2_audio保留数组的索引字段和零,并呼吁以这种结构指针VIDIOC_ENUMAUDIO的ioctl。

司机填写的结构休息或返回EINVAL错误代码时,索引超出范围。

枚举所有的音频输入申请须在索引零开始,由司机返回EINVAL,直到一个递增。

参见描述的结构v4l2_audio的ioctlVIDIOC_G_AUDIO,VIDIOC_S_AUDIO

(2)。

返回值

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

EINVAL

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

ioctlVIDIOC_ENUMAUDOUT

、DIY手工艺市场现状分析

名称

VIDIOC_ENUMAUDOUT-枚举音频输出

简介

intioctl(intfd,intrequest,structv4l2_audioout*argp);

参数

fd

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

要求

VIDIOC_ENUMAUDOUT

argp

说明

要查询的音频输出应用的属性初始化了索引字段和归零一个v4l2_audioout结构的保留数组,并用指针调用这种结构VIDIOC_G_AUDOUTioctl。

当索引超出范围时,驱动程序将停止该结构或返回EINVAL错误代码。

枚举所有的音频输出,申请须在索引由零开始,然后递增直到驱动程序返回EINVAL。

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

参见描述的结构v4l2_audioout的ioctlVIDIOC_G_AUDOUT,VIDIOC_S_AUDOUT

(2)。

返回值

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

EINVAL

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1