7.14. ioctl VIDIOC_ENUM_FMT¶
7.14.1. 名称¶
VIDIOC_ENUM_FMT - 枚举图像格式
7.14.2. 概要¶
-
VIDIOC_ENUM_FMT¶
int ioctl(int fd, VIDIOC_ENUM_FMT, struct v4l2_fmtdesc *argp)
7.14.3. 参数¶
fd
由
open()
返回的文件描述符。argp
指向 struct
v4l2_fmtdesc
的指针。
7.14.4. 描述¶
要枚举图像格式,应用程序初始化 struct v4l2_fmtdesc
的 type
、 mbus_code
和 index
字段,并使用指向此结构的指针调用 ioctl VIDIOC_ENUM_FMT ioctl。驱动程序填写结构的其余部分或返回 EINVAL
错误代码。通过从索引零开始并递增一,直到返回 EINVAL
,可以枚举所有格式。如果适用,驱动程序应按偏好顺序返回格式,其中首选格式在不太首选的格式之前返回(即,具有较低的 index
值)。
根据 V4L2_CAP_IO_MC
功能,mbus_code
字段的处理方式不同
未设置
V4L2_CAP_IO_MC
(也称为“以视频节点为中心”的驱动程序)应用程序应将
mbus_code
字段初始化为零,驱动程序应忽略该字段的值。驱动程序应枚举所有图像格式。
注意
切换输入或输出后,枚举的图像格式列表可能会有所不同。
设置了
V4L2_CAP_IO_MC
(也称为“以 MC 为中心”的驱动程序)如果
mbus_code
字段为零,则应枚举所有图像格式。如果
mbus_code
字段初始化为有效的(非零) 媒体总线格式代码,则驱动程序应将枚举限制为仅可生成(对于视频输出设备)或从该媒体总线代码生成的(对于视频捕获设备)的图像格式。如果驱动程序不支持mbus_code
,则应返回EINVAL
。无论
mbus_code
字段的值如何,枚举的图像格式都不应依赖于视频设备或设备管道的活动配置。
-
type v4l2_fmtdesc¶
__u32 |
|
枚举中格式的编号,由应用程序设置。这与 |
__u32 |
|
数据流的类型,由应用程序设置。此处仅这些类型有效: |
__u32 |
|
请参见 图像格式描述标志 |
__u8 |
|
格式的描述,以 NUL 结尾的 ASCII 字符串。此信息供用户使用,例如:“YUV 4:2:2”。 |
__u32 |
|
图像格式标识符。这是由 v4l2_fourcc() 宏计算的四字符代码 |
此规范已在 图像格式 中定义了几种图像格式。 注意 这些代码与 Windows 世界中使用的代码不同。 |
||
__u32 |
|
限制枚举格式的媒体总线代码,由应用程序设置。仅适用于声明 |
__u32 |
|
保留供将来扩展。驱动程序必须将数组设置为零。 |
|
0x0001 |
这是一种压缩格式。 |
|
0x0002 |
此格式不是设备的本机格式,而是通过软件(通常是 libv4l2)模拟的,如果可能,请尝试使用本机格式以获得更好的性能。 |
|
0x0004 |
此压缩字节流格式(又名编码格式)的硬件解码器能够解析连续字节流。应用程序无需自行解析字节流即可找到帧/字段之间的边界。 此标志只能与 |
|
0x0008 |
设备对这种压缩字节流格式(又名编码格式)支持动态分辨率切换。当检测到视频参数发生更改时,它将通过事件 此标志只能与 |
|
0x0010 |
硬件编码器支持将 此标志只能与 |
|
0x0020 |
驱动程序允许应用程序尝试更改默认的色彩空间。此标志仅与捕获设备相关。应用程序可以在调用 VIDIOC_S_FMT ioctl 时,设置 V4L2_PIX_FMT_FLAG_SET_CSC,从而请求配置捕获设备的色彩空间。 |
|
0x0040 |
驱动程序允许应用程序尝试更改默认的传递函数。此标志仅与捕获设备相关。应用程序可以在调用 VIDIOC_S_FMT ioctl 时,设置 V4L2_PIX_FMT_FLAG_SET_CSC,从而请求配置捕获设备的传递函数。 |
|
0x0080 |
驱动程序允许应用程序尝试更改默认的 Y’CbCr 编码。此标志仅与捕获设备相关。应用程序可以在调用 VIDIOC_S_FMT ioctl 时,设置 V4L2_PIX_FMT_FLAG_SET_CSC,从而请求配置捕获设备的 Y’CbCr 编码。 |
|
0x0080 |
驱动程序允许应用程序尝试更改默认的 HSV 编码。此标志仅与捕获设备相关。应用程序可以在调用 VIDIOC_S_FMT ioctl 时,设置 V4L2_PIX_FMT_FLAG_SET_CSC,从而请求配置捕获设备的 HSV 编码。 |
|
0x0100 |
驱动程序允许应用程序尝试更改默认的量化。此标志仅与捕获设备相关。应用程序可以在调用 VIDIOC_S_FMT ioctl 时,设置 V4L2_PIX_FMT_FLAG_SET_CSC,从而请求配置捕获设备的量化。 |
|
0x0200 |
元数据格式是基于行的。在这种情况下, |
|
0x80000000 |
当应用程序将 |
7.14.5. 返回值¶
成功时返回 0,出错时返回 -1 并适当设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EINVAL
v4l2_fmtdesc
结构体的type
不受支持或index
超出范围。如果设置了
V4L2_CAP_IO_MC
且指定的mbus_code
不受支持,则也会返回此错误代码。