左瑞娟,武永華
(1.福建師范大學(xué)軟件學(xué)院,福建 福州 350007;2.福建江夏學(xué)院,福建 福州 350007)
隨著液晶電視功能越來越強大,OSD要支持的語言越來越多,OSD要顯示的字庫越來越大,而存儲字庫的Flash空間有限[1-3],所以必須對OSD字庫采取一定的壓縮算法,通過液晶電視嵌入式軟件來解壓縮,這樣就可以在有限的Flash空間使OSD顯示得效果更豐富。本文基于此思路提出了利用可變字長編碼(VLC)來壓縮OSD的字庫[4]。
在嵌入式設(shè)計中對代碼的大小有很嚴格的要求,因為Flash容量是極其有限的,所以像字體庫這樣需要占用相當(dāng)一部分Flash空間的代碼,總是會先用一種合適的壓縮算法將其壓縮,然后再燒入Flash中,這樣可以節(jié)省Flash的空間。
OSD是On Screen Display的縮寫,是應(yīng)用在液晶電視上,在液晶電視的液晶屏幕產(chǎn)生一些特殊的字形或圖形,讓使用者得到一些訊息。當(dāng)使用者操作電視機換臺或調(diào)整音量、畫質(zhì)和切換不同國家語言等,液晶屏幕就會顯示目前狀態(tài),讓終端用戶知道。此圖像處理芯片可以在屏幕上的任何位置顯示一些特殊字形與圖形,成為人機界面上重要的訊息產(chǎn)生裝置。
VLC可變字長編碼的原理:將出現(xiàn)概率大的符號編成短碼,將出現(xiàn)概率小的符號編成長碼,如果碼字長度嚴格,按照出現(xiàn)概率大小逆序排列,則其平均碼字長度一定小于其他任何符合順序排列方式。
OSD字庫里面的每個字形(Font)是由點矩陣打點所形成,并且這些點在液晶屏幕上可以指定其顏色。“1 bit Font”為黑白兩種顏色,“多bit Color Font”為多種顏色的字形,這些點可分別指定為不同顏色。需要注意的是,Color Font可指定的不同顏色值越多,則所需的產(chǎn)生字形所需的圖像處理芯片就越復(fù)雜。
如圖1所示,在Edit Window中共有12×18個小網(wǎng)格,也可以是其他點距的字形,每一個小網(wǎng)格代表一個字符。在顏色模式為1 bit的情況下,每個小網(wǎng)格可存儲1 bit的數(shù)據(jù),即選中則為1,未選中為0。從上至下,每2行的選取方式是一樣的,所以這里以前兩行作為例子進行分析。在圖1中編輯了2行,8個小網(wǎng)格代表1 byte,箭頭代表了選取方向,數(shù)字代表選取順序。所以按照這個法則,第1 byte的編碼應(yīng)為00000111,第2 byte的編碼應(yīng)為00001111,第3 byte的編碼為00001100。上述例子生成的源代碼即字庫,保存在在“.h”文件中,即:
圖1 字形網(wǎng)格
從上述程序代碼可以看到,第1 byte的編碼為0x07,正是圖1解釋的00000111,第2 byte和第3 byte的編碼也同樣能對應(yīng)上。
VLC可變字長壓縮是熵編碼[5]的一種,通過對碼字和其長度的查找表實現(xiàn),完成查找后將碼字取出填充進比特流輸出,對應(yīng)的解碼端過程稱為可變字長解碼(VLD),通過設(shè)計一個最優(yōu)代碼(也就是代碼字對字符的一種分配)來最小化代碼字的長度,他依賴于字符使用的概率P。如果一個字符很少使用,那么可以給它分配一個較長的代碼字。對經(jīng)常使用的字符,最好分配一個很短的編碼,并且需要一些限制來約束預(yù)期的代碼:
1)每個代碼字只對應(yīng)一個字符。
2)解碼應(yīng)當(dāng)不需要任何預(yù)測。在讀入每個字符之后,它應(yīng)當(dāng)可能確定是否到達了原始信息里一個字符編碼的字符串最后。滿足這個需要的字符稱作是由前綴特性的代碼,它意味著沒有代碼字是其他代碼字的前綴。
3)每個給定字符的代碼字長度應(yīng)當(dāng)不超過概率比它小的字符的代碼字長度。
4)在一個最優(yōu)代碼系統(tǒng)中,不應(yīng)當(dāng)有未使用的短代碼字,或者是獨立編碼或者長代碼字的前綴,因為這可能說明根本沒有必要創(chuàng)建一個這么長的代碼字。
本文中所應(yīng)用的壓縮算法有它自己的適應(yīng)性,在所有出現(xiàn)的代碼字中只有16 種情況,即0,1,2,3,…,D,E,F(xiàn)。為這些代碼字提供了一張有16種VLC編碼的對照表格,如表1所示,這張編碼表的特殊之處在于,它是根據(jù)每一個源字符出現(xiàn)的概率而建立起來的。出現(xiàn)概率高的字符使用較短的編碼,反之出現(xiàn)概率低的則使用較長的編碼,這便使編碼之后的字符串的平均期望長度降低,從而達到無損壓縮數(shù)據(jù)的目的。
表1 代碼字對照表
在表1中,每個代碼字對應(yīng)的編碼并不是固定的,表1中的Value項的值只是作為一個例子,實際壓縮過程中每個代碼字具體對應(yīng)的編碼是由這個編碼在所有編碼中出現(xiàn)的概率來決定的,在決定給編碼分配代碼字的時候,首先要把所有的編碼出現(xiàn)的概率進行從大到小的排序,在出現(xiàn)一樣概率的情況下,將值大的編碼放在前面。對于那些沒有出現(xiàn)的編碼,給它分配什么代碼字無關(guān)緊要,因為代碼字有它的獨立性,在字體的壓縮編碼中,前16 byte的編碼是代碼字對照表的編碼,表明以下的編碼是由這個對照表來進行壓縮的。圖2為未經(jīng)壓縮的原始字庫,如圖3為經(jīng)過VLC縮后的字庫。
圖4 經(jīng)過壓縮后,前面 16 byte為 0x00,0x03,0x0f,0x0c,0x08,0x0e,0x01,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b和0x0d。前16 byte的編碼是代碼字對照表的編碼,表明以下的編碼是由這個對照表來進行壓縮的。按照這16 byte每個的出現(xiàn)概率從大到小排列,也就是說0的幾率最高,其次是3,以后的次之。從第17 byte后才是真正的壓縮字形。在解壓的時候需要根據(jù)代碼字對照表重構(gòu)編碼。壓縮過程如下:根據(jù)代碼字對照表,構(gòu)建出對應(yīng)的壓縮的二進制串,如圖4所示,此二進制對應(yīng)的十六進制壓縮數(shù)據(jù)如圖5所示。
圖4 構(gòu)建壓縮的二進制串
圖5 十六進制壓縮數(shù)據(jù)(載圖)
壓縮過程是通過PC端的應(yīng)用軟件完成的,而解壓縮過程則是通過液晶電視的嵌入式軟件來實現(xiàn)的,所以必須要盡量避免壓縮算法的復(fù)雜性,避免解壓縮時間過長從而導(dǎo)致OSD顯示緩慢的問題?;谝壕щ娨暻度胧杰浖木窒扌裕疚牡膲嚎s算法采用統(tǒng)一的代碼字壓縮。在解壓時,首先要將所有的壓縮字轉(zhuǎn)化為二進制串,再得到這些二進制串之后按順序?qū)φ沾a字表中的VLC Code項進行字體重構(gòu),這些二進制串擁有的特性就是前綴特性,即最優(yōu)代碼字條件的“解碼應(yīng)當(dāng)不需要任何預(yù)測”,也就是說代碼字是沒有歧義的,順序解碼過程中不會存在一個代碼字有兩種解釋。在解碼到最后會剩余0,沒有代碼字可比對,這是因為在先前的壓縮中,對于最后一個不夠生成1 byte的編碼將用0來補齊。對于不同點陣大小的字體,或者是1 bit,2 bit或4 bit字體,它的壓縮方式都是不變的,均為此法則。
VLC可變字長編碼已經(jīng)導(dǎo)入在液晶電視實際嵌入式軟件中,取得較好的壓縮效率,壓縮比可以達到1.5,大大節(jié)省了Flash的空間,取得了較好的經(jīng)濟效益。
[1]趙智恒.新型顯示器集成電路實用手冊[M].北京:人民郵電出版社,2004.
[2]田明,王群生.實時有效的OSD系統(tǒng)結(jié)構(gòu)的建立與分析[J].電視技術(shù),2003,27(9):56-58.
[3]盧官明.數(shù)字電視原理[M].北京:機械工業(yè)出版社,2004.
[4]基于FLASH介質(zhì)嵌入式存儲方案的設(shè)計與實現(xiàn)[EB/OL].[2011-08-08].http://tech.ddvip.com/2008/07/121740927249554.html.
[5]馮桂,林其偉,陳東華.信息論與編碼技術(shù)[M].北京:清華大學(xué)出版社,2007.