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 錯誤程式碼。
不允許在以只讀模式註冊的 subdev 裝置節點上呼叫 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 的速度播放,以與基於 60 Hz 的標準(如 NTSC 和 PAL-M,它們使用的幀速率為 29.97 幀/秒)相容。如果發射器無法生成此類頻率,則該標誌也會被清除。這是一個只讀標誌,應用程式不得設定此標誌。 |
|
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 vs 59.94 Hz、30 vs 29.97 Hz 或 24 vs 23.976 Hz。 |