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

指向 struct v4l2_dv_timings 的指標。

7.50.4. 描述

硬體可能能夠自動檢測當前的 DV 時序,類似於感應影片標準。為此,應用程式呼叫 ioctl VIDIOC_QUERY_DV_TIMINGS,並傳入指向 struct 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

找到了時序,但是它們超出了硬體功能的範圍。