OSD(on screen display)


隨着汽車產業的發展,車載導航設備得到了更多的應用。比如車載導航設備集成有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的固件開發工具。本文試圖探討這一類工具的運作原理,或許讀者基於本文可以開發出自己所需要的工具,當然其應用具有更廣泛的代表性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM