OSD(on screen display)

來源:互聯網
上載者:User

標籤:style   http   使用   strong   os   檔案   

隨著汽車產業的發展,車載導航裝置得到了更多的應用。比如車載導航裝置整合有DVD功能(對視頻處理提出較高要求,需要選擇高效能平台和高效能視頻處理器),通過OSD技術實現音量的可視性控制和DVD控制。優點是在不影響DVD畫面的基礎上疊加在螢幕上,降低主處理器的工作量。

OSD是一種在屏顯示技術,其核心就是在映像上疊加文字、滑鼠、簡單的圖片等,使顯示螢幕為使用者提供更多的附加資訊,為使用者提供極大便利。目前,相機、電視機、顯示器、監視器等映像或視頻系統中應用非常廣泛。

PXA270處理用具有領先的高效能和低功耗功能,宏芯T128D具有強大的視頻處理功能,同時整合了兩層OSD處理引擎,兩者通過I2C匯流排串連可以大大進步車載導航裝置的多媒體處理功能,本文陳述了在兩者基礎上通過I2C匯流排串連實現OSD顯示驅動的方法。

1 基本原理

1.1 OSD顯示原理

  OSD(On Screen Display)是螢幕顯示技術的一種,用於在顯示終端上顯示字元、圖形和映像。實現的過程為:儲存空間(一般為記憶體的一段)的內容與顯示終端上的像素逐一對應。

  當要輸出圖文資訊時,將字元表徵圖的位元影像資訊送至OSD位元影像地區的相應位置。OSD位元影像地區由其頭部定義,每個OSD頭主要包括OSD顯示矩形地區的起始位置、大小及兩個分別指向頂場和底場映像資料的指標,還有一個指向下一個OSD位元影像資料頭的指標。由於採用了這種基於指標的OSD資料治理結構,理論上OSD位元影像資料區塊的數目不受限制,實際上它要受到記憶體大小的限制。TerawinsT128提供的記憶體空間為8k*16 b。頭部不僅定義了位元影像地區的尺寸、位置以及顏色資訊,而且提供了顏色表更新等功能。字元的顏色設定使用OSD處理單元(LUT)的顏色尋找表,也稱作調色盤。1所示,4位的LUT意味著有16種顏色可以選擇,並且位元影像中的每個像素佔有儲存單元的4位。某個Byte中的低四bit內容與一個像素逐一對應,其值為“3”,那麼數字“3”所代表的顏色便由色板來決定,然後再驅動OSD螢幕將像素設定為制定顏色。OSD中的2個像素對應1 B,所以一行顯示內容所佔的儲存空間為320/2=160 B,設pOSDBuffer指向OSD對應儲存空間的首地址,為了將OSD上座標(x,y)的像素設定值為PixelValue(值的範圍為0x00~0x0f),即改變該像素的顏色,則需要先確定座標(x,y)像素對應的位元組儲存空間地址為:

1.2 I2C匯流排通訊原理

  I2C(Inter-Integrated Circuit)匯流排是一種由PHILIPS公司開發的兩線式串列匯流排,用於串連微控制器及其外圍裝置。I2C匯流排是由資料線SDA和時鐘SCL構成的串列匯流排,可發送和接收資料。各種被控制電路均並聯在這條匯流排上,每個電路和模組都有惟一的地址。CPU會發出地址碼用來選址,即接通需要控制的電路。所以,各控制電路固然掛在同一條匯流排上,卻彼此獨立,互不相關。

  I2C匯流排定義了嚴格的傳輸訊號來完成一次傳輸。2所示,SCL為高電平時,SDA由高電平向低電平跳變,這是開始訊號,開始傳送資料。SCL為低電平時,SDA由低電平向高電平跳變,結束傳送資料。

 

  留意:SDA線上的資料狀態僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態的改變會被識別為起始和停止條件。接收資料的IC在接收到8 b資料後,向發送資料的IC發出特定的低電平脈衝,表示已收到資料。CPU向受控單元發出一個訊號後,等待受控單元發出一個應答訊號,CPU接收到應答訊號後,根據實際情況做出是否繼續傳遞訊號的判定。若未收到應答訊號,則判定為受控單元出現故障。

2 具體實現

2.1 介面電路

  PXA270晶片通過SCL和SDA兩根線(I2C)向T128D發送指令,通知其顯示OSD或者擦除OSD畫面。在本論文使用的方法裡,是由PXA270通過I2C向T128D寫寄存器,將讀OSD符號的首地址傳輸給T128D。PXA270要顯示的RGB或者YPrBr訊號也串連到T128D上,通過LVSYNC垂直同步訊號和LYSYNC橫向同步訊號實現同步。通過T128D的處理,將DVD的YPrBr訊號和PXA270的RGB565訊號處理為類比RGB訊號,再串連LCD屏,由LCD屏顯示出來。

 

2.2 軟體實現架構

  本文的OSD驅動實現使用流介面驅動,OSD流介面驅動的架構4所示。該驅動在系統啟動時或者啟動後的任何時候由裝置治理器動態載入。以DLL動態連結程式庫的形式存在,系統載入它們後,這些驅動程式以使用者態的角色運行。這個OSD流驅動通過檔案操縱API來從裝置治理器和應用程式獲得命令。流介面驅動有一套標準的介面,比如XXX_Init,XXX_Open,XXX_PowerUp,XXX_IOControl,XXX_Write等。對於I/O裝置尤其是資料流裝置來說是非常合適的,操縱介面和檔案系統API十分類似,比如ReadFile,IO_Control等。應用程式可以和流介面驅動進行互動,並且可以把流介面驅動當作檔案來操縱。

 

  本文著重要提到的流介面是OSD_Init,OSD_IOControl,OSD_write。OSD_Init在載入驅動時通知裝置治理器在為裝置初始化時分配資源。OSD_IOControl是檔案系統發送I/O控制指令的介面。OSDWrite是檔案系統寫資料到T128D的介面。在本文中OSD_Write不進行具體的寫操縱,只是將寫命令壓人FIFO隊列。

2.3 具體操縱

2.3.1 I2C匯流排的通訊流程

  由於I2C匯流排上掛的裝置很多,可能會造成兩個裝置同時佔用I2C匯流排的情況,這樣系統會錯亂。為了避免這種情況,針對一次讀寫操縱,考慮到其不可打斷性以防止資料的破壞,採用Mutex互斥鎖。即每次只答應一個讀寫操縱佔用I2C匯流排。在一次讀寫操縱開始之前,等待互斥鎖,直到讀寫操縱完畢,開釋互斥鎖。這樣當在一次讀寫沒有完成之前,其餘裝置無法佔用I2C匯流排,而只能等待。本驅動申請互斥鎖的流程見圖5。

2.3.2  初始化和卸載

  T128裝置的初始化,主要是首先映射GPIO和T128相關寄存器到虛擬位址空間,然後檢測I2C匯流排驅動有沒有初始化,建立互斥體,並建立一個寫線程OsdWriteProc(),同時建立一個OSD寫命令非空事件g_hevOsdQueueEmpty這樣檢測到非空事件時就可以調用OSD寫進程。初始化裝置失敗或者裝置卸載的時候調用裝置卸載函數,卸載時要開釋虛擬GPIO寄存器的空間,調用I2C的卸載函數,並封閉互斥體。

2.3.3  OSD寫進流程

  實踐中發現在寫OSD時需要停止T128 MCU,寫完後恢複其運行,否則OSD會錯亂。假如要停止T128MCU時,它正在切換視訊、檢測視頻訊號,操縱未完成時被停掉,則液晶屏顯示會錯亂,映像分成幾個部分。而上層應用的寫OSD請求不能丟棄,否則上層的狀態又會錯亂,該隱躲的未隱躲,該顯示的沒顯示。因此需要設計一種機制,既保證上層的寫OSD操縱不丟棄,又不與T128 MCU衝突。

  5所示,設計一個緩衝隊列,接收到上傳人的OSD資料壓進隊列。OSD驅動留給上層的Write介面,不負責實際的寫操縱,將資料壓進隊列(此時會啟用隊列非空事件)後立即返回。建立一個OSD寫線程,等待緩衝隊列非空事件啟用後,查詢T128 MCU狀態,待其空閑後,擷取關鍵程式碼片段,執行寫操縱,寫完後退出關鍵程式碼片段,進進下一輪迴圈。

3 效能分析

  T128通過3根主線跟CPU通訊,由T128處理從DVD和PXA270來的視頻訊號,這樣OSD就可以在各個源的訊號上疊加。由於T128處理了很大一部分視頻訊號,降低了CPU的負擔,同時也圓滿解決了OSD在DVD訊號上的疊加題目。由於I2C的多主控特點,不會影響掛在I2C上的其他外設的工作和效能。

4 OSD主要實現方法和類型

目前有兩種主要的OSD實現方法:外部OSD發生器與視頻處理器間的疊加合成;視頻處理器內部支援OSD,直接在視頻緩衝內部疊加OSD資訊。

(1)外部OSD發生器與視頻處理器間的疊加合成的實現原理是:由一個MCU內建的字元發生器及顯示緩衝,利用快速消隱(Fast-Blank)訊號切換電視的畫面和OSD顯示內容,使OSD的字元等內容疊加在最終的顯示畫面上,在OSD和顯示畫面疊加處理過程中,通過調整兩者之間的比例可以實現OSD的半透明(Blending)效果。同時,對OSD訊號中的紅綠藍訊號進行重新編碼,可以得到不同的OSD顏色效果。

(2)另外一種實現方法是視頻處理器內部支援OSD,直接在視頻緩衝內部疊加OSD資訊。這一類視頻處理通常具有外部儲存空間或內部少量的行緩衝,同時具有OSD發生器,OSD的合成和控制直接在視頻緩衝內完成,同樣具有上述的半透明和顏色控制功能。

OSD具有字元型(Font-Based)和位元影像型(Bit-Map)兩種類型。

字元型OSD:為了節約顯示緩衝,早期及低成本的解決方案中使用字元型OSD發生器,其原理是將OSD中顯示內容按照特定的格式(12×18、12×16等)進行分割成塊,例如數字0-9、字母a-z、常用的亮度、對比符號等,並把這些內容固化在ROM或Flash中,在顯示緩衝中僅存放對應的索引號,這樣的“字典”結構可以大幅度減少顯示緩衝的需求。同時,為了提供對每個字元的顏色等屬性的控制,通常還具有一個與顯示緩衝一樣大小的屬性緩衝,其屬性(前景顏色、背景顏色、閃爍等)對整個字元中的每個像素有效。為了彌補這種方式不能為每個像素指定顏色的缺點,OSD發生器的設計者提供了採用多個顯示緩衝合并的方式呈現多色字元的方案。其原理是每個顯示緩衝確定一種顏色方案,當兩個甚至更多個顯示緩衝合并以後就可以“拼湊”出超過兩種顏色的多色字元。

字元型OSD優點是可以使用OSD內部較少的顯示緩衝,並且MCU只需要指定顯示內容的索引即可顯示對應OSD資訊,可以在比較低速的MCU上實現。但正是由於上述的顯示資訊和顏色編碼方式不夠直觀,會給字元型OSD的韌體開發帶來一些麻煩。通常液晶顯示器、低成本的平板電視和CRT傳統電視上均使用這一類OSD,目前仍佔據著市場主流地位。

相較字元型OSD,位元影像OSD的處理原理較直觀和簡單:通過對最終顯示內容上特定地區的每個像素點進行改變,直接將OSD資訊疊加到最終的顯示畫面上,其按像素進行控制的方式可以保證具有多色及足夠的表現能力。位元影像OSD發生器通常內建在視頻處理器內部,並共用使用其主顯示緩衝。也有獨立在視頻處理器之外的專業OSD位元影像發生器,如美信的MAX4455,通常這一類晶片需要外部SDRAM作為顯示緩衝。

位元影像OSD的顯示效果理論上可以做到非常完美的程度,可以提供類似Windows中具有立體感的各種物件,如具有陰影的按鈕、顏色豐富的圖形和文字等,其缺點是必須具有足夠的OSD顯示緩衝,以及按像素進行處理而對MCU帶來的速度要求。通常在大尺寸的高端平板電視和專業顯示器上會使用這一類OSD。隨著技術的不斷髮展和儲存空間的成本的不斷下降,未來的OSD應該都是位元影像型的。

OSD的UI基本元素及定義

 

顯示OSD的目的是需要向使用者表達資訊,那麼哪些資訊需要表達呢?通常包括提示、警告資訊、控制參數的數值顯示等。儘管無論其顯示形狀是什麼,其本質都是一些字元或像素點的組合,但是對於這些資訊的分類和屬性定義有助於韌體開發人員的統一編碼和代碼處理。本文嘗試分類,分析這些元素並在下面給出統一的韌體處理方法。

1. OSD基本概念

UI語言:指OSD內容中的文字部分使用的語言類型。

UI模式:指OSD內容適用的環境,例如不同的訊號源(電視、DVD、PC)帶來的模式變化,其作用主要區分不同的環境下OSD的不同表現。

UI情境:特定語言模式下及較多資訊頁面情況下,當前OSD適用的特定頁面。

UI事件:使用者利用輸入裝置向UI系統提供的操作命令。

UI動作表:指在特定UI情境中,對於UI輸入的命令進行對應處理的索引表。

OSD畫布:指整個OSD呈現的地區,通常為一個矩形地區。

OSD位置:通常指在OSD畫布中,相較左上方原點的相對位置。

OSD物件:呈現在畫布上,表達特定資訊,具有特定屬性的像素組合。

2. OSD包含的基本元素

OSD資訊中主要包括以下一些基本元素(可能本文的提法未必準確,希望讀者可以體會到其意思):地區、標籤、表徵圖、文字、進度條、動畫、數字、可選表徵圖、導航資訊等。下面分別給出這些元素的定義、作用、屬性和響應事件。

a. 地區

定義:在OSD畫布中,以特定的屬性(顏色、閃爍、大小等)標示出的矩形或任意形狀的地區。

作用:對OSD內容進行分類或標示,例如標題區,內容地區等。

屬性:位置、顏色、閃爍特性等。

b. 標籤(Label)

定義:固定不變的文字資訊,可以是一行或多行。

作用:對OSD內容進行必要的文字說明。

屬性:位置、顏色、閃爍特性、語言類別、大小寫、對齊等。

響應事件:作為固定的資訊內容,通常對UI輸入的控制無響應。

c. 表徵圖(Icon)

定義:以特定的字元或像素組合構成形狀,以表達可識別的資訊。

作用:對OSD內容進行形象的提示,如播放、禁止等特定符號。

屬性:位置、顏色、閃爍特性等。

響應事件:作為固定的資訊內容,通常對UI輸入的控制無響應。

d. 文字(Text)

定義:相較標籤,其同樣為文字資訊,但是可以隨使用者的操作而改變。

作用:以隨選擇而改變的文字內容,提供關於使用者選擇的文字提示

屬性:位置、顏色、語言類別、大小寫、對齊等。

響應事件:使用者的選擇,通常為上一個或下一個選擇。

e. 進度條(Bar)

定義:矩形條狀的物件,隨其數值的不同而改變相關特性,未來也許會有其它形狀的此類物件,

如油量表狀等,但它們都具有同樣的屬性。

作用:以形象的圖形介面,給出關於某項數值的圖形說明。

屬性:位置、顏色、上下限、當前值、類型、大小、是否顯示數值等。

響應事件:數值的改變。

f. 動畫(Movie)

定義:隨時間而改變的表徵圖組合。

作用:以活動的圖形使OSD介面更生動,提高資訊的表達效果。

屬性:位置、顏色、具有的表徵圖數目、變化速度等。

響應事件:作為固定的資訊內容,通常對UI輸入的控制無響應。

g. 數字

定義:隨有關參數或使用者選擇改變而改變的數字組合,可以為十進位或其它進位,亦可以是百分比或其它數值形式。

作用:直觀地給出關於某項參數的數值量化指示,通常與進度條聯合使用,以達到直觀與形象的雙重效果。

屬性:位置、顏色、上下限、當前值、進位選擇等。

響應事件:對應參數的數值的改變。

h. 可選表徵圖(Option)

定義:隨有關參數或使用者選擇改變而改變的表徵圖組合。

作用:使用者選擇的圖形化表達,例如選擇、未選擇、開啟、關閉等資訊的圖形化表達。

屬性:位置、顏色、閃爍、選擇數目等。

響應事件:對應參數的選擇改變。

i. 導航資訊

定義:呈現在OSD畫布上,對當前UI情境中的使用者操作進行提示的資訊。

作用:指引使用者操作相關按鍵,進行OSD內容操作。通常具有可用按鍵的指示以及必要的文字說明,通常作為OSD提示資訊的完善和人機介面友好化的措施。

屬性:位置、顏色、閃爍等。

響應事件:UI情境、按鍵的改變。

使用基於對象的方法處理OSD UI

傳統的處理手法是將特定情境下的OSD物件逐一用代碼“畫”出來,在遇到特定的UI事件時,再利用一堆if else判斷出特定情境和操作對象,並做相應的OSD處理。在OSD較簡單的情況下,其不失為一個可行的方法。但在遇到OSD情境和模式較多的情況下,這個if else的結構會變得很大,而且更為重要的是極易出錯以及維護成本提高。隨著OSD越來越複雜以及代碼工作量的不斷提高,人們意識到我們需要花費太多時間在這些“表面文章”上,而真正重要的應用程式層和裝置驅動層的開發時間會受到影響,進而影響新產品的開發進度。韌體工程師也不願不斷重複編寫同樣代碼來滿足不斷改變客戶的特定OSD需要。筆者早期也曾遭遇同樣的困擾,面對部門裡工程師毫無效率地做著同樣的事情,感覺到開發一個統一的OSD UI平台的重要性。現在對於上述OSD UI進行的分析,可以讓我們開發出獨立於特定數位視訊處理器平台和OSD發生機制的硬體環境的獨立統一開發工具。事實上,平板顯示晶片方案的重要提供者如Genesis、Pixelworks等為了加速其產品的開發和應用速度,已經提供了具有這樣功能的基於Windows的韌體開發工具。本文試圖探討這一類工具的運作原理,或許讀者基於本文可以開發出自己所需要的工具,當然其應用具有更廣泛的代表性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.