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_enum
的 index
字段进行索引。每对 pad
和 code
对应一个单独的枚举。每个枚举从 index
0 开始,最低的无效索引标志着枚举的结束。
因此,要枚举指定 pad 上允许的帧大小并使用指定的 mbus 格式,请将 pad
、which
和 code
字段初始化为所需的值,并将 index
设置为 0。然后使用指向结构的指针调用 ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl。
成功的调用将返回填充的最小和最大帧大小。重复增加 index
,直到收到 EINVAL
。EINVAL
表示枚举中没有更多条目可用,或者输入参数无效。
仅支持离散帧大小的子设备(例如大多数传感器)将返回一个或多个具有相同最小和最大值的帧大小。
并非给定的 [最小,最大] 范围内的所有可能大小都需要支持。例如,使用定点缩放比例的缩放器可能无法生成最小值和最大值之间的每个帧大小。应用程序必须使用 VIDIOC_SUBDEV_S_FMT ioctl 尝试子设备以获得精确支持的帧大小。
可用的帧大小可能取决于子设备其他 pad 上的当前“try”格式,以及当前活动链接和 V4L2 控制的当前值。有关试用格式的更多信息,请参见 ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT。
-
type v4l2_subdev_frame_size_enum¶
__u32 |
|
属于给定 pad 和格式的枚举中帧大小的索引。由应用程序填写。 |
__u32 |
|
媒体控制器 API 报告的 Pad 编号。由应用程序填写。 |
__u32 |
|
媒体总线格式代码,如 媒体总线格式 中定义。由应用程序填写。 |
__u32 |
|
最小帧宽度,以像素为单位。由驱动程序填写。 |
__u32 |
|
最大帧宽度,以像素为单位。由驱动程序填写。 |
__u32 |
|
最小帧高度,以像素为单位。由驱动程序填写。 |
__u32 |
|
最大帧高度,以像素为单位。由驱动程序填写。 |
__u32 |
|
要枚举的帧大小,来自 enum v4l2_subdev_format_whence。 |
__u32 |
|
流标识符。 |
__u32 |
|
保留以供将来扩展。应用程序和驱动程序必须将数组设置为零。 |
7.57.5. 返回值¶
成功返回 0,失败返回 -1 并且适当地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EINVAL
struct
v4l2_subdev_frame_size_enum
pad
引用了不存在的 pad,which
字段具有不支持的值,code
对于给定的 pad 无效,或者index
字段超出范围。