7.54. ioctl VIDIOC_S_HW_FREQ_SEEK

7.54.1. 名称

VIDIOC_S_HW_FREQ_SEEK - 执行硬件频率搜索

7.54.2. 概要

VIDIOC_S_HW_FREQ_SEEK

int ioctl(int fd, VIDIOC_S_HW_FREQ_SEEK, struct v4l2_hw_freq_seek *argp)

7.54.3. 参数

fd

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

argp

指向结构体 v4l2_hw_freq_seek 的指针。

7.54.4. 描述

从当前频率开始硬件频率搜索。为此,应用程序初始化结构体 v4l2_hw_freq_seektunertypeseek_upwardwrap_aroundspacingrangelowrangehigh 字段,并将 reserved 数组清零,然后使用指向此结构的指针调用 VIDIOC_S_HW_FREQ_SEEK ioctl。

可以将 rangelowrangehigh 字段设置为非零值,以告诉驱动程序搜索特定的频段。如果结构体 v4l2_tunercapability 字段设置了 V4L2_TUNER_CAP_HWSEEK_PROG_LIM 标志,则这些值必须落在 ioctl VIDIOC_ENUM_FREQ_BANDS 返回的频段之一内。如果未设置 V4L2_TUNER_CAP_HWSEEK_PROG_LIM 标志,则这些值必须与 ioctl VIDIOC_ENUM_FREQ_BANDS 返回的频段之一的值完全匹配。如果调谐器的当前频率不在选定的频段内,则在开始搜索之前,它将被钳位以适合该频段。

如果返回错误,则原始频率将被恢复。

如果设置了 V4L2_CAP_HW_FREQ_SEEK 功能,则支持此 ioctl。

如果从非阻塞文件句柄调用此 ioctl,则会返回 EAGAIN 错误代码,并且不进行搜索。

类型 v4l2_hw_freq_seek
结构体 v4l2_hw_freq_seek

__u32

tuner

调谐器索引号。这与结构体 v4l2_inputtuner 字段和结构体 v4l2_tunerindex 字段中的值相同。

__u32

type

调谐器类型。这与结构体 v4l2_tunertype 字段中的值相同。请参阅 v4l2_tuner_type

__u32

seek_upward

如果非零,则从当前频率向上搜索,否则向下搜索。

__u32

wrap_around

如果非零,则在到达频率范围的末尾时环绕,否则停止搜索。结构体 v4l2_tunercapability 字段会告诉您硬件支持的内容。

__u32

spacing

如果非零,则定义硬件搜索分辨率(以 Hz 为单位)。驱动程序选择设备支持的最接近的值。如果间距为零,则使用合理的默认值。

__u32

rangelow

如果非零,则要搜索的频段的最低可调谐频率(以 62.5 kHz 为单位),或者如果结构体 v4l2_tunercapability 字段设置了 V4L2_TUNER_CAP_LOW 标志,则以 62.5 Hz 为单位;或者如果结构体 v4l2_tunercapability 字段设置了 V4L2_TUNER_CAP_1HZ 标志,则以 1 Hz 为单位。如果 rangelow 为零,则使用合理的默认值。

__u32

rangehigh

如果非零,则要搜索的频段的最高可调谐频率(以 62.5 kHz 为单位),或者如果结构体 v4l2_tunercapability 字段设置了 V4L2_TUNER_CAP_LOW 标志,则以 62.5 Hz 为单位;或者如果结构体 v4l2_tunercapability 字段设置了 V4L2_TUNER_CAP_1HZ 标志,则以 1 Hz 为单位。如果 rangehigh 为零,则使用合理的默认值。

__u32

reserved[5]

保留以供将来扩展。应用程序必须将数组设置为零。

7.54.5. 返回值

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

EINVAL

tuner 索引超出范围,不支持 wrap_around 值,或者 typerangelowrangehigh 字段中的某个值错误。

EAGAIN

尝试在非阻塞模式下使用文件句柄调用 VIDIOC_S_HW_FREQ_SEEK

ENODATA

硬件搜索未找到任何频道。

EBUSY

另一个硬件搜索已经在进行中。