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 上的当前“try”格式,以及当前活动链接和 V4L2 控制的当前值。有关试用格式的更多信息,请参见 ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT

type 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_enum pad 引用了不存在的 pad,which 字段具有不支持的值,code 对于给定的 pad 无效,或者 index 字段超出范围。