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 时请求配置捕获设备的 Y'CbCr 编码,并设置 V4L2_PIX_FMT_FLAG_SET_CSC。 |
|
0x0080 |
驱动程序允许应用程序尝试更改默认 HSV 编码。 此标志仅与捕获设备相关。 应用程序可以在调用 VIDIOC_S_FMT ioctl 时请求配置捕获设备的 HSV 编码,并设置 V4L2_PIX_FMT_FLAG_SET_CSC。 |
|
0x0100 |
驱动程序允许应用程序尝试更改默认量化。 此标志仅与捕获设备相关。 应用程序可以在调用 VIDIOC_S_FMT ioctl 时请求配置捕获设备的量化,并设置 V4L2_PIX_FMT_FLAG_SET_CSC。 |
|
0x0200 |
元数据格式是基于行的。 在这种情况下, |
|
0x80000000 |
当应用程序将 |
7.14.5. 返回值¶
成功时返回 0,出错时返回 -1,并适当设置 errno
变量。 泛型错误代码在 泛型错误代码 章节中描述。
- EINVAL
不支持 struct
v4l2_fmtdesc
type
或index
超出范围。如果设置了
V4L2_CAP_IO_MC
并且不支持指定的mbus_code
,则也返回此错误代码。