7.61. ioctl VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL¶
7.61.1. 名称¶
VIDIOC_SUBDEV_G_FRAME_INTERVAL - VIDIOC_SUBDEV_S_FRAME_INTERVAL - 获取或设置子设备焊盘上的帧间隔
7.61.2. 概要¶
-
VIDIOC_SUBDEV_G_FRAME_INTERVAL¶
int ioctl(int fd, VIDIOC_SUBDEV_G_FRAME_INTERVAL, struct v4l2_subdev_frame_interval *argp)
-
VIDIOC_SUBDEV_S_FRAME_INTERVAL¶
int ioctl(int fd, VIDIOC_SUBDEV_S_FRAME_INTERVAL, struct v4l2_subdev_frame_interval *argp)
7.61.3. 参数¶
fd
由
open()
返回的文件描述符。argp
指向结构体
v4l2_subdev_frame_interval
的指针。
7.61.4. 描述¶
这些 ioctl 用于获取和设置图像管道中特定子设备焊盘上的帧间隔。帧间隔仅对可以自行控制帧周期的子设备有意义。这包括例如图像传感器和电视调谐器。不支持帧间隔的子设备不得实现这些 ioctl。
要检索当前帧间隔,应用程序将结构体 v4l2_subdev_frame_interval
的 pad
字段设置为媒体控制器 API 报告的所需焊盘号。当它们使用指向此结构的指针调用 VIDIOC_SUBDEV_G_FRAME_INTERVAL
ioctl 时,驱动程序会填充 interval
字段的成员。
要更改当前帧间隔,应用程序需要设置 pad
字段和 interval
字段的所有成员。当它们使用指向此结构的指针调用 VIDIOC_SUBDEV_S_FRAME_INTERVAL
ioctl 时,驱动程序会验证请求的间隔,根据硬件功能对其进行调整,并配置设备。返回时,结构体 v4l2_subdev_frame_interval
包含当前帧间隔,就像 VIDIOC_SUBDEV_G_FRAME_INTERVAL
调用返回的那样。
如果子设备节点以只读模式注册,则只有在 which
字段设置为 V4L2_SUBDEV_FORMAT_TRY
时,对 VIDIOC_SUBDEV_S_FRAME_INTERVAL
的调用才有效,否则将返回错误,并将 errno 变量设置为 -EPERM
。
驱动程序不得仅因为请求的间隔与设备功能不匹配而返回错误。它们必须改为修改间隔以匹配硬件可以提供的间隔。修改后的间隔应尽可能接近原始请求。
更改帧间隔绝不应更改格式。另一方面,更改格式可能会更改帧间隔。
支持帧间隔 ioctl 的子设备应仅在单个焊盘上实现它们。当在同一子设备的多个焊盘上支持它们时,它们的行为未定义。
-
类型 v4l2_subdev_frame_interval¶
__u32 |
|
媒体控制器 API 报告的焊盘号。 |
结构体 |
|
连续视频帧之间的周期(以秒为单位)。 |
__u32 |
|
流标识符。 |
__u32 |
|
来自枚举 v4l2_subdev_format_whence 的活动或尝试帧间隔。 |
__u32 |
|
保留供将来扩展。应用程序和驱动程序必须将数组设置为零。 |
7.61.5. 返回值¶
成功时返回 0,错误时返回 -1,并相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EBUSY
由于焊盘当前正忙,因此无法更改帧间隔。例如,这可能是由于焊盘上存在活动的视频流造成的。在执行其他操作以首先解决问题之前,不得重试 ioctl。仅由
VIDIOC_SUBDEV_S_FRAME_INTERVAL
返回- EINVAL
结构体
v4l2_subdev_frame_interval
pad
引用了不存在的焊盘,which
字段具有不支持的值,或者焊盘不支持帧间隔。- EPERM
VIDIOC_SUBDEV_S_FRAME_INTERVAL
ioctl 已在只读子设备上调用,并且which
字段设置为V4L2_SUBDEV_FORMAT_ACTIVE
。