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 上的当前“尝试”格式,以及当前的活动链接和 V4L2 控制的当前值。有关尝试格式的更多信息,请参阅 ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT。
-
类型 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
字段超出范围。