7.20. ioctl VIDIOC_ENUMSTD, VIDIOC_SUBDEV_ENUMSTD

7.20.1. 名稱

VIDIOC_ENUMSTD - VIDIOC_SUBDEV_ENUMSTD - 列舉支援的影片標準

7.20.2. 概要

VIDIOC_ENUMSTD

int ioctl(int fd, VIDIOC_ENUMSTD, struct v4l2_standard *argp)

VIDIOC_SUBDEV_ENUMSTD

int ioctl(int fd, VIDIOC_SUBDEV_ENUMSTD, struct v4l2_standard *argp)

7.20.3. 引數

fd

open() 返回的檔案描述符。

argp

指向結構體 v4l2_standard 的指標。

7.20.4. 描述

要查詢影片標準的屬性,尤其是自定義(驅動程式定義)標準,應用程式初始化結構體 v4l2_standardindex 欄位,並使用指向此結構的指標呼叫 ioctl VIDIOC_ENUMSTD, VIDIOC_SUBDEV_ENUMSTD ioctl。當索引超出範圍時,驅動程式會填充結構的其餘部分或返回 EINVAL 錯誤程式碼。 要列舉所有標準,應用程式應從索引零開始,每次遞增一,直到驅動程式返回 EINVAL。 驅動程式可以在切換影片輸入或輸出後列舉一組不同的標準。[1]

type v4l2_standard
struct v4l2_standard

__u32

index

影片標準的編號,由應用程式設定。

v4l2_std_id

id

此欄位中的位標識標準為 typedef v4l2_std_id 中列出的常用標準之一,或者如果位 32 到 63 被設定為自定義標準。 如果硬體無法區分這些標準,則可以設定多個位,但是單獨的索引並不表示相反的情況。 id 必須是唯一的。 無論如何,此輸入或輸出的其他列舉結構體 v4l2_standard 結構都不能包含相同的位集。

__u8

name[24]

標準的名稱,以 NUL 結尾的 ASCII 字串,例如:“PAL-B/G”,“NTSC Japan”。 此資訊供使用者使用。

struct v4l2_fract

frameperiod

幀週期(非場週期)是分子/分母。 例如,M/NTSC 的幀週期為 1001 / 30000 秒。

__u32

framelines

每幀的總行數,包括消隱,例如 B/PAL 為 625。

__u32

reserved[4]

保留用於未來擴充套件。 驅動程式必須將陣列設定為零。

type v4l2_fract
struct v4l2_fract

__u32

numerator

__u32

denominator

typedef v4l2_std_id

__u64

v4l2_std_id

此型別是一個集合,每位代表另一個影片標準,如下面和 影片標準(基於 itu470) 中列出。 最高有效 32 位保留給自定義(驅動程式定義)影片標準。

#define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
#define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
#define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
#define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
#define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
#define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
#define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
#define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)

#define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
#define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
#define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
#define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)

V4L2_STD_PAL_60 是一種混合標準,具有 525 行,60 Hz 重新整理率和 4.43 MHz 彩色副載波的 PAL 彩色調製。 一些 PAL 錄影機可以在此模式下播放 NTSC 磁帶,以便在 50/60 Hz 不可知 PAL 電視上顯示。

#define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)
#define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)
#define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)

V4L2_STD_NTSC_443 是一種混合標準,具有 525 行,60 Hz 重新整理率和 4.43 MHz 彩色副載波的 NTSC 彩色調製。

#define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)

#define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
#define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
#define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
#define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
#define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
#define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
#define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
#define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)

/* ATSC/HDTV */
#define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
#define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)

V4L2_STD_ATSC_8_VSBV4L2_STD_ATSC_16_VSB 是美國地面數字電視標準。 目前,V4L2 API 不支援數字電視。 另請參閱 Linux DVB API,網址為 https://linuxtv.org

#define V4L2_STD_PAL_BG         (V4L2_STD_PAL_B         |
                 V4L2_STD_PAL_B1        |
                 V4L2_STD_PAL_G)
#define V4L2_STD_B              (V4L2_STD_PAL_B         |
                 V4L2_STD_PAL_B1        |
                 V4L2_STD_SECAM_B)
#define V4L2_STD_GH             (V4L2_STD_PAL_G         |
                 V4L2_STD_PAL_H         |
                 V4L2_STD_SECAM_G       |
                 V4L2_STD_SECAM_H)
#define V4L2_STD_PAL_DK         (V4L2_STD_PAL_D         |
                 V4L2_STD_PAL_D1        |
                 V4L2_STD_PAL_K)
#define V4L2_STD_PAL            (V4L2_STD_PAL_BG        |
                 V4L2_STD_PAL_DK        |
                 V4L2_STD_PAL_H         |
                 V4L2_STD_PAL_I)
#define V4L2_STD_NTSC           (V4L2_STD_NTSC_M        |
                 V4L2_STD_NTSC_M_JP     |
                 V4L2_STD_NTSC_M_KR)
#define V4L2_STD_MN             (V4L2_STD_PAL_M         |
                 V4L2_STD_PAL_N         |
                 V4L2_STD_PAL_Nc        |
                 V4L2_STD_NTSC)
#define V4L2_STD_SECAM_DK       (V4L2_STD_SECAM_D       |
                 V4L2_STD_SECAM_K       |
                 V4L2_STD_SECAM_K1)
#define V4L2_STD_DK             (V4L2_STD_PAL_DK        |
                 V4L2_STD_SECAM_DK)

#define V4L2_STD_SECAM          (V4L2_STD_SECAM_B       |
                 V4L2_STD_SECAM_G       |
                 V4L2_STD_SECAM_H       |
                 V4L2_STD_SECAM_DK      |
                 V4L2_STD_SECAM_L       |
                 V4L2_STD_SECAM_LC)

#define V4L2_STD_525_60         (V4L2_STD_PAL_M         |
                 V4L2_STD_PAL_60        |
                 V4L2_STD_NTSC          |
                 V4L2_STD_NTSC_443)
#define V4L2_STD_625_50         (V4L2_STD_PAL           |
                 V4L2_STD_PAL_N         |
                 V4L2_STD_PAL_Nc        |
                 V4L2_STD_SECAM)

#define V4L2_STD_UNKNOWN        0
#define V4L2_STD_ALL            (V4L2_STD_525_60        |
                 V4L2_STD_625_50)
影片標準(基於 ITU BT.470

特性

M/NTSC [2]

M/PAL

N/PAL [3]

B, B1, G/PAL

D, D1, K/PAL

H/PAL

I/PAL

B, G/SECAM

D, K/SECAM

K1/SECAM

L/SECAM

幀行

525

625

幀週期(秒)

1001/30000

1/25

色度副載波頻率(Hz)

3579545 ± 10

3579611.49 ± 10

4433618.75 ± 5

(3582056.25 ± 5)

4433618.75 ± 5

4433618.75 ± 1

fOR = 4406250 ± 2000,

fOB = 4250000 ± 2000

標稱射頻通道頻寬(MHz)

6

6

6

B: 7; B1, G: 8

8

8

8

8

8

8

8

聲音載波相對於視覺載波(MHz)

4.5

4.5

4.5

5.5 ± 0.001 [4] [5] [6] [7]

6.5 ± 0.001

5.5

5.9996 ± 0.0005

5.5 ± 0.001

6.5 ± 0.001

6.5

6.5 [8]

7.20.5. 返回值

成功時返回 0,錯誤時返回 -1,並且會適當地設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EINVAL

結構體 v4l2_standard index 超出範圍。

ENODATA

此輸入或輸出不支援標準影片時序。