6.2.3.3. DVB OSD 裝置¶
注意
不要在新驅動程式中使用!參見:通用說明
DVB OSD 裝置控制基於 AV7110 的具有硬體 MPEG2 解碼器的 DVB 卡的 OnScreen-Display。可以透過 /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 |
將所有畫素設定為顏色 <color>。
成功時返回 0。
|
||
|
color,
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 |
以顏色 <color> 在位置 x0,y0 繪製文字。 |
||
|
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. 返回值¶
|
裝置驅動程式未載入/不可用。 |
|
內部錯誤。 |
|
裝置或資源繁忙。 |
|
EINVAL |
無效引數。
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 裝置。
|
EBADF |