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. 引數¶
fdopen()返回的檔案描述符。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
找到了時序,但是它們超出了硬體功能的範圍。