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-EVESA 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
struct v4l2_bt_timings

__u32

width

活動影片的寬度(以畫素為單位)。

__u32

height

活動影片幀的高度(以行數為單位)。因此,對於隔行掃描格式,每個欄位中活動影片的高度為 height/2。

__u32

interlaced

逐行掃描 (V4L2_DV_PROGRESSIVE) 或隔行掃描 (V4L2_DV_INTERLACED)。

__u32

polarities

這是一個位掩碼,用於定義同步訊號的極性。位 0 (V4L2_DV_VSYNC_POS_POL) 用於垂直同步極性,位 1 (V4L2_DV_HSYNC_POS_POL) 用於水平同步極性。如果設定了該位 (1),則為正極性;如果清除了該位 (0),則為負極性。

__u64

pixelclock

畫素時鐘,以 Hz 為單位。例如,74.25MHz->74250000

__u32

hfrontporch

水平前沿,以畫素為單位

__u32

hsync

水平同步長度,以畫素為單位

__u32

hbackporch

水平後沿,以畫素為單位

__u32

vfrontporch

垂直前沿,以行數為單位。對於隔行掃描格式,這指的是奇數場(也稱為場 1)。

__u32

vsync

垂直同步長度,以行數為單位。對於隔行掃描格式,這指的是奇數場(也稱為場 1)。

__u32

vbackporch

垂直後沿,以行數為單位。對於隔行掃描格式,這指的是奇數場(也稱為場 1)。

__u32

il_vfrontporch

隔行掃描欄位格式的偶數場(也稱為場 2)的垂直前沿,以行數為單位。對於逐行掃描格式,必須為 0。

__u32

il_vsync

隔行掃描欄位格式的偶數場(也稱為場 2)的垂直同步長度,以行數為單位。對於逐行掃描格式,必須為 0。

__u32

il_vbackporch

隔行掃描欄位格式的偶數場(也稱為場 2)的垂直後沿,以行數為單位。對於逐行掃描格式,必須為 0。

__u32

standards

此格式所屬的影片標準。這將由驅動程式填充。應用程式必須將其設定為 0。有關標準的列表,請參見 DV BT 時序標準

__u32

flags

幾個標誌,提供有關格式的更多資訊。有關標誌的說明,請參見 DV BT 時序標誌

struct v4l2_fract

picture_aspect

如果畫素不是正方形,則為影像寬高比。僅當設定了 V4L2_DV_FL_HAS_PICTURE_ASPECT 標誌時才有效。

__u8

cea861_vic

根據 CEA-861 標準的影片識別碼。僅當設定了 V4L2_DV_FL_HAS_CEA861_VIC 標誌時才有效。

__u8

hdmi_vic

根據 HDMI 標準的影片識別碼。僅當設定了 V4L2_DV_FL_HAS_HDMI_VIC 標誌時才有效。

__u8

reserved[46]

保留供將來擴充套件使用。驅動程式和應用程式必須將陣列設定為零。

type v4l2_dv_timings
struct v4l2_dv_timings

__u32

type

DV 時序的型別,如 DV 時序型別 中列出的。

union {

(匿名)

struct v4l2_bt_timings

bt

由 BT.656/1120 規範定義的時序

__u32

reserved[32]

}

DV 時序型別

時序型別

描述

V4L2_DV_BT_656_1120

0

BT.656/1120 時序

DV BT 時序標準

時序標準

描述

V4L2_DV_BT_STD_CEA861

時序遵循 CEA-861 數字電視配置檔案標準

V4L2_DV_BT_STD_DMT

時序遵循 VESA 離散監視器時序標準

V4L2_DV_BT_STD_CVT

時序遵循 VESA 協調影片時序標準

V4L2_DV_BT_STD_GTF

時序遵循 VESA 廣義時序公式標準

V4L2_DV_BT_STD_SDI

時序遵循 SDI 時序標準。此格式中根本沒有水平同步/前沿。總消隱時序必須僅在 hsync 或 vsync 欄位中設定。

DV BT 時序標誌

標誌

描述

V4L2_DV_FL_REDUCED_BLANKING

CVT/GTF 特定的:時序使用減少的消隱 (CVT) 或“輔助 GTF”曲線 (GTF)。在這兩種情況下,水平和/或垂直消隱間隔都會減少,從而允許在相同的頻寬上獲得更高的解析度。這是一個只讀標誌,應用程式不得設定此標誌。

V4L2_DV_FL_CAN_REDUCE_FPS

CEA-861 特定的:為幀速率為 6 的倍數的 CEA-861 格式設定。這些格式可以選擇以 1 / 1.001 的速度播放,以與基於 60 Hz 的標準(如 NTSC 和 PAL-M,它們使用的幀速率為 29.97 幀/秒)相容。如果發射器無法生成此類頻率,則該標誌也會被清除。這是一個只讀標誌,應用程式不得設定此標誌。

V4L2_DV_FL_REDUCED_FPS

CEA-861 特定的:僅對設定了 V4L2_DV_FL_CAN_DETECT_REDUCED_FPS 的影片發射器或影片接收器有效。否則,將清除此標誌。它也僅對設定了 V4L2_DV_FL_CAN_REDUCE_FPS 標誌的格式有效,對於其他格式,該標誌將由驅動程式清除。

如果應用程式為發射器設定此標誌,則用於設定發射器的畫素時鐘將除以 1.001,以使其與 NTSC 幀速率相容。如果發射器無法生成此類頻率,則該標誌將被清除。

如果影片接收器檢測到格式使用降低的幀速率,則它將設定此標誌以嚮應用程式發出訊號。

V4L2_DV_FL_HALF_LINE

特定於隔行掃描格式:如果設定,則場 1(也稱為奇數場)的垂直前沿實際上長半行,並且場 2(也稱為偶數場)的垂直後沿實際上短半行,因此每個場都具有完全相同數量的半行。是否可以檢測或使用半行取決於硬體。

V4L2_DV_FL_IS_CE_VIDEO

如果設定,則這是消費電子 (CE) 影片格式。此類格式與其他格式(通常稱為 IT 格式)的不同之處在於,如果使用 R'G'B' 編碼,則預設情況下 R'G'B' 值使用有限範圍(即 16-235)而不是全範圍(即 0-255)。CEA-861 中定義的所有格式(640x480p59.94 格式除外)都是 CE 格式。

V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE

某些格式(如 SMPTE-125M)具有總高度為奇數的隔行掃描訊號。對於這些格式,如果設定了此標誌,則第一場具有額外的行。否則,它是第二場。

V4L2_DV_FL_HAS_PICTURE_ASPECT

如果設定,則 picture_aspect 欄位有效。否則,假定畫素是正方形,因此影像寬高比與寬高比相同。

V4L2_DV_FL_HAS_CEA861_VIC

如果設定,則 cea861_vic 欄位有效,並且包含 CEA-861 標準的影片識別碼。

V4L2_DV_FL_HAS_HDMI_VIC

如果設定,則 hdmi_vic 欄位有效,並且包含 HDMI 標準的影片識別碼(HDMI 供應商特定資訊幀)。

V4L2_DV_FL_CAN_DETECT_REDUCED_FPS

CEA-861 特定的:僅對影片接收器有效,該標誌由發射器清除。如果設定,則硬體可以檢測常規幀速率和降低的 1000/1001 幀速率之間的差異。例如:60 vs 59.94 Hz、30 vs 29.97 Hz 或 24 vs 23.976 Hz。