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

指向 struct v4l2_standard 的指针。

7.20.4. 描述

要查询视频标准的属性,特别是自定义(驱动程序定义)的标准,应用程序需要初始化 struct 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 必须是唯一的。此输入或输出的任何其他枚举的 struct 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 不支持数字电视。另请参阅 https://linuxtv.org 上的 Linux DVB API。

#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

struct v4l2_standardindex 超出范围。

ENODATA

此输入或输出不支持标准视频时序。