6.2.3.1. DVB 视频设备¶
注意
不要在新驱动程序中使用!请参阅:通用说明
DVB 视频设备控制 DVB 硬件的 MPEG2 视频解码器。可以通过 /dev/dvb/adapter0/video0
访问它。数据类型和 ioctl 定义可以通过在应用程序中包含 linux/dvb/video.h
来访问。
请注意,DVB 视频设备仅控制 MPEG 视频流的解码,而不控制其在电视或计算机屏幕上的显示。在 PC 上,这通常由关联的 video4linux 设备处理,例如 /dev/video
,它允许缩放和定义输出窗口。
大多数 DVB 卡没有自己的 MPEG 解码器,这会导致省略音频和视频设备以及 video4linux 设备。
这些 ioctl 也被 V4L2 用来控制 V4L2 中实现的 MPEG 解码器。将这些 ioctl 用于该目的已过时,并且已经创建了适当的 V4L2 ioctl 或控件来替换该功能。对于新的驱动程序,请使用 V4L2 ioctl!
6.2.3.1.1. 视频数据类型¶
6.2.3.1.1.1. video_format_t¶
6.2.3.1.1.1.1. 概要¶
typedef enum {
VIDEO_FORMAT_4_3,
VIDEO_FORMAT_16_9,
VIDEO_FORMAT_221_1
} video_format_t;
6.2.3.1.1.1.2. 常量¶
|
选择 4:3 格式。 |
|
选择 16:9 格式。 |
|
选择 2.21:1 格式。 |
6.2.3.1.1.1.3. 描述¶
video_format_t
数据类型在 VIDEO_SET_FORMAT 函数中使用,以告知驱动程序输出硬件(例如电视)具有哪个宽高比。它也用于 video_status 数据结构中,由 VIDEO_GET_STATUS 返回,以及 video_event 数据结构中,由 VIDEO_GET_EVENT 返回,它们报告当前视频流的显示格式。
6.2.3.1.1.2. video_displayformat_t¶
6.2.3.1.1.2.1. 概要¶
typedef enum {
VIDEO_PAN_SCAN,
VIDEO_LETTER_BOX,
VIDEO_CENTER_CUT_OUT
} video_displayformat_t;
6.2.3.1.1.2.2. 常量¶
|
使用平移和扫描格式。 |
|
使用信箱格式。 |
|
使用中心剪切格式。 |
6.2.3.1.1.2.3. 描述¶
如果视频流和显示硬件的显示格式不同,则应用程序必须指定如何处理图片的裁剪。可以使用 VIDEO_SET_DISPLAY_FORMAT 调用来完成此操作,该调用接受此枚举作为参数。
6.2.3.1.1.3. video_size_t¶
6.2.3.1.1.3.1. 概要¶
typedef struct {
int w;
int h;
video_format_t aspect_ratio;
} video_size_t;
6.2.3.1.1.3.2. 变量¶
|
视频宽度(以像素为单位)。 |
|
视频高度(以像素为单位)。 |
video_format_t |
宽高比。 |
6.2.3.1.1.3.3. 描述¶
在结构体 video_event 中使用。它存储视频的分辨率和宽高比。
6.2.3.1.1.4. video_stream_source_t¶
6.2.3.1.1.4.1. 概要¶
typedef enum {
VIDEO_SOURCE_DEMUX,
VIDEO_SOURCE_MEMORY
} video_stream_source_t;
6.2.3.1.1.4.2. 常量¶
|
选择解复用器作为主要来源。 |
|
|
如果选择此源,则流通过 write 系统调用来自用户。 |
6.2.3.1.1.4.3. 描述¶
视频流源通过 VIDEO_SELECT_SOURCE 调用设置,并且可以采用以下值,具体取决于我们是从内部(解复用器)还是外部(用户写入)源重放。VIDEO_SOURCE_DEMUX 选择解复用器(由前端或 DVR 设备馈送)作为视频流的源。如果选择 VIDEO_SOURCE_MEMORY,则流通过 write() 系统调用来自应用程序。
6.2.3.1.1.5. video_play_state_t¶
6.2.3.1.1.5.1. 概要¶
typedef enum {
VIDEO_STOPPED,
VIDEO_PLAYING,
VIDEO_FREEZED
} video_play_state_t;
6.2.3.1.1.5.2. 常量¶
|
视频已停止。 |
|
视频当前正在播放。 |
|
视频已冻结。 |
6.2.3.1.1.5.3. 描述¶
这些值可以由 VIDEO_GET_STATUS 调用返回,表示视频播放的状态。
6.2.3.1.1.6. struct video_command¶
6.2.3.1.1.6.1. 概要¶
struct video_command {
__u32 cmd;
__u32 flags;
union {
struct {
__u64 pts;
} stop;
struct {
__s32 speed;
__u32 format;
} play;
struct {
__u32 data[16];
} raw;
};
};
6.2.3.1.1.6.2. 变量¶
|
||
|
解码器命令的标志。 |
|
|
|
MPEG PTS |
|
|
0 或 1000 指定正常速度, |
1:指定向前单步执行, |
||
-1:指定向后单步执行, |
||
>1:以正常速度的 speed / 1000 的速度播放 |
||
<-1:以正常速度的 (-speed / 1000) 的速度反向播放。 |
||
|
||
|
保留 |
6.2.3.1.1.6.3. 描述¶
在使用之前,应用程序必须将结构体归零。这可确保将来可以安全地扩展它。
6.2.3.1.1.7. 预定义的解码器命令和标志¶
6.2.3.1.1.7.1. 概要¶
#define VIDEO_CMD_PLAY (0)
#define VIDEO_CMD_STOP (1)
#define VIDEO_CMD_FREEZE (2)
#define VIDEO_CMD_CONTINUE (3)
#define VIDEO_CMD_FREEZE_TO_BLACK (1 << 0)
#define VIDEO_CMD_STOP_TO_BLACK (1 << 0)
#define VIDEO_CMD_STOP_IMMEDIATELY (1 << 1)
#define VIDEO_PLAY_FMT_NONE (0)
#define VIDEO_PLAY_FMT_GOP (1)
#define VIDEO_VSYNC_FIELD_UNKNOWN (0)
#define VIDEO_VSYNC_FIELD_ODD (1)
#define VIDEO_VSYNC_FIELD_EVEN (2)
#define VIDEO_VSYNC_FIELD_PROGRESSIVE (3)
6.2.3.1.1.7.2. 常量¶
解码器命令 |
|
开始播放。 |
|
停止播放。 |
|
|
冻结播放。 |
|
|
冻结后继续播放。 |
|
|
|
冻结时显示黑色图片。 |
|
|
停止时显示黑色图片。 |
|
立即停止,而不清空缓冲区。 |
|
播放输入格式 |
|
解码器没有特殊的格式要求 |
|
解码器需要完整的 GOP |
|
场序 |
|
如果硬件不知道 Vsync 是用于奇数场、偶数场还是渐进式(即非隔行扫描)场,则可以使用 FIELD_UNKNOWN。 |
|
Vsync 用于奇数场。 |
|
|
Vsync 用于偶数场。 |
|
|
渐进式(即非隔行扫描) |
6.2.3.1.1.8. video_event¶
6.2.3.1.1.8.1. 概要¶
struct video_event {
__s32 type;
#define VIDEO_EVENT_SIZE_CHANGED 1
#define VIDEO_EVENT_FRAME_RATE_CHANGED 2
#define VIDEO_EVENT_DECODER_STOPPED 3
#define VIDEO_EVENT_VSYNC 4
long timestamp;
union {
video_size_t size;
unsigned int frame_rate;
unsigned char vsync_field;
} u;
};
6.2.3.1.1.8.2. 变量¶
|
事件类型。 |
|
|
大小已更改。 |
|
|
帧率已更改。 |
|
|
解码器已停止。 |
|
|
发生 Vsync。 |
|
|
发生时的 MPEG PTS。 |
|
|
video_size_t size |
视频的分辨率和宽高比。 |
|
以每 1000 秒的帧数为单位 |
|
|
未知/奇数/偶数/渐进式
请参阅:预定义的解码器命令和标志
|
6.2.3.1.1.8.3. 描述¶
这是由 VIDEO_GET_EVENT 调用返回的视频事件的结构。有关更多详细信息,请参阅此处。
6.2.3.1.1.9. video_status¶
6.2.3.1.1.9.1. 概要¶
VIDEO_GET_STATUS 调用返回以下结构,该结构提供有关播放操作的各种状态的信息。
struct video_status {
int video_blank;
video_play_state_t play_state;
video_stream_source_t stream_source;
video_format_t video_format;
video_displayformat_t display_format;
};
6.2.3.1.1.9.2. 变量¶
|
冻结时显示空白视频? |
|
TRUE ( != 0 ) |
冻结时显示空白屏幕。 |
|
FALSE ( == 0 ) |
显示最后解码的帧。 |
|
video_play_state_t |
当前播放状态。 |
|
video_stream_source_t |
当前来源 (解复用/内存)。 |
|
video_format_t |
当前流的宽高比。 |
|
video_displayformat_t |
应用的裁剪模式。 |
6.2.3.1.1.9.3. 描述¶
如果设置 video_blank
为 TRUE
,当频道更改或播放停止时,视频将被消隐。否则,将显示最后一帧画面。play_state
指示视频当前是冻结、停止还是正在播放。stream_source
对应于视频流的选定来源。它可以来自解复用器或内存。video_format
指示当前播放的视频流的宽高比(4:3 或 16:9 之一)。最后,display_format
对应于应用的裁剪模式,以防源视频格式与输出设备的格式不同。
6.2.3.1.1.10. video_still_picture¶
6.2.3.1.1.10.1. 概要¶
struct video_still_picture {
char *iFrame;
int32_t size;
};
6.2.3.1.1.10.2. 变量¶
|
指向内存中单个 I 帧的指针。 |
|
I 帧的大小。 |
6.2.3.1.1.10.3. 描述¶
通过 VIDEO_STILLPICTURE 调用显示的 I 帧在此结构中传递。
6.2.3.1.1.11. 视频功能¶
6.2.3.1.1.11.1. 概要¶
#define VIDEO_CAP_MPEG1 1
#define VIDEO_CAP_MPEG2 2
#define VIDEO_CAP_SYS 4
#define VIDEO_CAP_PROG 8
6.2.3.1.1.11.2. 常量¶
功能位的定义
|
硬件可以解码 MPEG1。 |
|
|
硬件可以解码 MPEG2。 |
|
|
视频设备接受系统流。 您仍然必须打开视频和音频设备,但只需将流发送到视频设备。 |
|
|
视频设备接受节目流。 您仍然必须打开视频和音频设备,但只需将流发送到视频设备。 |
6.2.3.1.1.11.3. 描述¶
调用 VIDEO_GET_CAPABILITIES 将返回一个无符号整数,其中根据硬件的功能设置以下位。
6.2.3.1.2. 视频函数调用¶
6.2.3.1.2.1. VIDEO_STOP¶
6.2.3.1.2.1.1. 概要¶
-
VIDEO_STOP¶
int ioctl(fd, VIDEO_STOP, int mode)
6.2.3.1.2.1.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指示应如何处理屏幕。 |
|
TRUE ( != 0 ) |
停止时清空屏幕。 |
|
FALSE ( == 0 ) |
显示最后解码的帧。 |
6.2.3.1.2.1.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 仅适用于数字电视设备。要控制 V4L2 解码器,请改用 V4L2 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD。
此 ioctl 调用要求视频设备停止播放当前流。根据输入参数,屏幕可以被消隐或显示最后解码的帧。
6.2.3.1.2.1.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.2. VIDEO_PLAY¶
6.2.3.1.2.2.1. 概要¶
-
VIDEO_PLAY¶
int ioctl(fd, VIDEO_PLAY)
6.2.3.1.2.2.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.1.2.2.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 仅适用于数字电视设备。要控制 V4L2 解码器,请改用 V4L2 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD。
此 ioctl 调用要求视频设备开始播放来自选定来源的视频流。
6.2.3.1.2.2.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.3. VIDEO_FREEZE¶
6.2.3.1.2.3.1. 概要¶
-
VIDEO_FREEZE¶
int ioctl(fd, VIDEO_FREEZE)
6.2.3.1.2.3.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.1.2.3.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 仅适用于数字电视设备。要控制 V4L2 解码器,请改用 V4L2 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD。
如果选择了 VIDEO_SOURCE_DEMUX,此 ioctl 调用将暂停正在播放的实时视频流。解码和播放被冻结。然后可以使用 VIDEO_CONTINUE 命令重新启动视频流的解码和播放过程。如果在 ioctl 调用 VIDEO_SELECT_SOURCE 中选择了 VIDEO_SOURCE_MEMORY,则数字电视子系统将不再解码任何数据,直到执行 ioctl 调用 VIDEO_CONTINUE 或 VIDEO_PLAY。
6.2.3.1.2.3.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.4. VIDEO_CONTINUE¶
6.2.3.1.2.4.1. 概要¶
-
VIDEO_CONTINUE¶
int ioctl(fd, VIDEO_CONTINUE)
6.2.3.1.2.4.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.1.2.4.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 仅适用于数字电视设备。要控制 V4L2 解码器,请改用 V4L2 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD。
此 ioctl 调用重新启动在调用 VIDEO_FREEZE 之前播放的视频流的解码和播放过程。
6.2.3.1.2.4.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.5. VIDEO_SELECT_SOURCE¶
6.2.3.1.2.5.1. 概要¶
-
VIDEO_SELECT_SOURCE¶
int ioctl(fd, VIDEO_SELECT_SOURCE, video_stream_source_t source)
6.2.3.1.2.5.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
video_stream_source_t |
指示视频流应使用哪个源。 |
6.2.3.1.2.5.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 仅适用于数字电视设备。此 ioctl 也受 V4L2 ivtv 驱动程序支持,但该驱动程序已被 ivtv 特有的 IVTV_IOC_PASSTHROUGH_MODE
ioctl 替代。
此 ioctl 调用通知视频设备应将哪个源用于输入数据。可能的源是解复用器或内存。如果选择内存,则使用结构 video_stream_source_t 通过写入命令将数据馈送到视频设备。如果选择解复用器,则数据将直接从板载解复用器设备传输到解码器。
馈送到解码器的数据也由 PID 过滤器控制。输出选择:dmx_output
DMX_OUT_DECODER
。
6.2.3.1.2.5.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.6. VIDEO_SET_BLANK¶
6.2.3.1.2.6.1. 概要¶
-
VIDEO_SET_BLANK¶
int ioctl(fd, VIDEO_SET_BLANK, int mode)
6.2.3.1.2.6.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指示是否应清空屏幕。 |
|
TRUE ( != 0 ) |
停止时清空屏幕。 |
|
FALSE ( == 0 ) |
显示最后解码的帧。 |
6.2.3.1.2.6.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用请求视频设备清除画面。
6.2.3.1.2.6.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.7. VIDEO_GET_STATUS¶
6.2.3.1.2.7.1. 概要¶
-
VIDEO_GET_STATUS¶
int ioctl(fd, int request = VIDEO_GET_STATUS,
struct video_status *status)
6.2.3.1.2.7.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
返回视频设备的当前状态。 |
6.2.3.1.2.7.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用请求视频设备返回设备的当前状态。
6.2.3.1.2.7.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.8. VIDEO_GET_EVENT¶
6.2.3.1.2.8.1. 概要¶
-
VIDEO_GET_EVENT¶
int ioctl(fd, int request = VIDEO_GET_EVENT,
struct video_event *ev)
6.2.3.1.2.8.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指向存储事件的位置(如果有)。 |
6.2.3.1.2.8.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 仅适用于 DVB 设备。要从 V4L2 解码器获取事件,请改用 V4L2 ioctl VIDIOC_DQEVENT ioctl。
如果可用,此 ioctl 调用将返回一个 video_event 类型的事件。最新事件中的一定数量将被排队,并按发生顺序返回。如果未及时获取,则较旧的事件可能会被丢弃。如果事件不可用,则行为取决于设备是处于阻塞模式还是非阻塞模式。在后一种情况下,调用会立即失败,并将 errno 设置为 EWOULDBLOCK
。在前一种情况下,调用会阻塞,直到有事件可用。标准 Linux poll() 和/或 select() 系统调用可与设备文件描述符一起使用以监视新事件。对于 select(),文件描述符应包含在 exceptfds 参数中;对于 poll(),应将 POLLPRI 指定为唤醒条件。此 ioctl 调用仅需读取权限。
6.2.3.1.2.8.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
|
没有待处理的事件,并且设备处于非阻塞模式。 |
|
|
事件队列溢出 - 一个或多个事件丢失。 |
6.2.3.1.2.9. VIDEO_SET_DISPLAY_FORMAT¶
6.2.3.1.2.9.1. 概要¶
-
VIDEO_SET_DISPLAY_FORMAT¶
int ioctl(fd, int request = VIDEO_SET_DISPLAY_FORMAT,
video_display_format_t format)
6.2.3.1.2.9.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
video_displayformat_t |
选择要使用的视频格式。 |
6.2.3.1.2.9.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用请求视频设备选择 MPEG 芯片在视频上应用的视频格式。
6.2.3.1.2.9.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.10. VIDEO_STILLPICTURE¶
6.2.3.1.2.10.1. 概要¶
-
VIDEO_STILLPICTURE¶
int ioctl(fd, int request = VIDEO_STILLPICTURE,
struct video_still_picture *sp)
6.2.3.1.2.10.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指向存储包含 I 帧和大小的结构的存储位置的指针。 |
6.2.3.1.2.10.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用请求视频设备显示静止画面(I 帧)。输入数据应为包含 I 帧的基本视频流的一部分。通常,此部分是从 TS 或 PES 录制中提取的。设备必须支持分辨率和编解码器(请参阅 视频功能)。如果指针为 NULL,则当前显示的静止画面将被清除。
例如,AV7110 支持具有常用 PAL-SD 分辨率的 MPEG1 和 MPEG2。
6.2.3.1.2.10.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.11. VIDEO_FAST_FORWARD¶
6.2.3.1.2.11.1. 概要¶
-
VIDEO_FAST_FORWARD¶
int ioctl(fd, int request = VIDEO_FAST_FORWARD, int nFrames)
6.2.3.1.2.11.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
要跳过的帧数。 |
6.2.3.1.2.11.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用请求视频设备跳过 N 个 I 帧的解码。仅当选择 VIDEO_SOURCE_MEMORY
时,才能使用此调用。
6.2.3.1.2.11.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
|
未选择模式 |
6.2.3.1.2.12. VIDEO_SLOWMOTION¶
6.2.3.1.2.12.1. 概要¶
-
VIDEO_SLOWMOTION¶
int ioctl(fd, int request = VIDEO_SLOWMOTION, int nFrames)
6.2.3.1.2.12.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
重复每一帧的次数。 |
6.2.3.1.2.12.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用请求视频设备重复解码帧 N 次。仅当选择 VIDEO_SOURCE_MEMORY
时,才能使用此调用。
6.2.3.1.2.12.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
|
未选择模式 |
6.2.3.1.2.13. VIDEO_GET_CAPABILITIES¶
6.2.3.1.2.13.1. 概要¶
-
VIDEO_GET_CAPABILITIES¶
int ioctl(fd, int request = VIDEO_GET_CAPABILITIES, unsigned int *cap)
6.2.3.1.2.13.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指向要存储功能信息的位置的指针。 |
6.2.3.1.2.13.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用询问视频设备其解码功能。成功后,它将返回一个整数,该整数已根据 视频功能中的定义设置了位。
6.2.3.1.2.13.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.14. VIDEO_CLEAR_BUFFER¶
6.2.3.1.2.14.1. 概要¶
-
VIDEO_CLEAR_BUFFER¶
int ioctl(fd, int request = VIDEO_CLEAR_BUFFER)
6.2.3.1.2.14.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.1.2.14.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 调用清除驱动程序和解码器硬件中的所有视频缓冲区。
6.2.3.1.2.14.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.15. VIDEO_SET_STREAMTYPE¶
6.2.3.1.2.15.1. 概要¶
-
VIDEO_SET_STREAMTYPE¶
int ioctl(fd, int request = VIDEO_SET_STREAMTYPE, int type)
6.2.3.1.2.15.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
流类型。 |
6.2.3.1.2.15.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 告诉驱动程序要期望写入的流的类型。智能解码器也可能不支持或忽略此调用(如 AV7110),并自行确定流类型。
当前使用的流类型
编解码器 |
流类型 |
---|---|
MPEG2 |
0 |
MPEG4 h.264 |
1 |
VC1 |
3 |
MPEG4 Part2 |
4 |
VC1 SM |
5 |
MPEG1 |
6 |
HEVC h.265 |
7
DREAMBOX: 22
|
AVS |
16 |
AVS2 |
40 |
并非每个解码器都支持所有流类型。
6.2.3.1.2.15.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.16. VIDEO_SET_FORMAT¶
6.2.3.1.2.16.1. 概要¶
-
VIDEO_SET_FORMAT¶
int ioctl(fd, int request = VIDEO_SET_FORMAT, video_format_t format)
6.2.3.1.2.16.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
video_format_t |
电视的视频格式,如 video_format_t 部分所定义。 |
6.2.3.1.2.16.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 设置连接的输出设备(电视)的屏幕格式(宽高比),以便可以相应地调整解码器的输出。
6.2.3.1.2.16.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.17. VIDEO_GET_SIZE¶
6.2.3.1.2.17.1. 概要¶
-
VIDEO_GET_SIZE¶
int ioctl(int fd, int request = VIDEO_GET_SIZE, video_size_t *size)
6.2.3.1.2.17.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
video_size_t |
返回大小和宽高比。 |
6.2.3.1.2.17.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此 ioctl 返回大小和宽高比。
6.2.3.1.2.17.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.18. VIDEO_GET_PTS¶
6.2.3.1.2.18.1. 概要¶
-
VIDEO_GET_PTS¶
int ioctl(int fd, int request = VIDEO_GET_PTS, __u64 *pts)
6.2.3.1.2.18.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
返回 ITU T-REC-H.222.0 / ISO/IEC 13818-1 中定义的 33 位时间戳。 如果可能,PTS 应属于当前播放的帧,但也可能是一个与之接近的值,例如最后一个解码帧的 PTS 或 PES 解析器提取的最后一个 PTS。 |
6.2.3.1.2.18.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
对于 V4L2 解码器,此 ioctl 已被 V4L2_CID_MPEG_VIDEO_DEC_PTS
控制取代。
此 ioctl 调用请求视频设备返回当前 PTS 时间戳。
6.2.3.1.2.18.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.19. VIDEO_GET_FRAME_COUNT¶
6.2.3.1.2.19.1. 概要¶
-
VIDEO_GET_FRAME_COUNT¶
int ioctl(int fd, VIDEO_GET_FRAME_COUNT, __u64 *pts)
6.2.3.1.2.19.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
返回自解码器启动以来显示的帧数。 |
6.2.3.1.2.19.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
对于 V4L2 解码器,此 ioctl 已被 V4L2_CID_MPEG_VIDEO_DEC_FRAME
控制取代。
此 ioctl 调用请求视频设备返回自解码器启动以来显示的帧数。
6.2.3.1.2.19.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.20. VIDEO_COMMAND¶
6.2.3.1.2.20.1. 概要¶
-
VIDEO_COMMAND¶
int ioctl(int fd, int request = VIDEO_COMMAND,
struct video_command *cmd)
6.2.3.1.2.20.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
struct video_command |
命令解码器。 |
6.2.3.1.2.20.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
对于 V4L2 解码器,此 ioctl 已被 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD ioctl 取代。
此 ioctl 命令解码器。struct video_command 是 v4l2_decoder_cmd
结构体的子集,因此请参阅 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD 文档以获取更多信息。
6.2.3.1.2.20.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.21. VIDEO_TRY_COMMAND¶
6.2.3.1.2.21.1. 概要¶
-
VIDEO_TRY_COMMAND¶
int ioctl(int fd, int request = VIDEO_TRY_COMMAND,
struct video_command *cmd)
6.2.3.1.2.21.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
struct video_command |
尝试解码器命令。 |
6.2.3.1.2.21.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
对于 V4L2 解码器,此 ioctl 已被 VIDIOC_TRY_DECODER_CMD ioctl 取代。
此 ioctl 尝试解码器命令。struct video_command 是 v4l2_decoder_cmd
结构体的子集,因此请参阅 VIDIOC_TRY_DECODER_CMD 文档以获取更多信息。
6.2.3.1.2.21.4. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
6.2.3.1.2.22. open()¶
6.2.3.1.2.22.1. 概要¶
#include <fcntl.h>
-
int open(const char *deviceName, int flags)¶
6.2.3.1.2.22.2. 参数¶
|
特定视频设备的名称。 |
|
|
以下标志的按位或 |
|
|
只读访问 |
|
|
读/写访问 |
|
|
以非阻塞模式打开
(阻塞模式为默认)
|
6.2.3.1.2.22.3. 描述¶
此系统调用打开一个命名的视频设备(例如 /dev/dvb/adapter?/video?)以供后续使用。
当 open()
调用成功后,该设备将准备好使用。阻塞或非阻塞模式的重要性在存在差异的函数的文档中进行了描述。它不会影响 open()
调用本身的语义。可以使用 fcntl 系统调用的 F_SETFL 命令将以阻塞模式打开的设备稍后置于非阻塞模式(反之亦然)。这是一个标准系统调用,记录在 Linux fcntl 手册页中。只有一个用户可以以 O_RDWR 模式打开视频设备。所有其他尝试以这种模式打开设备的尝试都将失败,并返回错误代码。如果视频设备以 O_RDONLY 模式打开,则唯一可以使用的 ioctl 调用是 VIDEO_GET_STATUS。所有其他调用都将返回错误代码。
6.2.3.1.2.22.4. 返回值¶
|
设备驱动程序未加载/不可用。 |
|
|
内部错误。 |
|
|
设备或资源忙。 |
|
|
无效的参数。 |
6.2.3.1.2.23. close()¶
6.2.3.1.2.23.1. 概要¶
-
int close(int fd)¶
6.2.3.1.2.23.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
6.2.3.1.2.23.3. 描述¶
此系统调用关闭先前打开的视频设备。
6.2.3.1.2.23.4. 返回值¶
|
fd 不是有效打开的文件描述符。 |
6.2.3.1.2.24. write()¶
6.2.3.1.2.24.1. 概要¶
-
size_t write(int fd, const void *buf, size_t count)¶
6.2.3.1.2.24.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
指向包含 PES 数据的缓冲区的指针。 |
|
|
buf 的大小。 |
6.2.3.1.2.24.3. 描述¶
只有在 ioctl 调用 VIDEO_SELECT_SOURCE 中选择了 VIDEO_SOURCE_MEMORY 时,才能使用此系统调用。 除非功能允许其他格式,否则提供的数据应为 PES 格式。 TS 是存储 DVB 数据最常见的格式,通常也受支持。 如果未指定 O_NONBLOCK,则该函数将阻塞,直到有可用的缓冲区空间。 要传输的数据量由 count 暗示。
注意
参见: DVB 数据格式
6.2.3.1.2.24.4. 返回值¶
|
未选择模式 |
|
|
尝试写入的数据量超过了内部缓冲区所能容纳的大小。 |
|
|
fd 不是有效打开的文件描述符。 |