7.42. ioctl VIDIOC_G_TUNER, VIDIOC_S_TUNER

7.42.1. 名称

VIDIOC_G_TUNER - VIDIOC_S_TUNER - 获取或设置调谐器属性

7.42.2. 概要

VIDIOC_G_TUNER

int ioctl(int fd, VIDIOC_G_TUNER, struct v4l2_tuner *argp)

VIDIOC_S_TUNER

int ioctl(int fd, VIDIOC_S_TUNER, const struct v4l2_tuner *argp)

7.42.3. 参数

fd

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

argp

指向结构体 v4l2_tuner 的指针。

7.42.4. 描述

要查询调谐器的属性,应用程序初始化 index 字段并将结构体 v4l2_tunerreserved 数组置零,然后使用指向此结构的指针调用 VIDIOC_G_TUNER ioctl。驱动程序填充结构的其余部分,或者当索引超出范围时返回 EINVAL 错误代码。要枚举所有调谐器,应用程序应从索引零开始,每次递增一,直到驱动程序返回 EINVAL

调谐器有两个可写的属性,即音频模式和无线电频率。要更改音频模式,应用程序初始化 indexaudmodereserved 字段,然后调用 VIDIOC_S_TUNER ioctl。这不会更改当前调谐器,当前调谐器由当前的视频输入决定。如果请求的模式无效或不受支持,驱动程序可以选择不同的音频模式。由于这是一个只写 ioctl,它不会返回实际选择的音频模式。

SDR 特定调谐器类型为 V4L2_TUNER_SDRV4L2_TUNER_RF。对于 SDR 设备,必须将 audmode 字段初始化为零。在此上下文中,“调谐器”是指 SDR 接收器。

要更改无线电频率,可以使用 VIDIOC_S_FREQUENCY ioctl。

类型 v4l2_tuner
结构体 v4l2_tuner

__u32

index

标识调谐器,由应用程序设置。

__u8

name[32]

调谐器的名称,一个以 NULL 结尾的 ASCII 字符串。

此信息供用户使用。

__u32

type

调谐器的类型,请参阅 v4l2_tuner_type

__u32

capability

调谐器功能标志,请参阅 调谐器和调制器功能标志。音频标志表示解码音频子节目的能力。它们不会改变,例如,随着当前视频标准的变化。

当结构体引用无线电调谐器时,不能使用 V4L2_TUNER_CAP_LANG1V4L2_TUNER_CAP_LANG2V4L2_TUNER_CAP_NORM 标志。

如果支持多个频段,则 capability 是每个结构体 v4l2_frequency_band 的所有 capability 字段的并集。

__u32

rangelow

最低可调频率,单位为 62.5 kHz,或者如果设置了 capability 标志 V4L2_TUNER_CAP_LOW,则单位为 62.5 Hz,或者如果设置了 capability 标志 V4L2_TUNER_CAP_1HZ,则单位为 1 Hz。如果支持多个频段,则 rangelow 是所有频段中的最低频率。

__u32

rangehigh

最高可调频率,单位为 62.5 kHz,或者如果设置了 capability 标志 V4L2_TUNER_CAP_LOW,则单位为 62.5 Hz,或者如果设置了 capability 标志 V4L2_TUNER_CAP_1HZ,则单位为 1 Hz。如果支持多个频段,则 rangehigh 是所有频段中的最高频率。

__u32

rxsubchans

某些调谐器或音频解码器可以通过分析音频载波、导频音或其他指示器来确定接收到的音频子节目。为了传递此信息,驱动程序在此字段中设置 调谐器音频接收标志 中定义的标志。例如

V4L2_TUNER_SUB_MONO

接收单声道音频

STEREO | SAP

接收立体声音频和辅助音频节目

MONO | STEREO

接收单声道或立体声音频,硬件无法区分

LANG1 | LANG2

接收双语音频

MONO | STEREO | LANG1 | LANG2

接收单声道、立体声或双语音频

capability 字段中清除 V4L2_TUNER_CAP_STEREO_LANG1_LANG2_SAP 标志时,此处不得设置相应的 V4L2_TUNER_SUB_ 标志。

仅当这是当前视频输入的调谐器时,或者当结构体引用无线电调谐器时,此字段才有效。

__u32

audmode

选择的音频模式,有关有效值,请参阅 调谐器音频模式。音频模式不影响音频子节目检测,并且像用户控件 一样,它不会自动更改,除非请求的模式无效或不受支持。有关当选定和接收到的音频节目不匹配时可能出现的结果,请参阅 调谐器音频矩阵

目前,这是应用程序可以更改的结构体 v4l2_tuner 的唯一字段。

__u32

signal

如果已知,则为信号强度。

范围从 0 到 65535。值越高表示信号越好。

__s32

afc

自动频率控制。

afc 值为负时,频率太低,当为正时,频率太高。

__u32

reserved[4]

保留用于未来扩展。

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

类型 v4l2_tuner_type
枚举 v4l2_tuner_type

V4L2_TUNER_RADIO

1

调谐器支持无线电

V4L2_TUNER_ANALOG_TV

2

调谐器支持模拟电视

V4L2_TUNER_SDR

4

调谐器控制软件数字无线电 (SDR) 的 A/D 和/或 D/A 模块

V4L2_TUNER_RF

5

调谐器控制软件数字无线电 (SDR) 的 RF 部分

调谐器和调制器功能标志

V4L2_TUNER_CAP_LOW

0x0001

设置后,调谐频率以 62.5 Hz 而不是 62.5 kHz 为单位表示。

V4L2_TUNER_CAP_NORM

0x0002

这是一个多标准调谐器;视频标准可以或必须切换。(例如,B/G PAL 调谐器通常不被认为是多标准的,因为视频标准是从频段自动确定的。)支持的视频标准集可从指向此调谐器的 v4l2_input 结构体中获取,有关详细信息,请参阅 ioctl ioctl VIDIOC_ENUMINPUT 的描述。只有 V4L2_TUNER_ANALOG_TV 调谐器才具有此功能。

V4L2_TUNER_CAP_HWSEEK_BOUNDED

0x0004

如果设置,则此调谐器支持硬件搜索功能,当搜索达到频率范围的末尾时,搜索会停止。

V4L2_TUNER_CAP_HWSEEK_WRAP

0x0008

如果设置,则此调谐器支持硬件搜索功能,当搜索达到频率范围的末尾时,搜索会环绕。

V4L2_TUNER_CAP_STEREO

0x0010

支持立体声音频接收。

V4L2_TUNER_CAP_LANG1

0x0040

支持双语音频节目的主要语言接收。双语音频是双通道系统的一项功能,在主音频载波上以单声道传输主要语言,在第二个载波上以单声道传输辅助语言。只有 V4L2_TUNER_ANALOG_TV 调谐器才具有此功能。

V4L2_TUNER_CAP_LANG2

0x0020

支持双语音频节目的辅助语言接收。只有 V4L2_TUNER_ANALOG_TV 调谐器才具有此功能。

V4L2_TUNER_CAP_SAP

0x0020

支持辅助音频节目接收。这是 BTSC 系统的一个功能,该系统伴随 NTSC 视频标准。有两个音频载波可用于单声道或立体声传输主要语言,以及一个独立的第三个载波用于单声道辅助语言。只有 V4L2_TUNER_ANALOG_TV 调谐器才具有此功能。

注意

V4L2_TUNER_CAP_LANG2V4L2_TUNER_CAP_SAP 标志是同义词。V4L2_TUNER_CAP_SAP 在调谐器支持 V4L2_STD_NTSC_M 视频标准时适用。

V4L2_TUNER_CAP_RDS

0x0080

支持 RDS 捕获。此功能仅对无线电调谐器有效。

V4L2_TUNER_CAP_RDS_BLOCK_IO

0x0100

RDS 数据作为未解析的 RDS 数据块传递。

V4L2_TUNER_CAP_RDS_CONTROLS

0x0200

RDS 数据由硬件解析并通过控件设置。

V4L2_TUNER_CAP_FREQ_BANDS

0x0400

可以使用 ioctl VIDIOC_ENUM_FREQ_BANDS ioctl 来枚举可用的频段。

V4L2_TUNER_CAP_HWSEEK_PROG_LIM

0x0800

使用硬件搜索功能时要搜索的范围是可编程的,有关详细信息,请参阅 ioctl VIDIOC_S_HW_FREQ_SEEK

V4L2_TUNER_CAP_1HZ

0x1000

如果设置,则调谐频率以 1 Hz 为单位表示,而不是以 62.5 kHz 为单位表示。

调谐器音频接收标志

V4L2_TUNER_SUB_MONO

0x0001

调谐器接收单声道音频信号。

V4L2_TUNER_SUB_STEREO

0x0002

调谐器接收立体声音频信号。

V4L2_TUNER_SUB_LANG1

0x0008

调谐器接收双语音频信号的主要语言。当当前视频标准为 V4L2_STD_NTSC_M 时,驱动程序必须清除此标志。

V4L2_TUNER_SUB_LANG2

0x0004

调谐器接收双语音频信号的辅助语言(或第二个音频节目)。

V4L2_TUNER_SUB_SAP

0x0004

调谐器接收辅助音频节目。

注意

V4L2_TUNER_SUB_LANG2V4L2_TUNER_SUB_SAP 标志是同义词。当当前视频标准为 V4L2_STD_NTSC_M 时,适用 V4L2_TUNER_SUB_SAP 标志。

V4L2_TUNER_SUB_RDS

0x0010

调谐器接收 RDS 通道。

调谐器音频模式

V4L2_TUNER_MODE_MONO

0

播放单声道音频。当调谐器接收到立体声信号时,这是左右声道的下混。当调谐器接收到双语或 SAP 信号时,此模式选择主要语言。

V4L2_TUNER_MODE_STEREO

1

播放立体声音频。当调谐器接收到双语音频时,它可能会在左右声道上播放不同的语言,或者在两个声道上播放主要语言。

在这种模式下播放不同的语言已被弃用。新的驱动程序应仅在 MODE_LANG1_LANG2 中执行此操作。

当调谐器未接收到立体声信号或不支持立体声接收时,驱动程序应回退到 MODE_MONO

V4L2_TUNER_MODE_LANG1

3

播放主要语言,单声道或立体声。只有 V4L2_TUNER_ANALOG_TV 调谐器支持此模式。

V4L2_TUNER_MODE_LANG2

2

播放辅助语言,单声道。当调谐器未接收到双语音频或 SAP,或者不支持其接收时,驱动程序应回退到单声道或立体声模式。只有 V4L2_TUNER_ANALOG_TV 调谐器支持此模式。

V4L2_TUNER_MODE_SAP

2

播放辅助音频节目。当调谐器未接收到双语音频或 SAP,或者不支持其接收时,驱动程序应回退到单声道或立体声模式。只有 V4L2_TUNER_ANALOG_TV 调谐器支持此模式。

注意

V4L2_TUNER_MODE_LANG2V4L2_TUNER_MODE_SAP 是同义词。

V4L2_TUNER_MODE_LANG1_LANG2

4

在左声道播放主要语言,在右声道播放辅助语言。当调谐器未接收到双语音频或 SAP 时,应回退到 MODE_LANG1MODE_MONO。只有 V4L2_TUNER_ANALOG_TV 调谐器支持此模式。

调谐器音频矩阵

选定的 V4L2_TUNER_MODE_

接收到的 V4L2_TUNER_SUB_

单声道

立体声

语言 1

语言 2 = SAP

语言 1_语言 2[1]

单声道

单声道

单声道/单声道

单声道

单声道

单声道/单声道

单声道 | SAP

单声道

单声道/单声道

单声道

SAP

单声道/SAP(首选)或单声道/单声道

立体声

L+R

L/R

立体声 L/R(首选)或单声道 L+R

立体声 L/R(首选)或单声道 L+R

L/R(首选)或 L+R/L+R

STEREO | SAP

L+R

L/R

立体声 L/R(首选)或单声道 L+R

SAP

L+R/SAP(首选)或 L/R 或 L+R/L+R

LANG1 | LANG2

语言 1

语言 1/语言 2(已弃用[2])或语言 1/语言 1

语言 1

语言 2

语言 1/语言 2(首选)或语言 1/语言 1

7.42.5. 返回值

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

EINVAL

v4l2_tuner 结构体的 index 超出范围。