6.2.3.1. DVB 视频设备¶
注意
不要在新驱动程序中使用!参见:通用说明
DVB 视频设备控制 DVB 硬件的 MPEG2 视频解码器。可以通过 /dev/dvb/adapter0/video0
访问它。可以通过在应用程序中包含 linux/dvb/video.h
来访问数据类型和 ioctl 定义。
请注意,DVB 视频设备仅控制 MPEG 视频流的解码,而不控制其在电视或计算机屏幕上的呈现。在 PC 上,这通常由相关的 video4linux 设备处理,例如 /dev/video
,它允许缩放和定义输出窗口。
大多数 DVB 卡没有自己的 MPEG 解码器,这会导致音频和视频设备以及 video4linux 设备的省略。
V4L2 也使用这些 ioctl 来控制 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. 常量¶
|
选择解复用器作为主要来源。 |
|
|
如果选择此源,则流来自用户通过写入系统调用。 |
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. 变量¶
|
指向内存中单个 iframe 的指针。 |
|
iframe 的大小。 |
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 仅适用于数字电视设备。V4L2 ivtv 驱动程序也支持此 ioctl,但该 ioctl 已被 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 不是有效的打开文件描述符。 |