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 错误代码。

不允许在以只读模式注册的子设备节点上调用 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 的速度播放,以兼容使用 29.97 帧/秒的帧速率的基于 60 Hz 的标准,例如 NTSC 和 PAL-M。如果发射器无法生成此类频率,则该标志也将被清除。这是一个只读标志,应用程序不得设置此标志。

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 与 59.94 Hz,30 与 29.97 Hz 或 24 与 23.976 Hz。