日益華麗的車載電視OSD開發(fā)占據(jù)了固件工程師大量的時間,采用結構化的OSD設計可以縮短開發(fā)時間,提高代碼質量,F(xiàn)在介紹OSD的實現(xiàn)方法、OSD類型、OSD的UI基本元素及定義基礎上,詳細分析了使用結構化的OSD UI處理機制實現(xiàn)OSD開發(fā)的方法和思路。 隨著具有各種豐富功能的車載影音產品不斷上市,日益華麗的OSD界面設計占據(jù)了固件開發(fā)工程師大量的開發(fā)時間。不少的固件工程師不斷地重復著同樣的工作:為每一個機種編寫著同樣的OSD文字、圖形及人機交互的界面(UI)互動代碼。在UI及OSD較復雜的系統(tǒng)里,該部分的代碼量高達30-60%,同時,調試不健壯的UI代碼也將占用大量的系統(tǒng)調試時間。
車載電視的UI主要具有建立在機器上的按鍵和紅外遙控器等輸入以及OSD、蜂鳴器等輸出,OSD的主要作用是提供一個直觀的圖形界面,幫助用戶完成各種對機器的控制和信息獲知等任務。隨著系統(tǒng)處理能力的提高,現(xiàn)在的OSD甚至可以提供內建游戲、記事本和萬年歷等各種附件功能。本文主要討論的是OSD固件的設計及與之相關的UI控制,并試圖提供一個關于車載電視中UI的定義和解決方案,縮短固件工程師在UI OSD界面構造上的時間。本文中的概念及方案同樣適用于其它具有點陣顯示控制任務的場合。
OSD的主要實現(xiàn)方法和類型
目前有兩種主要的OSD實現(xiàn)方法:外部OSD發(fā)生器與視頻處理器間的疊加合成;視頻處理器內部支持OSD,直接在視頻緩存內部疊加OSD信息。
外部OSD發(fā)生器與視頻處理器間的疊加合成的實現(xiàn)原理是:由一個MCU內建的字符發(fā)生器及顯示緩存,利用快速消隱(Fast-Blank)信號切換電視的畫面和OSD顯示內容,使OSD的字符等內容疊加在最終的顯示畫面上,在OSD和顯示畫面疊加處理過程中,通過調整兩者之間的比例可以實現(xiàn)OSD的半透明(Blending)效果。同時,對OSD信號中的紅綠藍信號進行重新編碼,可以得到不同的OSD顏色效果。
另外一種實現(xiàn)方法是視頻處理器內部支持OSD,直接在視頻緩存內部疊加OSD信息。這一類視頻處理通常具有外部存儲器或內部少量的行緩存,同時具有OSD發(fā)生器,OSD的合成和控制直接在視頻緩存內完成,同樣具有上述的半透明和顏色控制功能。
OSD具有字符型(Font-Based)和位圖型(Bit-Map)兩種類型。
字符型OSD(屬于字符型):為了節(jié)約顯示緩存,早期及低成本的解決方案中使用字符型OSD發(fā)生器,其原理是將OSD中顯示內容按照特定的格式(12×18、12×16等)進行分割成塊,例如數(shù)字0-9、字母a-z、常用的亮度、對比度符號等,并把這些內容固化在ROM或Flash中,在顯示緩存中僅存放對應的索引號,這樣的“字典”結構可以大幅度減少顯示緩存的需求。同時,為了提供對每個字符的顏色等屬性的控制,通常還具有一個與顯示緩存一樣大小的屬性緩存,其屬性(前景顏色、背景顏色、閃爍等)對整個字符中的每個像素有效。為了彌補這種方式不能為每個像素指定顏色的缺點,OSD發(fā)生器的設計者提供了采用多個顯示緩存合并的方式呈現(xiàn)多色字符的方案。其原理是每個顯示緩存確定一種顏色方案,當兩個甚至更多個顯示緩存合并以后就可以“拼湊”出超過兩種顏色的多色字符。字符型OSD優(yōu)點是可以使用OSD內部較少的顯示緩存,并且MCU只需要指定顯示內容的索引即可顯示對應OSD信息,可以在比較低速的MCU上實現(xiàn)。但正是由于上述的顯示信息和顏色編碼方式不夠直觀,會給字符型OSD的固件開發(fā)帶來一些麻煩。通常液晶顯示器、低成本的車載電視和家用CRT傳統(tǒng)電視上均使用這一類OSD,目前仍占據(jù)著市場主流地位。