MPEG-4編碼器在Intel PXA27X平臺上的實(shí)現
0 引 言
隨著(zhù)人們對消費類(lèi)電子產(chǎn)品(如PDA,MP4,HDTV等)需求不斷增加,特別是對高質(zhì)量高清晰多媒體的要求越來(lái)越高,因此視頻質(zhì)量已經(jīng)成為廣大消費者關(guān)注的焦點(diǎn)之一。在視頻的格式方面,一些國際組織和大公司分別提出了自己的標準,如ISO組織的MPEG一2,MPEG一4,微軟的WMV等。
針對Intel公司的PXA27X處理器(這是一個(gè)包含Intel Wireless MMX技術(shù)基于Intel Xscale的處理器),以XVID MPEG一4為基礎,針對MPEG一4在Linux操作系統中實(shí)現視頻的編碼要求。在此首先介紹MPEG一4視頻標準,緊接著(zhù)闡述MPEG-4視頻標準的關(guān)鍵技術(shù)和MPEG一4視頻編碼軟件部分,最后還介紹了優(yōu)化方法和實(shí)際平臺的測試。
l MPEG一4是視頻標準
MPEG一4視頻部分是MPEG一4標準的核心內容之一。既提供傳統的基于幀的編碼方法又提供基于視頻對象(VO)的編碼方法。在某一時(shí)刻,視頻對象以視頻對象平面(VOP)的形式出現,圖1所示為MPEG一4編碼的框架。編碼也主要針對該時(shí)刻視頻對象的形狀、運動(dòng)和紋理這三類(lèi)信息來(lái)進(jìn)行。
2 MPEG一4視頻編碼關(guān)鍵技術(shù)
MPEG一4視頻基于VOP的編碼就是針對運動(dòng)信息、形狀信息和紋理信息等3種信息的編碼技術(shù)。
2.1 形狀編碼
MPEG一4首次引入形狀信息的編碼。VO的形狀信息有2類(lèi):二值形狀信息和灰度形狀信息。二值形狀信息用0,1表示VOP的形狀。二值信息的編碼采用基于塊的運動(dòng)補償技術(shù),可以無(wú)損或有損編碼?;叶刃螤钚畔⒂?~255之間的數值表示VOP的透明程度。對灰度形狀信息的編碼是分別對二值形狀及像素亮度值進(jìn)行編碼。目前對灰度形狀信息的編碼主要采用基于塊的運動(dòng)補償與DCT方法,在不需要形狀信息的應用中(譬如基于規則矩形框幀的視頻編碼),形狀編碼會(huì )被屏蔽掉。這部分編碼是以宏塊為單位進(jìn)行的。
2.2 運動(dòng)估計與補償編碼
類(lèi)似于現有的編碼標準,MPEG一4采用運動(dòng)預測和運動(dòng)補償技術(shù)來(lái)去除圖像信息中的時(shí)間冗余成分,這些運動(dòng)信息的編碼技術(shù)可視為由現有標準向任意形狀的 VOP的延伸。VOP的編碼有3種模式,即幀內編碼模式(I—VOP)、幀間預測編碼模式(P—VOP)和雙向預測編碼模式(B—VOP)。在MFEG一 4中運動(dòng)預測和運動(dòng)補償可以是基于16×16宏塊的,也可以是基于8×8子塊的。為了能適應任意形狀的VOP,MPEG一4引入了圖像填充技術(shù)和多邊形匹配技術(shù)。圖像填充技術(shù)利用VOP內部的像素值外推VOP外的像素值,以此獲得運動(dòng)預測的參考值。對于標準宏塊,采用傳統的基于塊的運動(dòng)估計和補償技術(shù)。
2.3 紋理編碼
VOP視頻的紋理信息可以表示為亮度成分Y和兩個(gè)色度成分Cr,Cb。幀內編碼情況下,紋理信息包含有亮度和色度成分;運動(dòng)補償情況下,紋理信息表示經(jīng)過(guò)運動(dòng)補償后的殘差。紋理編碼的對象可以是幀內編碼模式的I—VOP,也可以是幀間預測編碼模式B—VOP或P—VOP運動(dòng)補償后的預測誤差。在幀內編碼模式中,對于完全在VOP內的像素塊,采用經(jīng)典DCT方法。對于完全位于VOP之外的像素塊則不進(jìn)行編碼:對于部分在VOP內,部分在VOP外的像素塊首先采用圖像填充技術(shù)獲得VOP之外的像素值,之后再進(jìn)行DCT編碼。在幀間編碼模式中,為了對B—VOP和P—VOP運動(dòng)補償后的預測誤差進(jìn)行編碼,將那些位于VOP區域之外的像素值設為128。紋理編碼過(guò)程如圖1所示,DCT變換、量化、掃描及變長(cháng)編碼,這些過(guò)程與現有標準基本相同。
3 MPEG一4是視頻編碼軟件
MPEG一4是軟件編碼是一個(gè)比較大的工程,項目用到的主要函數有:
mp4_encoder_init:初始化編碼的參數,如視頻大小尺寸、碼流、緩沖大??;
encode_MPEG一4:編碼調用的總函數,文本是基本層;
encode_pvop_MPEG一4對P幀的VOP的編碼的總函數;
ippiBlockMatcn_Imeger_16x16_MVFAST:運動(dòng)搜索MVFAST(Motion Vector Field AdaDtive Search Technique)。
下面是幀間宏塊編碼的函數:
encode_inter_mb_MPEG一4
(1)lookup_uvmv_MPEG一4:查找色度圖像塊的運動(dòng)矢量;
(2)ippiComputeTextureErrorBlock_SAD_8u16s:計算塊殘余的紋理誤差;
(3)encode_block_inter_MPEG一4:DCT變化和量化每塊的系數。這還得反變化,來(lái)重構下幀的參考幀;
(4)create_mb_MPEG一4:得到宏塊編碼的信息;
(5)ippiEncodeMV_MPEG一4_8u16s:運動(dòng)矢量和紋理殘余的編碼;
(6)ippiEncodeVLCZigzag_Inter_MPEG一4_16slu:zigzig掃描和變長(cháng)編碼。
IPP的函數合理使用,可以提高性能。如ip—piBlockMatch_InIeger_16x16_MVFAST這個(gè)函數就比ippiMotionEstimation_16x16_MVFAST減少3倍時(shí)間。這個(gè)函數是占正個(gè)系統最多的時(shí)間之一。
4 MPEG一4是視頻編碼優(yōu)化和結果
這里是針對Intel公司的PXA27X處理器,MPEG一4計算量復雜,特別是運動(dòng)搜索,必須對其必要的優(yōu)化,以滿(mǎn)足實(shí)時(shí)編碼的要求。編譯優(yōu)化是靜態(tài)優(yōu)化,優(yōu)化編譯器可以自動(dòng)完成程序段和代碼塊范圍內的優(yōu)化問(wèn)題,但由于對算法的流程很難獲取,所以人工優(yōu)化是不必可少的??墒褂脙嚷?lián)函數,Wireless MMX指令編寫(xiě),如WLDRD和WMACS,特別在對數據處理時(shí),打包指令是必不可少的指令。合理分配指令周期流水線(xiàn)也是重點(diǎn),如WLDRD需要4個(gè)周期,而WUN—PCKEL只需要1個(gè)周期,使用IPP庫函數將大量節約開(kāi)發(fā)時(shí)間和提高性能等,按照實(shí)際的工程的需要編寫(xiě)指令。當然對算法的本身優(yōu)化也不必可少,如運動(dòng)搜索,運動(dòng)補償算法,將這些函數優(yōu)化運算時(shí)間大量減少。還有對數據搬移方面,如何有效應用硬件資源也將提高運行的性能,如DMA、緩存、寄存器等。
這里的試驗平臺是南望信息產(chǎn)業(yè)有限公司PDA,主頻可達624 MHz。視頻大小(480×272)透過(guò)大量的試驗,測試表明MPEG一4編碼可以滿(mǎn)足用戶(hù)拍視頻需求,速度可達到20幀/s,而且有較高的壓縮率,碼流比較低,質(zhì)量也不錯。圖3,4為實(shí)際拍攝2幀圖像。
5 結 語(yǔ)
針對Intel公司的PXA27X微處理器開(kāi)發(fā)平臺,在Linux操作系統中實(shí)現視頻編碼的功能。但是消費類(lèi)產(chǎn)品對視頻的畫(huà)面有更高的要求,同時(shí)由于視頻編碼需要消耗大量的電源,電源的管理仍是視頻開(kāi)發(fā)的研究重點(diǎn)。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論