1.4. 影片輸入和輸出¶
影片輸入和輸出是裝置的物理聯結器。這些聯結器可以是例如:射頻 (RF) 聯結器(天線/電纜)、CVBS(又稱複合影片)、S-Video 和 RGB 聯結器。攝像頭感測器也被視為影片輸入。影片和 VBI 採集裝置有輸入。影片和 VBI 輸出裝置有輸出,至少各一個。無線電裝置沒有影片輸入或輸出。
要了解可用輸入和輸出的數量及屬性,應用程式可以使用 ioctl VIDIOC_ENUMINPUT 和 ioctl VIDIOC_ENUMOUTPUT ioctl 分別列舉它們。ioctl VIDIOC_ENUMINPUT ioctl 返回的結構體 v4l2_input 還包含在查詢當前影片輸入時適用的訊號狀態資訊。
VIDIOC_G_INPUT 和 VIDIOC_G_OUTPUT ioctl 返回當前影片輸入或輸出的索引。要選擇不同的輸入或輸出,應用程式呼叫 VIDIOC_S_INPUT 和 VIDIOC_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);
}