7.50. ioctl VIDIOC_QUERY_DV_TIMINGS¶
7.50.1. 名称¶
VIDIOC_QUERY_DV_TIMINGS - VIDIOC_SUBDEV_QUERY_DV_TIMINGS - 感知当前输入接收到的 DV 预设
7.50.2. 概要¶
-
VIDIOC_QUERY_DV_TIMINGS¶
int ioctl(int fd, VIDIOC_QUERY_DV_TIMINGS, struct v4l2_dv_timings *argp)
-
VIDIOC_SUBDEV_QUERY_DV_TIMINGS¶
int ioctl(int fd, VIDIOC_SUBDEV_QUERY_DV_TIMINGS, struct v4l2_dv_timings *argp)
7.50.3. 参数¶
fd
由
open()
返回的文件描述符。argp
指向结构体
v4l2_dv_timings
的指针。
7.50.4. 描述¶
硬件可能能够自动检测当前的 DV 时序,类似于感知视频标准。为此,应用程序调用 ioctl VIDIOC_QUERY_DV_TIMINGS,并提供指向结构体 v4l2_dv_timings
的指针。一旦硬件检测到时序,它将填充时序结构。
注意
如果检测到新的时序,驱动程序不应自动切换时序。相反,驱动程序应发送 V4L2_EVENT_SOURCE_CHANGE
事件(如果它们支持此事件),并期望用户空间通过调用 ioctl VIDIOC_QUERY_DV_TIMINGS 来采取行动。原因是新的时序通常也意味着不同的缓冲区大小,并且您不能动态更改缓冲区大小。一般来说,接收到源更改事件的应用程序将必须调用 ioctl VIDIOC_QUERY_DV_TIMINGS,并且如果检测到的时序有效,它们将必须停止流式传输、设置新的时序、分配新的缓冲区并再次开始流式传输。
如果由于没有信号而无法检测到时序,则返回 ENOLINK。如果检测到信号,但信号不稳定且接收器无法锁定信号,则返回 ENOLCK
。如果接收器可以锁定信号,但格式不受支持(例如,因为像素时钟超出硬件功能的范围),则驱动程序会填充它可以找到的任何时序并返回 ERANGE
。在这种情况下,应用程序可以调用 ioctl VIDIOC_DV_TIMINGS_CAP, VIDIOC_SUBDEV_DV_TIMINGS_CAP,将找到的时序与硬件的功能进行比较,以便为用户提供更精确的反馈。
7.50.5. 返回值¶
成功时返回 0,失败时返回 -1,并适当设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- ENODATA
此输入或输出不支持数字视频时序。
- ENOLINK
由于没有找到信号,无法检测到任何时序。
- ENOLCK
信号不稳定,硬件无法锁定它。
- ERANGE
找到了时序,但它们超出了硬件功能的范围。