7.57. ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE

7.57.1. 名称

VIDIOC_SUBDEV_ENUM_FRAME_SIZE - 枚举媒体总线帧大小

7.57.2. 概要

VIDIOC_SUBDEV_ENUM_FRAME_SIZE

int ioctl(int fd, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, struct v4l2_subdev_frame_size_enum * argp)

7.57.3. 参数

fd

open() 返回的文件描述符。

argp

指向 struct v4l2_subdev_frame_size_enum 的指针。

7.57.4. 描述

此 ioctl 允许应用程序访问指定媒体总线格式的指定 pad 上子设备支持的帧大小的枚举。可以使用 ioctl VIDIOC_SUBDEV_ENUM_MBUS_CODE ioctl检索支持的格式。

枚举由驱动程序定义,并使用 struct v4l2_subdev_frame_size_enumindex 字段进行索引。每一对 padcode 对应一个单独的枚举。每个枚举都以 index 为 0 开始,并且最低的无效索引标记枚举的结束。

因此,要枚举在指定的 pad 上并使用指定的 mbus 格式允许的帧大小,请将 padwhichcode 字段初始化为所需的值,并将 index 设置为 0。然后使用指向该结构的指针调用 ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl。

成功调用将返回填充的最小和最大帧大小。重复增加 index,直到收到 EINVALEINVAL 表示枚举中不再有条目可用,或者输入参数无效。

仅支持离散帧大小的子设备(例如大多数传感器)将返回一个或多个具有相同最小和最大值的帧大小。

并非给定的 [最小,最大] 范围内的所有可能大小都需要支持。例如,使用定点缩放比例的缩放器可能无法生成最小和最大值之间的每个帧大小。应用程序必须使用 VIDIOC_SUBDEV_S_FMT ioctl 来尝试子设备以获取精确支持的帧大小。

可用的帧大小可能取决于子设备其他 pad 上的当前“尝试”格式,以及当前的活动链接和 V4L2 控制的当前值。有关尝试格式的更多信息,请参阅 ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT

类型 v4l2_subdev_frame_size_enum
struct v4l2_subdev_frame_size_enum

__u32

index

属于给定 pad 和格式的枚举中帧大小的索引。由应用程序填充。

__u32

pad

媒体控制器 API 报告的 Pad 号。由应用程序填充。

__u32

code

媒体总线格式代码,如 媒体总线格式 中所定义。由应用程序填充。

__u32

min_width

最小帧宽度,以像素为单位。由驱动程序填充。

__u32

max_width

最大帧宽度,以像素为单位。由驱动程序填充。

__u32

min_height

最小帧高度,以像素为单位。由驱动程序填充。

__u32

max_height

最大帧高度,以像素为单位。由驱动程序填充。

__u32

which

要枚举的帧大小,来自 enum v4l2_subdev_format_whence

__u32

stream

流标识符。

__u32

reserved[7]

保留以供将来扩展。应用程序和驱动程序必须将数组设置为零。

7.57.5. 返回值

成功时返回 0,错误时返回 -1,并且 errno 变量将设置为相应的值。通用错误代码在 通用错误代码 章节中进行了描述。

EINVAL

struct v4l2_subdev_frame_size_enumpad 引用了不存在的 pad,which 字段具有不支持的值,code 对于给定的 pad 无效,或者 index 字段超出范围。