7.16. ioctl VIDIOC_ENUM_FRAMEINTERVALS

7.16.1. 名称

VIDIOC_ENUM_FRAMEINTERVALS - 枚举帧间隔

7.16.2. 概要

VIDIOC_ENUM_FRAMEINTERVALS

int ioctl(int fd, VIDIOC_ENUM_FRAMEINTERVALS, struct v4l2_frmivalenum *argp)

7.16.3. 参数

fd

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

argp

指向结构体 v4l2_frmivalenum 的指针,该结构体包含像素格式和大小,并接收帧间隔。

7.16.4. 描述

此 ioctl 允许应用程序枚举设备针对给定像素格式和帧大小支持的所有帧间隔。

可以通过使用 ioctl VIDIOC_ENUM_FMTioctl VIDIOC_ENUM_FRAMESIZES 函数获取支持的像素格式和帧大小。

返回值和 v4l2_frmivalenum.type 字段的内容取决于设备支持的帧间隔类型。以下是不同情况下该函数的语义

  • 离散: 如果给定的索引值(从零开始)有效,则函数返回成功。应用程序应每次调用时将索引递增 1,直到返回 EINVAL 为止。驱动程序将 v4l2_frmivalenum.type 字段设置为 V4L2_FRMIVAL_TYPE_DISCRETE。联合中只有 discrete 成员有效。

  • 逐步: 如果给定的索引值为零,则函数返回成功;对于任何其他索引值,则返回 EINVAL。驱动程序将 v4l2_frmivalenum.type 字段设置为 V4L2_FRMIVAL_TYPE_STEPWISE。联合中只有 stepwise 成员有效。

  • 连续: 这是上述逐步类型的一个特殊情况。如果给定的索引值为零,则函数返回成功;对于任何其他索引值,则返回 EINVAL。驱动程序将 v4l2_frmivalenum.type 字段设置为 V4L2_FRMIVAL_TYPE_CONTINUOUS。联合中只有 stepwise 成员有效,并且 step 值设置为 1。

当应用程序使用索引零调用该函数时,必须检查 type 字段以确定设备支持的帧间隔枚举类型。只有对于 V4L2_FRMIVAL_TYPE_DISCRETE 类型,递增索引值以接收更多帧间隔才有意义。

注意

返回帧间隔的顺序没有特殊含义。特别地,它没有说明任何关于潜在默认帧间隔的信息。

应用程序可以假设,如果没有应用程序本身的任何交互,枚举数据不会更改。这意味着,如果应用程序在运行帧间隔枚举时没有执行任何其他 ioctl 调用,则枚举数据是一致的。

注意

帧间隔和帧率: V4L2 API 使用帧间隔而不是帧率。给定帧间隔,可以按如下方式计算帧率

frame_rate = 1 / frame_interval

7.16.5. 结构体

在下面的结构体中,IN 表示必须由应用程序填充的值,OUT 表示驱动程序填充的值。应用程序应将所有成员清零,但 IN 字段除外。

类型 v4l2_frmival_stepwise
struct v4l2_frmival_stepwise

结构体 v4l2_fract

min

最小帧间隔 [s]。

结构体 v4l2_fract

max

最大帧间隔 [s]。

结构体 v4l2_fract

step

帧间隔步长 [s]。

类型 v4l2_frmivalenum
struct v4l2_frmivalenum

__u32

index

IN:枚举中给定帧间隔的索引。

__u32

pixel_format

IN:枚举帧间隔所用的像素格式。

__u32

width

IN:枚举帧间隔所用的帧宽度。

__u32

height

IN:枚举帧间隔所用的帧高度。

__u32

type

OUT:设备支持的帧间隔类型。

union {

(匿名)

OUT:具有给定索引的帧间隔。

结构体 v4l2_fract

discrete

帧间隔 [s]。

结构体 v4l2_frmival_stepwise

stepwise

}

__u32

reserved[2]

保留空间以供将来使用。必须由驱动程序和应用程序清零。

7.16.6. 枚举

类型 v4l2_frmivaltypes
enum v4l2_frmivaltypes

V4L2_FRMIVAL_TYPE_DISCRETE

1

离散帧间隔。

V4L2_FRMIVAL_TYPE_CONTINUOUS

2

连续帧间隔。

V4L2_FRMIVAL_TYPE_STEPWISE

3

逐步定义的帧间隔。

7.16.7. 返回值

成功时返回 0,出错时返回 -1,并相应地设置 errno 变量。通用错误代码在 通用错误代码 章节中描述。