7.18. ioctl VIDIOC_ENUMINPUT

7.18.1. 名称

VIDIOC_ENUMINPUT - 枚举视频输入

7.18.2. 概要

VIDIOC_ENUMINPUT

int ioctl(int fd, VIDIOC_ENUMINPUT, struct v4l2_input *argp)

7.18.3. 参数

fd

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

argp

指向 struct v4l2_input 的指针。

7.18.4. 描述

要查询视频输入的属性,应用程序需要初始化 struct v4l2_inputindex 字段,并使用指向此结构的指针调用 ioctl VIDIOC_ENUMINPUT。驱动程序会填充结构的其余部分,或者当索引超出范围时返回 EINVAL 错误代码。要枚举所有输入,应用程序应从索引零开始,每次递增一,直到驱动程序返回 EINVAL

类型 v4l2_input
struct v4l2_input

__u32

index

标识输入,由应用程序设置。

__u8

name[32]

视频输入的名称,一个以 NULL 结尾的 ASCII 字符串,例如:“Vin (复合 2)”。此信息供用户使用,最好是设备本身的连接器标签。

__u32

type

输入类型,请参阅 输入类型

__u32

audioset

驱动程序最多可以枚举 32 个视频和音频输入。如果这是当前选择的视频输入,则此字段显示哪些音频输入可作为音频源选择。它是一个位掩码。LSB 对应于音频输入 0,MSB 对应于输入 31。可以设置任意数量的位,或者不设置任何位。

当驱动程序不枚举音频输入时,不得设置任何位。应用程序不应将其解释为缺少音频支持。一些驱动程序会自动选择音频源,并且不枚举它们,因为无论如何都没有选择。

有关音频输入以及如何选择当前输入的详细信息,请参阅 音频输入和输出

__u32

tuner

捕获设备可以有零个或多个调谐器(RF 解调器)。当 type 设置为 V4L2_INPUT_TYPE_TUNER 时,这是一个 RF 连接器,此字段标识调谐器。它对应于 struct v4l2_tuner 字段 index。有关调谐器的详细信息,请参阅 调谐器和调制器

v4l2_std_id

std

每个视频输入支持一种或多种不同的视频标准。此字段是所有受支持标准的集合。有关视频标准以及如何切换的详细信息,请参阅 视频标准

__u32

status

此字段提供有关输入的状态信息。有关标志,请参阅 输入状态标志。除了传感器方向位之外,status 仅在当前输入时有效。

__u32

capabilities

此字段提供输入的功能。有关标志,请参阅 输入功能

__u32

reserved[3]

保留供将来扩展使用。驱动程序必须将数组设置为零。

输入类型

V4L2_INPUT_TYPE_TUNER

1

此输入使用调谐器(RF 解调器)。

V4L2_INPUT_TYPE_CAMERA

2

任何非调谐器视频输入,例如复合视频、S-视频、HDMI、摄像头传感器。命名为 _TYPE_CAMERA 是历史性的,今天我们会将其称为 _TYPE_VIDEO

V4L2_INPUT_TYPE_TOUCH

3

此输入是用于捕获原始触摸数据的触摸设备。

输入状态标志

通用

V4L2_IN_ST_NO_POWER

0x00000001

连接的设备已关闭。

V4L2_IN_ST_NO_SIGNAL

0x00000002

V4L2_IN_ST_NO_COLOR

0x00000004

硬件支持颜色解码,但未检测到信号中的颜色调制。

传感器方向

V4L2_IN_ST_HFLIP

0x00000010

输入连接到产生水平翻转信号的设备,并且在将信号传递给用户空间之前不会对此进行校正。

V4L2_IN_ST_VFLIP

0x00000020

输入连接到产生垂直翻转信号的设备,并且在将信号传递给用户空间之前不会对此进行校正。.. note:: 180 度旋转与 HFLIP | VFLIP 相同

模拟视频

V4L2_IN_ST_NO_H_LOCK

0x00000100

没有水平同步锁定。

V4L2_IN_ST_COLOR_KILL

0x00000200

当颜色消除电路检测到没有颜色调制时,会自动禁用颜色解码。当设置此标志时,颜色消除电路已启用并且已关闭颜色解码。

V4L2_IN_ST_NO_V_LOCK

0x00000400

没有垂直同步锁定。

V4L2_IN_ST_NO_STD_LOCK

0x00000800

如果组件自动检测格式,则没有标准格式锁定。

数字视频

V4L2_IN_ST_NO_SYNC

0x00010000

没有同步锁定。

V4L2_IN_ST_NO_EQU

0x00020000

没有均衡器锁定。

V4L2_IN_ST_NO_CARRIER

0x00040000

载波恢复失败。

录像机和机顶盒

V4L2_IN_ST_MACROVISION

0x01000000

Macrovision 是一种模拟复制防止系统,会破坏视频信号以混淆录像机。当设置此标志时,表示已检测到 Macrovision。

V4L2_IN_ST_NO_ACCESS

0x02000000

条件访问被拒绝。

V4L2_IN_ST_VTR

0x04000000

VTR 时间常数。[?]

输入功能

V4L2_IN_CAP_DV_TIMINGS

0x00000002

此输入支持使用 VIDIOC_S_DV_TIMINGS 设置视频时序。

V4L2_IN_CAP_STD

0x00000004

此输入支持使用 VIDIOC_S_STD 设置电视标准。

V4L2_IN_CAP_NATIVE_SIZE

0x00000008

此输入支持使用 V4L2_SEL_TGT_NATIVE_SIZE 选择目标来设置本机大小,请参阅 通用选择定义

7.18.5. 返回值

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

EINVAL

struct v4l2_input index 超出范围。