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_Close

停用 OSD 並釋放緩衝區。
成功時返回 0。

OSD_Open

x0,y0,x1,y1,
BitPerPixel[2/4/8]{color&0x0F},
mix[0..15]{color&0xF0}
使用此大小和位深度開啟 OSD
成功時返回 0,
DRAM 分配錯誤時返回 -1,
“已開啟”時返回 -2。

OSD_Show

啟用 OSD 模式。
成功時返回 0。

OSD_Hide

停用 OSD 模式。
成功時返回 0。

OSD_Clear

將所有畫素設定為顏色 0。
成功時返回 0。

OSD_Fill

color

將所有畫素設定為顏色 <color>。
成功時返回 0。

OSD_SetColor

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。

OSD_SetPalette

firstcolor{color},
lastcolor{x0},data
在調色盤中設定多個條目。
從陣列“data”設定條目“firstcolor”到“lastcolor”。
資料中每個顏色有 4 個位元組
R、G、B 和一個不透明度值:0->透明,1..254->混合,255->畫素

OSD_SetTrans

transparency{color}

設定混合畫素的透明度 (0..15)。
成功時返回 0。

OSD_SetPixel

x0,y0,color

將畫素 <x>,<y> 設定為顏色編號 <color>。
成功時返回 0,錯誤時返回 -1。

OSD_GetPixel

x0,y0

返回畫素 <x>,<y> 的顏色編號,或 -1。
AV7110 當前不支援的命令!

OSD_SetRow

x0,y0,x1,data

用 data[] 的內容填充畫素 x0,y 到 x1,y。
成功時返回 0,裁剪所有畫素(沒有繪製畫素)時返回 -1。

OSD_SetBlock

x0,y0,x1,y1,
increment{color},
data
用 data[] 的內容填充畫素 x0,y0 到 x1,y1。
Inc 包含資料塊中一行的寬度,
inc<=0 使用塊寬度作為行寬。
成功時返回 0,裁剪所有畫素時返回 -1。

OSD_FillRow

x0,y0,x1,color

用顏色 <color> 填充畫素 x0,y 到 x1,y。
成功時返回 0,裁剪所有畫素時返回 -1。

OSD_FillBlock

x0,y0,x1,y1,color

用顏色 <color> 填充畫素 x0,y0 到 x1,y1。
成功時返回 0,裁剪所有畫素時返回 -1。

OSD_Line

x0,y0,x1,y1,color

以顏色 <color> 繪製從 x0,y0 到 x1,y1 的線。
成功時返回 0。

OSD_Query

x0,y0,x1,y1,
xasp{color}; yasp=11
用圖片尺寸和畫素寬高比填充引數。
成功時返回 0。
AV7110 當前不支援的命令!

OSD_Test

繪製測試圖片。
僅用於除錯目的。
成功時返回 0。

OSD_Text

x0,y0,size,color,text

以顏色 <color> 在位置 x0,y0 繪製文字。

OSD_SetWindow

x0

將視窗設定為數字 0<x0<8 作為當前視窗。

OSD_MoveWindow

x0,y0

將當前視窗移動到 (x0, y0)。

OSD_OpenRaw

x0,y0,x1,y1,

開啟其他型別的 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 cmd

要執行的 OSD_Command

int x0

第一個水平位置。

int y0

第一個垂直位置。

int x1

第二個水平位置。

int y1

第二個垂直位置。

int color

調色盤中顏色的編號。

void __user *data

命令特定資料。

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. 常量

OSD_BITMAP1

1 位點陣圖

OSD_BITMAP2

2 位點陣圖

OSD_BITMAP4

4 位點陣圖

OSD_BITMAP8

8 位點陣圖

OSD_BITMAP1HR

1 位點陣圖半解析度

OSD_BITMAP2HR

2 位點陣圖半解析度

OSD_BITMAP4HR

4 位點陣圖半解析度

OSD_BITMAP8HR

8 位點陣圖半解析度

OSD_YCRCB422

4:2:2 YCRCB 圖形顯示

OSD_YCRCB444

4:4:4 YCRCB 圖形顯示

OSD_YCRCB444HR

4:4:4 YCRCB 圖形半解析度

OSD_VIDEOTSIZE

真實大小正常 MPEG 影片顯示

OSD_VIDEOHSIZE

MPEG 影片顯示半解析度

OSD_VIDEOQSIZE

MPEG 影片顯示四分之一解析度

OSD_VIDEODSIZE

MPEG 影片顯示雙倍解析度

OSD_VIDEOTHSIZE

真實大小 MPEG 影片顯示半解析度

OSD_VIDEOTQSIZE

真實大小 MPEG 影片顯示四分之一解析度

OSD_VIDEOTDSIZE

真實大小 MPEG 影片顯示雙倍解析度

OSD_VIDEONSIZE

全尺寸 MPEG 影片顯示

OSD_CURSOR

游標

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. 變數

int  cmd

要查詢的功能。

long val

用於儲存資料。

6.2.3.3.1.4.3. 支援的功能

OSD_CAP_MEMSIZE

安裝在卡上的記憶體大小。

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. 引數

int fd

先前呼叫 open() 返回的檔案描述符。

int request

指向此命令的結構 osd_cmd_t 位置的指標。

6.2.3.3.2.1.3. 描述

注意

不要在新驅動程式中使用!參見:通用說明

此 ioctl 將 OSD_Command 傳送到卡。

6.2.3.3.2.1.4. 返回值

成功時返回 0,錯誤時返回 -1,並相應地設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EINVAL

命令超出範圍。


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. 引數

int fd

先前呼叫 open() 返回的檔案描述符。

int request

與此命令的 OSD_GET_CAPABILITY 相等。

unsigned int *cap

指向此命令的結構 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 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EINVAL

不支援的功能。


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. 引數

const char *deviceName

特定 OSD 裝置的名稱。

int flags

以下標誌的按位或運算

O_RDONLY

只讀訪問

O_RDWR

讀/寫訪問

O_NONBLOCK

以非阻塞模式開啟
(阻塞模式是預設模式)

6.2.3.3.2.3.3. 描述

此係統呼叫開啟一個命名的 OSD 裝置(例如 /dev/dvb/adapter?/osd0)以供後續使用。

6.2.3.3.2.3.4. 返回值

ENODEV

裝置驅動程式未載入/不可用。

EINTERNAL

內部錯誤。

EBUSY

裝置或資源繁忙。

EINVAL

EINVAL


無效引數。

6.2.3.3.2.4. close()

6.2.3.3.2.4.1. 概要

int close(int fd)

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. 返回值

EBADF