王守業(yè) 謝偉軍
JPEG標(biāo)準(zhǔn),即ISO/IEC1091-1,雖然是對靜態(tài)圖像制訂的,但也可用于對連續(xù)運(yùn)動圖像進(jìn)行壓縮,壓縮時將連續(xù)圖像的每一個幀視為一幅靜止圖像進(jìn)行壓縮,若壓縮器/解壓器速度足夠快,還可以實時處理視頻信號,構(gòu)成以JPEG為基礎(chǔ)的實時視頻存儲/回放系統(tǒng)。
與MPEG相比,JPEG沒有利用圖像幀間相關(guān)信息,壓縮比沒有MPEG高,但JPEG圖像數(shù)據(jù)以一幀一幀為基礎(chǔ)的特點(diǎn)使得對其處理較為方便。經(jīng)JPEG壓縮后視頻圖像數(shù)據(jù)量大大減小,同樣的硬盤可以存儲更長時間圖像,因而在現(xiàn)代數(shù)字視頻編輯、處理中大量運(yùn)用了JPEG文件格式,在因特網(wǎng)上只允許采用兩種圖像格式,JPEG就是其中之一,同時JPEG編碼器的復(fù)雜度及成本都遠(yuǎn)低于MPEG。因此JPEG編碼器比MPEG編碼器獲得了更為廣泛的實際應(yīng)用,了解JPEG及JPEG處理器具有重要的現(xiàn)實意義。
JPEG標(biāo)準(zhǔn)提供了4種壓縮算法(或稱4種系統(tǒng)):基線有損壓縮算法、擴(kuò)展有損壓縮算法、無損壓縮算法、分層壓縮算法,并要求所有的JPEG編碼器和解碼器都必須支持基線算法。
1 JPEG基線系統(tǒng)
1.1 基線系統(tǒng)算法
基線系統(tǒng)即基線有損壓縮算法,是一種基于DCT(Discrete Cosine Transfer)的壓縮算法,其壓縮運(yùn)算過程為:
(1)以8×8像素塊為單位,對圖像數(shù)據(jù)進(jìn)行DCT變換,將數(shù)據(jù)轉(zhuǎn)換到頻率域,經(jīng)變換后得到由64個DCT系統(tǒng)構(gòu)成的DCT矩陣。
(2)對DCT系統(tǒng)進(jìn)行排序、量化,經(jīng)DCT變換后由于能量重新分布,其低頻分量系數(shù)變得很大,超出了原來碼長表達(dá)范圍,需重新量化以縮小動態(tài)范圍,此步驟使數(shù)據(jù)得到第一次壓縮。量化步長對每個系數(shù)是不同的,原則是頻率越低量化步長越小,以便保留較多的低頻分量,DCT矩陣的左上角系數(shù)代表了能量較高的圖像低頻分量,其數(shù)值較大而量化步長小,越向右下角系數(shù)數(shù)值越小而量化步長大,如此量化后DCT矩陣右下角高頻部分很多系數(shù)變成0,也就是說高頻分量被丟棄,故這種算法是有損的,64個DCT系數(shù)的量化步長構(gòu)成了量化表。在量化前要把DCT系數(shù)進(jìn)行排序變成一維序列,排序按圖1方式進(jìn)行,稱為“Z”形掃描,其目的是將高頻分量排在一起,經(jīng)量化后得到連續(xù)的0值,在下一步編碼過程中使數(shù)據(jù)得到最大限度的壓縮。

圖1 “ Z”形掃描
順便說明的是,JPEG壓縮率也是由這一步?jīng)Q定的,只要將量化表乘一固定的因子即可,若因子>1,則量化步長增大,壓縮比也增加,反之壓縮比減小。在運(yùn)動JPEG中甚至可以根據(jù)上一幅圖像壓縮結(jié)果動態(tài)調(diào)整該因子,以使每一幀圖像數(shù)據(jù)量大致相等。
(3)對量化的DCT系數(shù)進(jìn)行Huffman編碼,這是一種可變長編碼技術(shù),對出現(xiàn)概率高的碼字分配以較短的碼長,對出現(xiàn)概率低的碼字分配以長的碼長,這樣編碼后的數(shù)據(jù)將大大少于編碼前的數(shù)據(jù),從而達(dá)到數(shù)據(jù)壓縮的目的。編碼時用到的編碼表稱為Huffman表。
解壓縮過程與上述壓縮過程相反,首先根據(jù)Huffman表對壓縮數(shù)據(jù)進(jìn)行Huffman解碼得到量化的DCT系數(shù),再根據(jù)量化表進(jìn)行反量化得到DCT系數(shù),對DCT系數(shù)重排序再進(jìn)行IDCT變換即得到像素數(shù)據(jù),當(dāng)然此時數(shù)據(jù)與原始數(shù)據(jù)是有差別的。
1.2 JPEG標(biāo)記段(mark segment)及標(biāo)記(mark)
JPEG標(biāo)準(zhǔn)可以用于對不同像素結(jié)構(gòu)、不同色度空間、不同掃描方式圖像進(jìn)行壓縮;另外,不同應(yīng)用領(lǐng)域?qū)D像壓縮的要求不同,采用的量化表及Huffman表也不同。為了便于在不同系統(tǒng)間壓縮數(shù)據(jù)文件的交換處理,JPEG標(biāo)準(zhǔn)中定義了幾種標(biāo)記段及相應(yīng)標(biāo)記,這些標(biāo)記段及標(biāo)記存在于JPEG文件中,供解碼器解碼時識別使用,標(biāo)記段由標(biāo)記及段體組成,標(biāo)記是以FF開頭的字,第二字節(jié)為非0的16進(jìn)制數(shù),標(biāo)記前可以是若干連續(xù)字節(jié)的FF,如果在數(shù)據(jù)中有FF則以FF00表示以便與標(biāo)記區(qū)別。以下是JPEG基線系統(tǒng)中定義的一些標(biāo)記:
(1)圖像開始標(biāo)記SOI(Start of Image)FFD8
SOI只有標(biāo)記沒有段體,表示JPEG數(shù)據(jù)文件的開始,是JPEG文件的第一個標(biāo)記,也是JPEG文件的第一個字。
(2)幀開始段SOF0(Start of Frame)FFC0
SOF由FFC0及若干字節(jié)組成,定義每個色彩分量使用的量化表及其塊數(shù)。
(3)掃描開始段SOS(Start of Scan)FFDA
SOS由FFDA及若干字節(jié)組成,定義每個色彩分量使用的Huffman表。
(4)圖像結(jié)束標(biāo)記EOI(End of Image)FFD9
EOI緊隨壓縮數(shù)據(jù)最后一個字節(jié),也是JPEG文件的最后一個字,表示JPEG數(shù)據(jù)文件的結(jié)束。
(5)應(yīng)用定義段APPn,FFE0-FFEF
JPEG標(biāo)準(zhǔn)允許一幅圖像數(shù)據(jù)中最多有16個APP段,APP在壓縮時插入用于說明該JPEG文件的應(yīng)用場合等,解壓縮時該段直接由解碼器讀出傳遞給使用者。
(6)說明段COM,FFFE
COM也是在壓縮時插入用于該JPEG文件進(jìn)行注釋、備忘等,解壓縮時該段直接由解碼器讀出傳遞給使用者。
(7)量化表定義段DQT,FFDB,記錄編碼時用到的量化表,解碼時傳遞給解碼器使用。
(8)Huffman表定義段DHT,FFC4,記錄編碼時用到Huffman表,解碼時傳遞給解碼器使用。
以上標(biāo)記段除A,B,C,D是JPEG標(biāo)準(zhǔn)要求必須有的以外,并不一定都要出現(xiàn)在JPEG文件中,例如若壓縮和解壓縮都采用專用芯片ZR36060時,DQT和DHT存在其RAM中是已知的,故文件中可以不加DQT,DHT以便減少數(shù)據(jù)量,如果壓縮/解壓縮應(yīng)用于不同的系統(tǒng)之間,則數(shù)據(jù)文件必須包含DQT及DHT即量化表和Huffman表,否則解碼器將無法進(jìn)行解壓縮。
2 JPEG專用芯片ZR36060
JPEG壓縮/解壓縮可以由軟件完成,也可采用專用硬件。自從JPEG標(biāo)準(zhǔn)發(fā)表以來很多公司投入了對其專用芯片的開發(fā)研究并推出了各自的產(chǎn)品,ZR36060就是其中一種用于JPEG壓縮/解壓縮的專用芯片。
ZR36060是美國ZORAN公司生產(chǎn)的一種單片JPEG編/解碼芯片,其片上集成了光柵—塊(raster to block)、塊—光柵(block to raster)轉(zhuǎn)換、條(strip)緩存、JPEG編/解碼芯核,FIFO,同步發(fā)生器等部件,視頻端口支持8bit或16bit YUV輸入,能進(jìn)行靜態(tài)或運(yùn)動圖像的JPEG壓縮及解壓縮,廣泛應(yīng)用于數(shù)字相機(jī)、視頻捕捉卡、數(shù)字視頻處理等領(lǐng)域。
2.1 ZR36060特點(diǎn)圖1
(1)單片結(jié)構(gòu),片上集成了JPEG壓縮/解壓縮所需全部模塊。
(2)運(yùn)動JPEG壓縮/解壓縮功能,能夠處理高達(dá)25幀/s的方像素及CCIR PAL或30幀/s的方像素及CCIR NTSC實時視頻信號。
(3)多種模式數(shù)據(jù)率控制,可以很方便地改變壓縮比。
(4)視頻數(shù)據(jù)輸入端口支持多種視頻解碼器( A/D變換器),如Philips,Brooktree,Samsung等。
(5)視頻總線寬度可以是8或16bit。
(6)同步發(fā)生器可工作于主或從模式。
(7)控制端口支持標(biāo)準(zhǔn)微處理器操作。
(8)提供多種片上視頻處理:視頻混合(mix),尺度變換(scale)、剪切(crop)及背景色輸出等。
(9)壓縮數(shù)據(jù)可以主方式從壓縮數(shù)據(jù)端口或以從方式從控制端口輸出,兩種方式都有握手功能以便進(jìn)行數(shù)據(jù)流控制。
2.2 ZR36060功能框圖及功能
圖2是ZR36060內(nèi)部框圖,其數(shù)據(jù)端口有3個分別是:
(1)控制端口:用來完成對ZR36060的初始化,當(dāng)芯片工作于數(shù)據(jù)從方式時,還用于輸出或輸入壓縮數(shù)據(jù)。
(2)視頻端口:壓縮時輸入原始視頻數(shù)據(jù),解壓縮時輸出解壓后的視頻數(shù)據(jù),除數(shù)據(jù)線外還有行、場同步,時鐘等必要信號線,同步可工作于主方式或從方式,可直接與視頻解碼器或幀存儲器接口以完成實時的運(yùn)動JPEG處理。
(3)壓縮數(shù)據(jù)端口:用于數(shù)據(jù)主方式時輸出或輸入壓縮數(shù)據(jù)。

圖2 ZR36060內(nèi)部框圖
2.3 控制寄存器及標(biāo)記段RAM
ZR36060中共有1 024個存儲單元,一部分用于控制寄存器,另一部分存放JPEG標(biāo)準(zhǔn)規(guī)定的各標(biāo)記段。
通用控制寄存器000-025H,控制初始化、中斷、數(shù)據(jù)方式、壓縮/解壓縮、壓縮率、數(shù)據(jù)文件大小等參數(shù)。
視頻寄存器030--051,同步主/從方式、極性,視頻處理、同步發(fā)生器參數(shù)等。
JPEG標(biāo)記段060-3FF,SOF,SOS,APP,COM,DRI,DQT,DHT等,這些標(biāo)記段將根據(jù)控制寄存器的內(nèi)容決定是否插入壓縮數(shù)據(jù)中以供將來解壓縮使用。
2.4 壓縮/解壓縮數(shù)據(jù)流
(1)壓縮狀態(tài):壓縮時數(shù)字Y,C信號由Y,C總線進(jìn)入ZR36060,經(jīng)視頻接口進(jìn)入條存儲器(Strip Memory)緩存,之后進(jìn)入JPEG處理機(jī)進(jìn)行壓縮,壓縮后的JPEG數(shù)據(jù)進(jìn)入一個長度512的先入先出寄存器(FIFO)緩存,再經(jīng)數(shù)據(jù)(數(shù)據(jù)主方式)或控制端口(數(shù)據(jù)從方式)輸出。
在數(shù)據(jù)主方式下,ZR36060輸出CCS信號指示數(shù)據(jù)有效并輸出CWR信號作為數(shù)據(jù)選通,外部設(shè)備若來不及接收數(shù)據(jù)可向ZR36060的BUSY引腳發(fā)BUSY請求,ZR36060停止向外輸出數(shù)據(jù),暫時將數(shù)據(jù)壓入FIFO,若FIFO溢出,則JPEG處理機(jī)停止壓縮,視頻數(shù)據(jù)暫時壓入條存儲器,當(dāng)外設(shè)撤消BUSY請求后,ZR36060繼續(xù)壓縮、輸出數(shù)據(jù),如果外設(shè)速度太慢導(dǎo)致條存儲器也溢出,則ZR36060將給出錯誤指示并在中斷允許的情況下發(fā)出中斷請求。
在數(shù)據(jù)從方式下,由外設(shè)向ZR36060讀數(shù)據(jù),BUSY引腳改由ZR36060驅(qū)動輸出,若ZR36060內(nèi)部FIFO無數(shù)據(jù)可讀,BUSY將變?yōu)橛行б酝ㄖ庠O(shè),此時外設(shè)應(yīng)等待BUSY變?yōu)闊o效。若外設(shè)讀數(shù)據(jù)速度太慢也將導(dǎo)致出錯,數(shù)據(jù)壓滿FIFO和條存儲器,其過程與主方式相同。
(2)解壓縮狀態(tài):解壓縮的數(shù)據(jù)流向與壓縮剛好相反,JPEG數(shù)據(jù)由數(shù)據(jù)或控制端口進(jìn)入FIFO,之后進(jìn)入JPEG處理機(jī)進(jìn)行解壓縮,視頻數(shù)據(jù)則通過條存儲器輸出到Y,C總線。
解壓縮狀態(tài)下數(shù)據(jù)的主/從方式、握手信號、出錯機(jī)制等均與壓縮狀態(tài)相同。
由于采用FIFO、條存儲器,瞬時速度很高的JPEG數(shù)據(jù)得以緩存,外設(shè)可以平均速率訪問ZR36060,降低了對外設(shè)的要求。
3 實時視頻存儲/回放系統(tǒng)
3.1 系統(tǒng)構(gòu)成
以ZR36060為核心,構(gòu)成了基于JPEG的實時視頻存儲/回放系統(tǒng),用于電視信號的數(shù)字存儲/回放,其框圖如圖3所示。

圖3 實現(xiàn)視頻壓縮/存儲系統(tǒng)框圖
整個系統(tǒng)由以下幾部分構(gòu)成:
(1)視頻解碼器:視頻解碼器是數(shù)字化視頻處理系統(tǒng)中必不可少的一環(huán),其功能是將輸入模擬復(fù)合全視頻信號進(jìn)行色度解碼及A/D變換,輸出數(shù)字化的亮度、色度信號。本系統(tǒng)采用了Brooktree公司的BT819A,其亮色分離、色度濾波等均采用數(shù)字處理,水平、垂直采樣率、輸出格式等均可通過IIC總線編程設(shè)置,該芯片支持處理PAL及NTSC制式,在本系統(tǒng)中將其設(shè)置為CCIR601 PAL隔行掃描格式,樣點(diǎn)數(shù)為720×288,Y∶U∶V=4∶2∶2。
(2)視頻編碼器:視頻編碼器的功能與視頻解碼器相反,將數(shù)字的亮、色信號進(jìn)行D/A變換并重新編碼為復(fù)合全視頻信號或RGB輸出。視頻編碼器在數(shù)字電視、數(shù)字視頻處理中的作用是恢復(fù)模擬信號,用于末級激勵視放或標(biāo)準(zhǔn)視頻輸出。本系統(tǒng)采用Brooktree公司的BT856完成視頻編碼,通過IIC總線可將其編程設(shè)置為PAL及NTSC復(fù)合視頻或RGB輸出,芯片內(nèi)還固化了標(biāo)準(zhǔn)75/0/75/0彩色信號,可作為無信號時背景輸出。
(3)存儲器SDRAM及其讀寫控制器:系統(tǒng)使用兩片SDRAM作為數(shù)據(jù)存儲器,容量為2×8MB,設(shè)計存儲15s左右的圖像,平均數(shù)據(jù)率約1MBps,每幀隔行掃描的圖像數(shù)據(jù)被壓縮至20kB左右,此壓縮比下的回放圖像在正常觀看距離基本觀察不出失真。
JPEG芯片輸入/輸出數(shù)據(jù)流瞬時速率最高可達(dá)到20 MBps,平均速率最高也達(dá)到了2~3 MBps,為了與SDRAM接口,系統(tǒng)使用了一片EPLD來控制數(shù)據(jù)存取,受MCU及JPEG芯片控制,EPLD產(chǎn)生SDRAM的地址信號、行列選通、讀寫控制等,優(yōu)點(diǎn)是:控制靈活,結(jié)構(gòu)緊湊,成本低。
(4)JPEG編/解碼器ZR36060:是整個系統(tǒng)的核心,通過視頻總線與BT819A,BT856連接,壓縮數(shù)據(jù)則通過EPLD控制對SDRAM存取。
(5)微處理器CPU:系統(tǒng)控制由單片微處理器完成,采用了SAMSUNG KS88C8216電視專用單片機(jī),該單片機(jī)具有遙控接收、OSD等功能,用于完成對系統(tǒng)各部分初始化操作、壓縮/解壓縮控制、接收遙控指令、提供OSD顯示等。
(6)輸入/輸出切換:完成壓縮/解壓縮之間視頻信號的切換。
3.2 系統(tǒng)功能介紹
(1)存儲功能:系統(tǒng)加電復(fù)位后即進(jìn)入存儲狀態(tài),將視頻信號進(jìn)行A/D變換、JPEG壓縮、存入SDRAM中,壓縮是連續(xù)進(jìn)行的,SDRAM存儲區(qū)采用循環(huán)寫入方式,寫滿后地址指針復(fù)位將舊數(shù)據(jù)覆蓋,這種工作方式類似飛機(jī)上的“黑匣子”,稱之為“前向存儲”。
(2)回放功能:存儲過程中若收到回放遙控指令,系統(tǒng)將進(jìn)入解壓縮狀態(tài),解壓縮從壓縮停止數(shù)據(jù)的下一個數(shù)據(jù)開始,將SDRAM中的JPEG數(shù)據(jù)送入ZR36060,當(dāng)解壓縮到上次停止位置時停止回放。
(3)停止:回放過程中再次按下回放鍵則中止回放進(jìn)入停止?fàn)顟B(tài),SDRAM中數(shù)據(jù)保持不變,可以無限次進(jìn)行回放。在停止?fàn)顟B(tài)下按存儲鍵則再次開始壓縮,進(jìn)入存儲狀態(tài)。
4 技術(shù)難點(diǎn)
4.1 SOI識別
ZR36060解壓縮時要求其輸入數(shù)據(jù)必須從SOI開始,由于圖像是按幀變化的,壓縮數(shù)據(jù)也是變化的,在循環(huán)存儲寫入方式下壓縮停止點(diǎn)下一個存儲數(shù)據(jù)是不可預(yù)料的,在解壓縮開始時必須對存儲器進(jìn)行搜索以找到下一個SOI即FFD8,這一工作由EPLD完成,解壓縮開始時由EPLD從壓縮停止點(diǎn)開始向下搜索存儲區(qū),搜索到FFD8后從FFD8開始向ZR36060寫入壓縮數(shù)據(jù)。
4.2 場序識別
在隔行掃描情況下,一幀圖像被分為奇偶兩場,JPEG標(biāo)準(zhǔn)用于運(yùn)動圖像壓縮時壓縮數(shù)據(jù)是場間獨(dú)立的,單純從壓縮數(shù)據(jù)無法區(qū)分場序。由于循環(huán)寫入方式的原因,壓縮停止點(diǎn)下一場的場序也是不可預(yù)料的,如果不加以處理將產(chǎn)生奇偶場顛倒,前期開發(fā)過程中確實出現(xiàn)了這一情況,其表現(xiàn)為水平方向線條上下抖動,使用大屏幕電視觀察則更加明顯。
由于同步發(fā)生器有場序指示且變化遠(yuǎn)小于CPU處理速度,只要知道解壓縮第一場場序,由CPU控制等待正確場序到來時開始解壓縮就不會出現(xiàn)場序顛倒。有兩種方法可以得到場序信息:一是改工作方式為后向存儲,壓縮時以固定場序開始,寫滿存儲區(qū)后停止,不再存儲,解壓縮從壓縮開始點(diǎn)開始,如此則場序也是已知的。另一種方法是在數(shù)據(jù)中插入場序信息,解壓縮時根據(jù)插入信息判斷場序。
該系統(tǒng)設(shè)計用于電視機(jī)中對電視節(jié)目的實時存儲回放,若采用后向存儲將大大降低其使用價值,因而實際中采用了后一種方法。
為簡化系統(tǒng)設(shè)計,經(jīng)過與ZORAN公司技術(shù)人員探討,根據(jù)ZR36060特點(diǎn),提出了根據(jù)奇偶場序?qū)懭氩煌?FONT face="Times New Roman">SOI的方法:在壓縮時由BT819場序標(biāo)志信號控制邏輯電路在奇場時將ZR36060輸出的SOI改為FFFF,偶場時SOI不變?nèi)詾?FONT face="Times New Roman">FFD8,解壓縮時仍然由EPLD搜索FFD8,這樣解壓縮將固定從偶場開始,奇場時ZR36060能夠識別FFFF并重構(gòu)SOI,不會破壞ZR36060的工作。
4.3 錯誤識別
ZR36060工作時會發(fā)生若干錯誤,如信號太弱或用戶換臺引起同步紊亂、外部數(shù)據(jù)瓶頸導(dǎo)致數(shù)據(jù)溢出等均會引起錯誤,錯誤嚴(yán)重時甚至引起死機(jī),導(dǎo)致系統(tǒng)癱瘓。
為防止這種情況發(fā)生,有必要對ZR36060的工作狀態(tài)進(jìn)行檢測,在出錯時及時予以糾正,檢測以ZR36060的握手信號作為標(biāo)志,正常時隨著數(shù)據(jù)流交換握手信號是高低電平不斷變化的,出錯后數(shù)據(jù)流停止則握手信號也隨之停住不動,微處理器檢測到握手信號停止變化超過1秒時判斷出錯,重新對系統(tǒng)進(jìn)行初始化。
5 與電視機(jī)接口
系統(tǒng)與電視機(jī)接口包括視頻接口、OSD接口、遙控接口等。
本系統(tǒng)串接于電視主板復(fù)合視頻通路,由微處理器控制電子開關(guān)切換,存儲/停止時將輸入輸出信號直通,回放時將輸出信號切換為解壓縮輸出。
OSD輸出以二極管“或”邏輯接入主板CPU OSD信號,行、場同步則直接由主板引入,在進(jìn)行存儲、回放等操作時微處理器輸出OSD信號提供屏顯提示,屏顯位置則進(jìn)行了仔細(xì)選擇以避開主板OSD信息。
遙控信號直接取自主板遙控接收頭,經(jīng)微處理器識別得到存儲、回放等遙控命令,同時還要對主板遙控命令進(jìn)行識別判斷,以維持整機(jī)控制邏輯的完整,例如回放時若收到換臺命令,則中止回放進(jìn)入停止?fàn)顟B(tài)。
視頻信號實時存儲回放是數(shù)字視頻技術(shù)的新領(lǐng)域,這方面筆者做了一些嘗試,愿與同行們共同交流、探討,促進(jìn)該技術(shù)的發(fā)展。
作者單位:廣東珠海建盛電子公司 郵編: 519000