6.2.3.3. DVB OSD 设备¶
注意
不要在新驱动程序中使用!请参阅:一般说明
DVB OSD 设备控制基于 AV7110 的、带有硬件 MPEG2 解码器的 DVB 卡的屏幕显示。可以通过 /dev/dvb/adapter?/osd0
访问它。可以通过在应用程序中包含 linux/dvb/osd.h
来访问数据类型和 ioctl 定义。
OSD 不像许多其他卡上的帧缓冲区。它是一种可以绘图的画布。颜色深度受安装的内存大小限制。必须设置适当的调色板。可以使用 OSD_GET_CAPABILITY ioctl 识别已安装的内存大小。
6.2.3.3.1. OSD 数据类型¶
6.2.3.3.1.1. OSD_Command¶
6.2.3.3.1.1.1. 概要¶
typedef enum {
/* All functions return -2 on "not open" */
OSD_Close = 1,
OSD_Open,
OSD_Show,
OSD_Hide,
OSD_Clear,
OSD_Fill,
OSD_SetColor,
OSD_SetPalette,
OSD_SetTrans,
OSD_SetPixel,
OSD_GetPixel,
OSD_SetRow,
OSD_SetBlock,
OSD_FillRow,
OSD_FillBlock,
OSD_Line,
OSD_Query,
OSD_Test,
OSD_Text,
OSD_SetWindow,
OSD_MoveWindow,
OSD_OpenRaw,
} OSD_Command;
6.2.3.3.1.1.2. 命令¶
注意
所有函数在“未打开”时返回 -2
命令 |
struct osd_cmd_t 的已使用变量。用法{变量},如果使用替代方法。
|
描述 |
||
---|---|---|---|---|
|
禁用 OSD 并释放缓冲区。
成功时返回 0。
|
|||
|
x0,y0,x1,y1,
BitPerPixel[2/4/8]{color&0x0F},
mix[0..15]{color&0xF0}
|
使用此大小和位深度打开 OSD
成功时返回 0,
DRAM 分配错误时返回 -1,
“已打开”时返回 -2。
|
||
|
启用 OSD 模式。
成功时返回 0。
|
|||
|
禁用 OSD 模式。
成功时返回 0。
|
|||
|
将所有像素设置为颜色 0。
成功时返回 0。
|
|||
|
颜色 |
将所有像素设置为颜色 <color>。
成功时返回 0。
|
||
|
颜色,
R{x0},G{y0},B{x1},
opacity{y1}
|
将调色板条目 <num> 设置为 <r,g,b>,应用 <mix> 和 <trans>
R,G,B: 0..255
R=红色,G=绿色,B=蓝色
opacity=0: 像素不透明度 0%(仅显示视频像素)
opacity=1..254: 像素不透明度如标头中指定
opacity=255: 像素不透明度 100%(仅显示 OSD 像素)
成功时返回 0,错误时返回 -1。
|
||
|
firstcolor{color},
lastcolor{x0},data
|
设置调色板中的多个条目。
从数组 “data” 设置 “firstcolor” 到 “lastcolor” 的条目。
每个颜色数据有 4 个字节
R、G、B 和一个不透明度值:0->透明,1..254->混合,255->像素
|
||
|
transparency{color} |
设置混合像素的透明度(0..15)。
成功时返回 0。
|
||
|
x0,y0,color |
将像素 <x>,<y> 设置为颜色编号 <color>。
成功时返回 0,错误时返回 -1。
|
||
|
x0,y0 |
返回像素 <x>,<y> 的颜色编号,或 -1。
AV7110 当前不支持的命令!
|
||
|
x0,y0,x1,data |
用 data[] 的内容填充像素 x0,y 到 x1,y。
成功时返回 0,裁剪所有像素时返回 -1(没有绘制任何像素)。
|
||
|
x0,y0,x1,y1,
increment{color},
data
|
用 data[] 的内容填充像素 x0,y0 到 x1,y1。
Inc 包含数据块中一行的宽度,
inc<=0 将块宽度用作行宽。
成功时返回 0,裁剪所有像素时返回 -1。
|
||
|
x0,y0,x1,color |
用颜色 <color> 填充像素 x0,y 到 x1,y。
成功时返回 0,裁剪所有像素时返回 -1。
|
||
|
x0,y0,x1,y1,color |
用颜色 <color> 填充像素 x0,y0 到 x1,y1。
成功时返回 0,裁剪所有像素时返回 -1。
|
||
|
x0,y0,x1,y1,color |
用颜色 <color> 从 x0,y0 到 x1,y1 绘制一条线。
成功时返回 0。
|
||
|
x0,y0,x1,y1,
xasp{color}; yasp=11
|
用图片尺寸和像素宽高比填充参数。
成功时返回 0。
AV7110 当前不支持的命令!
|
||
|
绘制测试图片。
仅用于调试目的。
成功时返回 0。
|
|||
|
x0,y0,size,color,text |
在位置 x0,y0 用颜色 <color> 绘制文本。 |
||
|
x0 |
将窗口编号 0<x0<8 设置为当前窗口。 |
||
|
x0,y0 |
将当前窗口移动到 (x0, y0)。 |
||
|
x0,y0,x1,y1,
osd_raw_window_t {color}
|
打开其他类型的 OSD 窗口。 |
6.2.3.3.1.1.3. 描述¶
OSD_Command
数据类型与 OSD_SEND_CMD ioctl 一起使用,以告诉驱动程序要执行哪个 OSD_Command。
6.2.3.3.1.2. osd_cmd_t¶
6.2.3.3.1.2.1. 概要¶
typedef struct osd_cmd_s {
OSD_Command cmd;
int x0;
int y0;
int x1;
int y1;
int color;
void __user *data;
} osd_cmd_t;
6.2.3.3.1.2.2. 变量¶
|
要执行的 OSD_Command。 |
|
第一个水平位置。 |
|
第一个垂直位置。 |
|
第二个水平位置。 |
|
第二个垂直位置。 |
|
调色板中颜色的编号。 |
|
命令特定数据。 |
6.2.3.3.1.2.3. 描述¶
osd_cmd_t
数据类型与 OSD_SEND_CMD ioctl 一起使用。它包含 OSD_Command 的数据和 OSD_Command 本身。该结构必须传递给驱动程序,并且其组件可能会被修改。
6.2.3.3.1.3. osd_raw_window_t¶
6.2.3.3.1.3.1. 概要¶
typedef enum {
OSD_BITMAP1,
OSD_BITMAP2,
OSD_BITMAP4,
OSD_BITMAP8,
OSD_BITMAP1HR,
OSD_BITMAP2HR,
OSD_BITMAP4HR,
OSD_BITMAP8HR,
OSD_YCRCB422,
OSD_YCRCB444,
OSD_YCRCB444HR,
OSD_VIDEOTSIZE,
OSD_VIDEOHSIZE,
OSD_VIDEOQSIZE,
OSD_VIDEODSIZE,
OSD_VIDEOTHSIZE,
OSD_VIDEOTQSIZE,
OSD_VIDEOTDSIZE,
OSD_VIDEONSIZE,
OSD_CURSOR
} osd_raw_window_t;
6.2.3.3.1.3.2. 常量¶
|
1 位位图 |
|
|
2 位位图 |
|
|
4 位位图 |
|
|
8 位位图 |
|
|
1 位位图半分辨率 |
|
|
2 位位图半分辨率 |
|
|
4 位位图半分辨率 |
|
|
8 位位图半分辨率 |
|
|
4:2:2 YCRCB 图形显示 |
|
|
4:4:4 YCRCB 图形显示 |
|
|
4:4:4 YCRCB 图形半分辨率 |
|
|
真实大小的普通 MPEG 视频显示 |
|
|
MPEG 视频显示半分辨率 |
|
|
MPEG 视频显示四分之一分辨率 |
|
|
MPEG 视频显示双倍分辨率 |
|
|
真实大小的 MPEG 视频显示半分辨率 |
|
|
真实大小的 MPEG 视频显示四分之一分辨率 |
|
|
真实大小的 MPEG 视频显示双倍分辨率 |
|
|
全尺寸 MPEG 视频显示 |
|
|
光标 |
6.2.3.3.1.3.3. 描述¶
osd_raw_window_t
数据类型与 OSD_Command OSD_OpenRaw 一起使用,以告诉驱动程序要打开哪种类型的 OSD。
6.2.3.3.1.4. osd_cap_t¶
6.2.3.3.1.4.1. 概要¶
typedef struct osd_cap_s {
int cmd;
#define OSD_CAP_MEMSIZE 1
long val;
} osd_cap_t;
6.2.3.3.1.4.2. 变量¶
|
要查询的功能。 |
|
用于存储数据。 |
6.2.3.3.1.4.3. 支持的功能¶
|
卡上安装的内存大小。 |
6.2.3.3.1.4.4. 描述¶
此数据结构与 OSD_GET_CAPABILITY 调用一起使用。
6.2.3.3.2. OSD 函数调用¶
6.2.3.3.2.1. OSD_SEND_CMD¶
6.2.3.3.2.1.1. 概要¶
-
OSD_SEND_CMD¶
int ioctl(int fd, int request = OSD_SEND_CMD, enum osd_cmd_t *cmd)
6.2.3.3.2.1.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
指向此命令的 osd_cmd_t 结构体所在位置的指针。 |
6.2.3.3.2.1.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:一般说明
此 ioctl 将 OSD_Command 发送到卡。
6.2.3.3.2.1.4. 返回值¶
成功时返回 0,失败时返回 -1,并相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
|
命令超出范围。 |
6.2.3.3.2.2. OSD_GET_CAPABILITY¶
6.2.3.3.2.2.1. 概要¶
-
OSD_GET_CAPABILITY¶
int ioctl(int fd, int request = OSD_GET_CAPABILITY,
struct osd_cap_t *cap)
6.2.3.3.2.2.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指向此命令的 osd_cap_t 结构体所在位置的指针。 |
6.2.3.3.2.2.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:一般说明
此 ioctl 用于获取正在使用的基于 AV7110 的 DVB 解码卡的 OSD 功能。
注意
结构体 osd_cap_t 必须由用户设置并传递给驱动程序。
6.2.3.3.2.2.4. 返回值¶
成功时返回 0,失败时返回 -1,并相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
|
不支持的功能。 |
6.2.3.3.2.3. open()¶
6.2.3.3.2.3.1. 概要¶
#include <fcntl.h>
-
int open(const char *deviceName, int flags)¶
6.2.3.3.2.3.2. 参数¶
|
特定 OSD 设备的名称。 |
|
|
以下标志的按位或 |
|
|
只读访问 |
|
|
读/写访问 |
|
|
以非阻塞模式打开
(阻塞模式是默认模式)
|
6.2.3.3.2.3.3. 描述¶
此系统调用打开一个命名的 OSD 设备(例如,/dev/dvb/adapter?/osd0
),以便后续使用。
6.2.3.3.2.3.4. 返回值¶
|
设备驱动程序未加载/不可用。 |
|
内部错误。 |
|
设备或资源忙。 |
|
参数无效。 |
6.2.3.3.2.4. close()¶
6.2.3.3.2.4.1. 概要¶
-
int close(int fd)¶
6.2.3.3.2.4.2. 参数¶
|
先前调用 open() 返回的文件描述符。 |
6.2.3.3.2.4.3. 描述¶
此系统调用关闭先前打开的 OSD 设备。
6.2.3.3.2.4.4. 返回值¶
|
fd 不是有效的打开文件描述符。 |