7.26. ioctl VIDIOC_G_DV_TIMINGS, VIDIOC_S_DV_TIMINGS

7.26.1. 名称

VIDIOC_G_DV_TIMINGS - VIDIOC_S_DV_TIMINGS - VIDIOC_SUBDEV_G_DV_TIMINGS - VIDIOC_SUBDEV_S_DV_TIMINGS - 获取或设置输入或输出的 DV 时序

7.26.2. 概要

VIDIOC_G_DV_TIMINGS

int ioctl(int fd, VIDIOC_G_DV_TIMINGS, struct v4l2_dv_timings *argp)

VIDIOC_S_DV_TIMINGS

int ioctl(int fd, VIDIOC_S_DV_TIMINGS, struct v4l2_dv_timings *argp)

VIDIOC_SUBDEV_G_DV_TIMINGS

int ioctl(int fd, VIDIOC_SUBDEV_G_DV_TIMINGS, struct v4l2_dv_timings *argp)

VIDIOC_SUBDEV_S_DV_TIMINGS

int ioctl(int fd, VIDIOC_SUBDEV_S_DV_TIMINGS, struct v4l2_dv_timings *argp)

7.26.3. 参数

fd

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

argp

指向 struct v4l2_dv_timings 的指针。

7.26.4. 描述

要设置输入或输出的 DV 时序,应用程序使用 VIDIOC_S_DV_TIMINGS ioctl,要获取当前时序,应用程序使用 VIDIOC_G_DV_TIMINGS ioctl。详细的时序信息使用结构 struct v4l2_dv_timings 填充。这些ioctl接受指向 struct v4l2_dv_timings 结构的指针作为参数。如果不支持 ioctl 或时序值不正确,驱动程序将返回 EINVAL 错误代码。

不允许在以只读模式注册的 subdev 设备节点上调用 VIDIOC_SUBDEV_S_DV_TIMINGS。返回一个错误,并将 errno 变量设置为 -EPERM

可以使用 linux/v4l2-dv-timings.h 标头来获取 CEA-861-EVESA DMT 标准中格式的时序。如果当前输入或输出不支持 DV 时序(例如,如果 ioctl VIDIOC_ENUMINPUT 未设置 V4L2_IN_CAP_DV_TIMINGS 标志),则返回 ENODATA 错误代码。

7.26.5. 返回值

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

EINVAL

不支持此ioctl,或者 VIDIOC_S_DV_TIMINGS 参数不合适。

ENODATA

此输入或输出不支持数字视频时序。

EBUSY

设备正忙,因此无法更改时序。

EPERM

VIDIOC_SUBDEV_S_DV_TIMINGS 已在只读子设备上调用。

type v4l2_bt_timings
struct v4l2_bt_timings

__u32

width

活动视频的宽度(以像素为单位)。

__u32

height

活动视频帧的高度(以行数为单位)。因此,对于隔行扫描格式,每个字段中活动视频的高度为 height/2。

__u32

interlaced

逐行扫描 (V4L2_DV_PROGRESSIVE) 或隔行扫描 (V4L2_DV_INTERLACED)。

__u32

polarities

这是一个位掩码,用于定义同步信号的极性。位 0 (V4L2_DV_VSYNC_POS_POL) 用于垂直同步极性,位 1 (V4L2_DV_HSYNC_POS_POL) 用于水平同步极性。如果设置了该位 (1),则为正极性;如果清除了该位 (0),则为负极性。

__u64

pixelclock

像素时钟,以 Hz 为单位。例如,74.25MHz->74250000

__u32

hfrontporch

水平前沿,以像素为单位

__u32

hsync

水平同步长度,以像素为单位

__u32

hbackporch

水平后沿,以像素为单位

__u32

vfrontporch

垂直前沿,以行数为单位。对于隔行扫描格式,这指的是奇数场(也称为场 1)。

__u32

vsync

垂直同步长度,以行数为单位。对于隔行扫描格式,这指的是奇数场(也称为场 1)。

__u32

vbackporch

垂直后沿,以行数为单位。对于隔行扫描格式,这指的是奇数场(也称为场 1)。

__u32

il_vfrontporch

隔行扫描字段格式的偶数场(也称为场 2)的垂直前沿,以行数为单位。对于逐行扫描格式,必须为 0。

__u32

il_vsync

隔行扫描字段格式的偶数场(也称为场 2)的垂直同步长度,以行数为单位。对于逐行扫描格式,必须为 0。

__u32

il_vbackporch

隔行扫描字段格式的偶数场(也称为场 2)的垂直后沿,以行数为单位。对于逐行扫描格式,必须为 0。

__u32

standards

此格式所属的视频标准。这将由驱动程序填充。应用程序必须将其设置为 0。有关标准的列表,请参见 DV BT 时序标准

__u32

flags

几个标志,提供有关格式的更多信息。有关标志的说明,请参见 DV BT 时序标志

struct v4l2_fract

picture_aspect

如果像素不是正方形,则为图像宽高比。仅当设置了 V4L2_DV_FL_HAS_PICTURE_ASPECT 标志时才有效。

__u8

cea861_vic

根据 CEA-861 标准的视频识别码。仅当设置了 V4L2_DV_FL_HAS_CEA861_VIC 标志时才有效。

__u8

hdmi_vic

根据 HDMI 标准的视频识别码。仅当设置了 V4L2_DV_FL_HAS_HDMI_VIC 标志时才有效。

__u8

reserved[46]

保留供将来扩展使用。驱动程序和应用程序必须将数组设置为零。

type v4l2_dv_timings
struct v4l2_dv_timings

__u32

type

DV 时序的类型,如 DV 时序类型 中列出的。

union {

(匿名)

struct v4l2_bt_timings

bt

由 BT.656/1120 规范定义的时序

__u32

reserved[32]

}

DV 时序类型

时序类型

描述

V4L2_DV_BT_656_1120

0

BT.656/1120 时序

DV BT 时序标准

时序标准

描述

V4L2_DV_BT_STD_CEA861

时序遵循 CEA-861 数字电视配置文件标准

V4L2_DV_BT_STD_DMT

时序遵循 VESA 离散监视器时序标准

V4L2_DV_BT_STD_CVT

时序遵循 VESA 协调视频时序标准

V4L2_DV_BT_STD_GTF

时序遵循 VESA 广义时序公式标准

V4L2_DV_BT_STD_SDI

时序遵循 SDI 时序标准。此格式中根本没有水平同步/前沿。总消隐时序必须仅在 hsync 或 vsync 字段中设置。

DV BT 时序标志

标志

描述

V4L2_DV_FL_REDUCED_BLANKING

CVT/GTF 特定的:时序使用减少的消隐 (CVT) 或“辅助 GTF”曲线 (GTF)。在这两种情况下,水平和/或垂直消隐间隔都会减少,从而允许在相同的带宽上获得更高的分辨率。这是一个只读标志,应用程序不得设置此标志。

V4L2_DV_FL_CAN_REDUCE_FPS

CEA-861 特定的:为帧速率为 6 的倍数的 CEA-861 格式设置。这些格式可以选择以 1 / 1.001 的速度播放,以与基于 60 Hz 的标准(如 NTSC 和 PAL-M,它们使用的帧速率为 29.97 帧/秒)兼容。如果发射器无法生成此类频率,则该标志也会被清除。这是一个只读标志,应用程序不得设置此标志。

V4L2_DV_FL_REDUCED_FPS

CEA-861 特定的:仅对设置了 V4L2_DV_FL_CAN_DETECT_REDUCED_FPS 的视频发射器或视频接收器有效。否则,将清除此标志。它也仅对设置了 V4L2_DV_FL_CAN_REDUCE_FPS 标志的格式有效,对于其他格式,该标志将由驱动程序清除。

如果应用程序为发射器设置此标志,则用于设置发射器的像素时钟将除以 1.001,以使其与 NTSC 帧速率兼容。如果发射器无法生成此类频率,则该标志将被清除。

如果视频接收器检测到格式使用降低的帧速率,则它将设置此标志以向应用程序发出信号。

V4L2_DV_FL_HALF_LINE

特定于隔行扫描格式:如果设置,则场 1(也称为奇数场)的垂直前沿实际上长半行,并且场 2(也称为偶数场)的垂直后沿实际上短半行,因此每个场都具有完全相同数量的半行。是否可以检测或使用半行取决于硬件。

V4L2_DV_FL_IS_CE_VIDEO

如果设置,则这是消费电子 (CE) 视频格式。此类格式与其他格式(通常称为 IT 格式)的不同之处在于,如果使用 R'G'B' 编码,则默认情况下 R'G'B' 值使用有限范围(即 16-235)而不是全范围(即 0-255)。CEA-861 中定义的所有格式(640x480p59.94 格式除外)都是 CE 格式。

V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE

某些格式(如 SMPTE-125M)具有总高度为奇数的隔行扫描信号。对于这些格式,如果设置了此标志,则第一场具有额外的行。否则,它是第二场。

V4L2_DV_FL_HAS_PICTURE_ASPECT

如果设置,则 picture_aspect 字段有效。否则,假定像素是正方形,因此图像宽高比与宽高比相同。

V4L2_DV_FL_HAS_CEA861_VIC

如果设置,则 cea861_vic 字段有效,并且包含 CEA-861 标准的视频识别码。

V4L2_DV_FL_HAS_HDMI_VIC

如果设置,则 hdmi_vic 字段有效,并且包含 HDMI 标准的视频识别码(HDMI 供应商特定信息帧)。

V4L2_DV_FL_CAN_DETECT_REDUCED_FPS

CEA-861 特定的:仅对视频接收器有效,该标志由发射器清除。如果设置,则硬件可以检测常规帧速率和降低的 1000/1001 帧速率之间的差异。例如:60 vs 59.94 Hz、30 vs 29.97 Hz 或 24 vs 23.976 Hz。