7.17. ioctl VIDIOC_ENUM_FREQ_BANDS

7.17.1. 名称

VIDIOC_ENUM_FREQ_BANDS - 枚举支持的频段

7.17.2. 概要

VIDIOC_ENUM_FREQ_BANDS

int ioctl(int fd, VIDIOC_ENUM_FREQ_BANDS, struct v4l2_frequency_band *argp)

7.17.3. 参数

fd

open() 返回的文件描述符。

argp

指向 struct v4l2_frequency_band 的指针。

7.17.4. 描述

枚举调谐器或调制器支持的频段。为此,应用程序初始化 struct v4l2_frequency_bandtunertypeindex 字段,并将 reserved 数组清零,然后使用指向该结构的指针调用 ioctl VIDIOC_ENUM_FREQ_BANDS ioctl。

如果设置了相应调谐器/调制器的 V4L2_TUNER_CAP_FREQ_BANDS 功能,则支持此 ioctl。

type v4l2_frequency_band
struct v4l2_frequency_band

__u32

tuner

调谐器或调制器的索引号。这与 struct v4l2_input tuner 字段和 struct v4l2_tuner index 字段中的值相同,或与 struct v4l2_output modulator 字段和 struct v4l2_modulator index 字段中的值相同。

__u32

type

调谐器类型。这与 struct v4l2_tuner type 字段中的值相同。对于 /dev/radioX 设备节点,该类型必须设置为 V4L2_TUNER_RADIO,对于所有其他设备节点,该类型必须设置为 V4L2_TUNER_ANALOG_TV。对于调制器,请将此字段设置为 V4L2_TUNER_RADIO (目前仅支持无线电调制器)。请参阅 v4l2_tuner_type

__u32

index

标识频段,由应用程序设置。

__u32

capability

此频段的调谐器/调制器功能标志,请参阅 调谐器和调制器功能标志V4L2_TUNER_CAP_LOWV4L2_TUNER_CAP_1HZ 功能对于所选调谐器/调制器的所有频段必须相同。因此,要么所有频段都设置了该功能,要么所有频段都没有该功能。

__u32

rangelow

此频段的最低可调频率,以 62.5 kHz 为单位,如果设置了 capability 标志 V4L2_TUNER_CAP_LOW,则以 62.5 Hz 为单位。如果设置了 capability 标志 V4L2_TUNER_CAP_1HZ,则使用 1 Hz 单位。

__u32

rangehigh

此频段的最高可调频率,以 62.5 kHz 为单位,如果设置了 capability 标志 V4L2_TUNER_CAP_LOW,则以 62.5 Hz 为单位。如果设置了 capability 标志 V4L2_TUNER_CAP_1HZ,则使用 1 Hz 单位。

__u32

modulation

此频段支持的调制系统。请参阅 频段调制系统

注意

目前,每个频段仅支持一个调制系统。如果可能存在多种调制系统,则需要做更多工作。如果您需要此类功能,请联系 linux-media 邮件列表 (https://linuxtv.org/lists.php)。

__u32

reserved[9]

保留供未来扩展使用。

应用程序和驱动程序必须将数组设置为零。

频段调制系统

V4L2_BAND_MODULATION_VSB

0x02

残留边带调制,用于模拟电视。

V4L2_BAND_MODULATION_FM

0x04

调频,通常用于模拟无线电。

V4L2_BAND_MODULATION_AM

0x08

调幅,通常用于模拟无线电。

7.17.5. 返回值

成功时返回 0,错误时返回 -1,并适当设置 errno 变量。通用错误代码在 通用错误代码 章节中描述。

EINVAL

tunerindex 超出范围,或者 type 字段错误。