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-E 和 VESA 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¶
__u32 |
|
活动视频的宽度(以像素为单位)。 |
__u32 |
|
活动视频帧的高度(以行为单位)。因此,对于隔行扫描格式,每个场中活动视频的高度为 |
__u32 |
|
逐行扫描 ( |
__u32 |
|
这是一个位掩码,用于定义同步信号的极性。位 0 ( |
__u64 |
|
像素时钟(以 Hz 为单位)。例如,74.25MHz->74250000 |
__u32 |
|
水平前沿(以像素为单位) |
__u32 |
|
水平同步长度(以像素为单位) |
__u32 |
|
水平后沿(以像素为单位) |
__u32 |
|
垂直前沿(以行为单位)。对于隔行扫描格式,这指的是奇数场(又名场 1)。 |
__u32 |
|
垂直同步长度(以行为单位)。对于隔行扫描格式,这指的是奇数场(又名场 1)。 |
__u32 |
|
垂直后沿(以行为单位)。对于隔行扫描格式,这指的是奇数场(又名场 1)。 |
__u32 |
|
隔行扫描场格式的偶数场(又名场 2)的垂直前沿(以行为单位)。对于逐行扫描格式,必须为 0。 |
__u32 |
|
隔行扫描场格式的偶数场(又名场 2)的垂直同步长度(以行为单位)。对于逐行扫描格式,必须为 0。 |
__u32 |
|
隔行扫描场格式的偶数场(又名场 2)的垂直后沿(以行为单位)。对于逐行扫描格式,必须为 0。 |
__u32 |
|
此格式所属的视频标准。这将由驱动程序填充。应用程序必须将其设置为 0。有关标准列表,请参阅 DV BT 时序标准。 |
__u32 |
|
提供有关格式的更多信息的多个标志。有关标志的说明,请参阅 DV BT 时序标志。 |
struct |
|
如果像素不是正方形,则图片宽高比。仅当设置了 |
__u8 |
|
根据 CEA-861 标准的视频识别代码。仅当设置了 |
__u8 |
|
根据 HDMI 标准的视频识别代码。仅当设置了 |
__u8 |
|
保留供将来扩展使用。驱动程序和应用程序必须将数组设置为零。 |
-
type v4l2_dv_timings¶
__u32 |
|
DV 时序类型 中列出的 DV 时序类型。 |
union { |
(匿名) |
|
struct |
|
由 BT.656/1120 规范定义的时序 |
__u32 |
|
|
} |
时序类型 |
值 |
描述 |
|
0 |
BT.656/1120 时序 |
时序标准 |
描述 |
|
时序遵循 CEA-861 数字电视配置文件标准 |
|
时序遵循 VESA 离散监视器时序标准 |
|
时序遵循 VESA 协调视频时序标准 |
|
时序遵循 VESA 通用时序公式标准 |
|
时序遵循 SDI 时序标准。此格式中根本没有水平同步/前沿。总消隐时序必须仅在 hsync 或 vsync 字段中设置。 |
标志 |
描述 |
|
CVT/GTF 特有:时序使用缩减消隐 (CVT) 或“辅助 GTF”曲线 (GTF)。在这两种情况下,水平和/或垂直消隐间隔都会缩短,从而在相同的带宽上实现更高的分辨率。这是一个只读标志,应用程序不得设置此标志。 |
|
CEA-861 特有:为帧速率为 6 的倍数的 CEA-861 格式设置。这些格式可以选择以 1 / 1.001 的速度播放,以兼容使用 29.97 帧/秒的帧速率的基于 60 Hz 的标准,例如 NTSC 和 PAL-M。如果发射器无法生成此类频率,则该标志也将被清除。这是一个只读标志,应用程序不得设置此标志。 |
|
CEA-861 特有:仅对设置了 如果应用程序为发射器设置此标志,则用于设置发射器的像素时钟将除以 1.001,使其与 NTSC 帧速率兼容。如果发射器无法生成此类频率,则该标志将被清除。 如果视频接收器检测到格式使用降低的帧速率,则它将设置此标志以向应用程序发出信号。 |
|
特定于隔行格式:如果设置此标志,则场 1(又名奇数场)的垂直前沿实际上长半行,而场 2(又名偶数场)的垂直后沿实际上短半行,因此每个场都具有完全相同数量的半行。是否可以检测或使用半行取决于硬件。 |
|
如果设置此标志,则表示这是一个消费电子 (CE) 视频格式。此类格式与其他格式(通常称为 IT 格式)的不同之处在于,如果使用 R'G'B' 编码,则默认情况下,R'G'B' 值使用有限范围(即 16-235),而不是全范围(即 0-255)。CEA-861 中定义的所有格式(640x480p59.94 格式除外)都是 CE 格式。 |
|
某些格式(如 SMPTE-125M)具有总高度为奇数的隔行信号。对于这些格式,如果设置了此标志,则第一场具有额外的行。否则,则是第二场。 |
|
如果设置此标志,则 picture_aspect 字段有效。否则,假设像素是正方形的,因此图像宽高比与宽度与高度的比率相同。 |
|
如果设置此标志,则 cea861_vic 字段有效,并包含符合 CEA-861 标准的视频识别码。 |
|
如果设置此标志,则 hdmi_vic 字段有效,并包含符合 HDMI 标准的视频识别码(HDMI 供应商特定信息帧)。 |
|
CEA-861 特有:仅对视频接收器有效,此标志由发射器清除。如果设置此标志,则硬件可以检测常规帧速率和降低了 1000/1001 的帧速率之间的差异。例如:60 与 59.94 Hz,30 与 29.97 Hz 或 24 与 23.976 Hz。 |