1.4. 视频输入和输出

视频输入和输出是设备的物理连接器。这些可以是例如:射频连接器(天线/电缆)、CVBS(又名复合视频)、S-Video 和 RGB 连接器。摄像头传感器也被认为是视频输入。视频和 VBI 采集设备具有输入。视频和 VBI 输出设备具有输出,至少每个一个。无线电设备没有视频输入或输出。

要了解可用输入和输出的数量和属性,应用程序可以使用 ioctl VIDIOC_ENUMINPUTioctl VIDIOC_ENUMOUTPUT ioctl 分别进行枚举。由 ioctl VIDIOC_ENUMINPUT ioctl 返回的结构体 v4l2_input 也包含在查询当前视频输入时适用的信号状态信息。

VIDIOC_G_INPUTVIDIOC_G_OUTPUT ioctl 返回当前视频输入或输出的索引。要选择不同的输入或输出,应用程序调用 VIDIOC_S_INPUTVIDIOC_S_OUTPUT ioctl。当设备具有一个或多个输入时,驱动程序必须实现所有输入 ioctl;当设备具有一个或多个输出时,驱动程序必须实现所有输出 ioctl。

1.4.1. 示例:有关当前视频输入的信息

struct v4l2_input input;
int index;

if (-1 == ioctl(fd, VIDIOC_G_INPUT, &index)) {
    perror("VIDIOC_G_INPUT");
    exit(EXIT_FAILURE);
}

memset(&input, 0, sizeof(input));
input.index = index;

if (-1 == ioctl(fd, VIDIOC_ENUMINPUT, &input)) {
    perror("VIDIOC_ENUMINPUT");
    exit(EXIT_FAILURE);
}

printf("Current input: %s\\n", input.name);

1.4.2. 示例:切换到第一个视频输入

int index;

index = 0;

if (-1 == ioctl(fd, VIDIOC_S_INPUT, &index)) {
    perror("VIDIOC_S_INPUT");
    exit(EXIT_FAILURE);
}