專利名稱::一種高效avs視頻碼流解析系統(tǒng)及方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及快速AVS視頻碼流的解析領(lǐng)域,具體地說是一種高效AVS視頻碼流解析系統(tǒng)及方法。
背景技術(shù):
:AVS視頻碼流由定長碼字和K階指數(shù)哥倫布碼字組成,其中前者為定長,后者為變長。根據(jù)《信息技術(shù)先進音視頻編碼第2部分視頻》(GB/T2000090.2-2006,以下簡稱AVS協(xié)議),碼流的序列頭、擴展數(shù)據(jù)中均由定長碼字組成,但在I、PB幀頭中,均各自包含3組變長碼字,在條帶和宏塊定義中,各自包含1組、8組變長碼字,以上其余部分皆為定長碼字。同時在塊定義中,則全為變長碼字。這些定長碼字和變長碼字(尤其在宏塊定義中)相互交錯,給快速碼流解析解析造成一定困難。同時,AVS視頻采用的K階指數(shù)哥倫布進行變長碼字編碼,在上面提及的多組變長碼字中,塊定義中的變長碼字尤為復(fù)雜,根據(jù)編碼特性,可能產(chǎn)生從0階到3階的各種碼字,其長度是為任意值。在AVS協(xié)議中,使用ue(v),se(v),me(v)和ce(v)等描述不同類型的語法元素,其中ce(v)使用03階指數(shù)哥倫布碼,其他使用O階指數(shù)哥倫布碼。ue(v)的語法元素的值等于CodeNum本身;se(v):為有符號指數(shù)哥倫布碼,元素的值等于(-1)k+lxCeil(k/2),其中Ceil(x)為取不小于x的最小整數(shù);me(v)需要根據(jù)表進行轉(zhuǎn)換。ce(v)描述的語法元素最為復(fù)雜,需要根據(jù)當(dāng)前碼值確定下一碼字解碼所需的碼表,然后再對下一碼字進行解碼。在對AVS軟件解碼器進行分析后,得到下表:<table>tableseeoriginaldocumentpage4</column></row><table>運動補償和環(huán)路濾波兩個模塊占用了將近一半的CPU資源,在剩余的模塊中,碼流解析和解碼部分也占用了10%20%(多個碼流統(tǒng)計結(jié)果)的CPU資源。在用軟件實現(xiàn)碼流解析和解碼中,通常使用逐位移位比較的方式分析當(dāng)前碼字,因此通常的CPU結(jié)構(gòu)都無法增加碼流解析和解碼的速度。在處理大分辨率圖像時無疑會因為解析解碼問題影響其他模塊正常運行,CPU的資源應(yīng)該更多的分配給能夠提高圖像解碼質(zhì)量的模塊上。另一方面,由于AVS碼流的特殊性,其變長碼字和定長碼字相互交叉,無法使用獨立的定長解析器和變長解析器對碼流分別進行解析,然后再解碼。綜上所述,在AVS的碼流組成中,變長和定長的碼字相互交錯,使整個碼流解析中,即需要進行定長碼解析,又需要變長碼解析。尤其是變長碼部分采用的K階指數(shù)哥倫布方式編碼,由于變長碼的碼長由其前一個碼字內(nèi)容決定,解析時不能像解定長碼那樣預(yù)先知道確定的碼長,只有在解出當(dāng)前碼字之后,才能根據(jù)當(dāng)前碼字的長度確定下一個碼字的開始位置和解碼方式。可見通常使用的單時鐘解析的效率太低,無法達(dá)到實時解析,且碼流解析系統(tǒng)控制非常復(fù)雜。從而導(dǎo)致解析系統(tǒng)電路面積大,且無法滿足特定場合對低功耗的需求。
發(fā)明內(nèi)容為了解決定長、變長指數(shù)哥倫布碼解析,且在增加解析解碼效率的同時能降低解析電路復(fù)雜度和功耗,根據(jù)本發(fā)明的系統(tǒng)及提供的方法,能夠?qū)崿F(xiàn)一種電路面積小、功耗低且快速實現(xiàn)AVS視頻碼流解析的方法。根據(jù)本系統(tǒng)在XilinxVirtexII3000平臺上進行驗證,在27MHz的工作頻率下,可以實現(xiàn)對1080P的AVSJizhimProfile10Mbps碼流進行解析和解碼。本發(fā)明的高效AVS視頻碼流解析系統(tǒng)將AVS碼流中的定長解析和變長解析分為兩條流水線的方式同時進行,在各自的解析流水線中,根據(jù)其碼流特征設(shè)置兩個狀態(tài)機,分別用于控制碼流中定長碼字解析模塊的運作和變長碼字解析模塊的運作,兩個狀態(tài)機中間采用一個fifo(先進先出的緩存)來過渡。模塊根據(jù)fifo空滿狀態(tài)控制定、變長兩個解析模塊的工作起始情況。定長碼字解析模塊負(fù)責(zé)對AVS協(xié)議中定長碼字部分進行解析。解析范圍包括序列頭、1/P/B幀頭、slice頭(除mbjkip—nm字段)中的所有字段。該模塊通過狀態(tài)機控制當(dāng)前和下一個解碼的字段,自動向輸入的原始碼流請求數(shù)據(jù)、統(tǒng)計當(dāng)前碼流中填充bit數(shù)、判斷新slice。變長碼字解析模塊負(fù)責(zé)對AVS協(xié)議中變長碼字部分進行解析。解析范圍包括ue(v)、me(v)、se(v)、ce(v)。并將解析出的碼字送入解碼流水線進行解碼。解碼的流水線負(fù)責(zé)將解析出的變長碼字通過各自不同要求進行解碼,其中ue(v)的語法元素的值等于CodeNum本身;se(v):為有符號指數(shù)哥倫布碼,元素的值等于(-1)k+l><Ceil(k/2),其中Ceil(x)為取不小于x的最小整數(shù);me(v)需要根據(jù)表進行轉(zhuǎn)換。ce(v)描述的語法元素最為復(fù)雜,需要根據(jù)當(dāng)前碼值確定下一碼字解碼所需的碼表,然后再對下一碼字進行解碼。本系統(tǒng)實現(xiàn)的AVS視頻碼流解析模塊,在XilinxVirtexII3000平臺上進行驗證,27MHz工作主頻時,能夠?qū)崿F(xiàn)對1080P的AVSJizhimProfile(glOMbps碼流進行解析和解碼,在增加碼流處理速度的同時,仍保證較低的工作頻率,從而降低實際硬件功耗。下面結(jié)合附圖和實施例對本系統(tǒng)進一歩說明。圖1是本發(fā)明高效AVS視頻碼流解系統(tǒng)的結(jié)構(gòu)框圖。圖2是本發(fā)明實施例的定長解析狀態(tài)機狀態(tài)跳轉(zhuǎn)圖。各狀態(tài)說明如下power—up:上電初始化狀態(tài);sequence—header、sequence—0sequence—12:角牟析條帶頭狀態(tài);i_picturejieader、i—0i—8:解析I幀頭狀態(tài);pb_picture—header、pb—0pb—5:角軍析PB幀頭狀態(tài);slice_header、s_0as—2g:角早析slice(除mb一skip—run字段)狀態(tài);swait:空閑等待狀態(tài)。圖3是本發(fā)明的實施例的變長解析狀態(tài)機狀態(tài)跳轉(zhuǎn)圖。圖3中各狀態(tài)說明如下power_up:上電初始化狀態(tài);decoding—mb一skip一mn:解析mb—skipjun跳過宏塊計數(shù)字段狀態(tài);decoding_mb—type:解析mbjype宏塊類型字段狀態(tài);decoding—mb_part_type:解析mbjart—type宏塊子類型字段狀態(tài);decoding—intra—luma—mode:角軍析intra—luma—mode幀內(nèi)亮度模式字段狀態(tài);decoding—chroma_pred—mode:解析chromaj)red—mode幀內(nèi)色度予頁領(lǐng)!l模式字段狀態(tài);decoding—mb—reference—index:角率析mb—reference一index宏塊參考索弓1字段狀態(tài);decoding—mv—diff_x:解析mv—diff一x運動矢量水平分量差值字段狀態(tài);decoding—mv—diff_y:解析mv—diftj運動矢量垂直分量差值字段狀態(tài);decoding—mbweighting_prediction:角軍析mbweightingjrediction力卩權(quán)予頁觀!j字段狀態(tài);decoding一cbp:解析cbp宏塊編碼模板字段狀態(tài);decoding—mb—qp—delta:解析mb一qp—delta宏塊量化參數(shù)增量字段狀態(tài);decoding—trans_coefficient:角軍析trans—coefficient變化系類女字段狀態(tài);decoding—escape—level—diff:角孕析escape—level—dif據(jù)逸系數(shù)差il;字段狀態(tài);wait—mb—skip—run:等待宏塊跳過狀態(tài);wait_p—skip—or—b—skip:等待p幀或b幀瑕fe過狀態(tài)。圖4是本發(fā)明的實施例的變長解析框架圖。變長數(shù)據(jù)處理對輸入到變長解析模塊的定長數(shù)進行組合,并送入ue等特殊解析模塊-,Ue、me、se、ce:對應(yīng)AVS協(xié)議進行特殊解析的模塊。圖5是本發(fā)明的實施例的解析解碼流程圖。具體實施例方式本系統(tǒng)將AVS碼流中的定長解析和變長解析分為兩條流水線的方式同時進行,參考圖l。在各自的解析流水線中,根據(jù)其碼流特征設(shè)置兩個狀態(tài)機,分別用于slice以上語法元素的8bit狀態(tài)機定長解析和slice以下語法元素的32bit狀態(tài)機變長解析。結(jié)合部分采用一個fifo來過渡。fifo入口寬度為8bit,出口寬度為32bit,深度為8bit*1024=32bit*256。用于結(jié)局變長解析模塊要求的數(shù)據(jù)帶寬要比定長解析模塊大,且對條帶內(nèi)容做速度緩沖。根據(jù)fifo空滿狀態(tài),定、變長兩個解析模塊自動判斷是否開始解析工作。定長碼字解析模塊,對協(xié)議中定長部分進行解析。解析范圍包括序列頭、I/P/B幀頭、條帶頭(除mb—skip—run宏塊跳過計數(shù)字段)中的所有字段。該模塊通過狀態(tài)機控制當(dāng)前和下一個解碼的字段,自動向前級緩存請求原始碼流數(shù)據(jù),參考圖2。統(tǒng)計當(dāng)前碼流中填充bit數(shù)。產(chǎn)生新條帶復(fù)位部分狀態(tài)機寄存器等功能。在對輸入的原始碼流進行解析后,得到的數(shù)據(jù)通常不是字節(jié)對齊的,如果按不對齊的方式存入fifo,則按32bit讀出的時候就有殘留在fifo的數(shù)據(jù)無法讀出,所以在存入fifo的時候需要同時計算存入的數(shù)據(jù)個數(shù)是否是4的倍數(shù),如果最后發(fā)現(xiàn)沒有滿足,則需要人為添加0xFF,以在變長解析模塊中左右移位模塊處理方便。并在最后一個不足8bit的剩余bit上也填充0xl作為補充。定長解析狀態(tài)機開始運行后,每個狀態(tài)都對應(yīng)協(xié)議中需要解析的字段。從Ox000001BxFFFF后開始解析。在定長解析狀態(tài)機中,無論是序列頭還是I/P/B幀頭或是slice頭解析完后,都進入到power—up狀態(tài);當(dāng)slice數(shù)據(jù)向外輸送完后(不解析,僅輸送),也進入power—up狀態(tài)。另外有一個特殊狀態(tài)swait:即定長解析本身不解析字段,但將到下一個slice前的所有數(shù)據(jù)都送給變長解析模塊,再檢測到下一個slice或幀或序列頭被檢測到時,進入powe:Lup狀態(tài)。定長解析過程中,自主控制進入該模塊的碼流數(shù)據(jù),并放入fifo中,一幀開始的時候,模塊收到幀解碼啟動信號,無條件的向外發(fā)出請求,以便馬上得到碼流數(shù)據(jù)。在一般情況時,如果fifo已經(jīng)空,當(dāng)收到當(dāng)前宏塊哥倫布解析完成信號時,將當(dāng)前宏塊編號和當(dāng)前跳過的宏塊進行相加,判斷該值是否超過幀內(nèi)宏塊總數(shù),并同時計算變長模塊中64bit緩存內(nèi)實際剩余bit和填充bit數(shù)目上是否一致。還需要判斷,已經(jīng)解析到幀的最后一個宏塊行,但自身宏塊計數(shù)器沒有數(shù)到最后一個宏塊。通過以上三者共同確定當(dāng)前解析已經(jīng)接近尾聲,但fifo中已經(jīng)沒數(shù)據(jù)或只有填充字節(jié),這時候就需要將原始碼流讀取一部分到fifo中。參照圖3,每次變長解析模塊從fifo中能連續(xù)讀取的是250個周期,當(dāng)最后讀出的數(shù)不是0x000001時,說明以后的數(shù)據(jù)還屬于下一個新的開始,仍然屬于當(dāng)前宏塊范圍內(nèi),所以該條件確定因為fifo容量遠(yuǎn)低于實際slice大小時,需要分若干次將數(shù)據(jù)存入fifo的情況。當(dāng)slice內(nèi)容已經(jīng)定長解析完,模塊發(fā)現(xiàn)下一個0x000001數(shù)據(jù),需要停止新的數(shù)據(jù)進入模塊,在停止請求同時,狀態(tài)機進入swait狀態(tài)。在解析到新的slice處理時,需要對fifo進行復(fù)位。通過狀態(tài)機中swait狀態(tài)和輸入使能共同判斷。當(dāng)狀態(tài)機處于swait狀態(tài)時,說明定長解析模塊已經(jīng)空閑,并等待新的輸入,而此時有新的輸入,所以在此時產(chǎn)生一個fifo的復(fù)位。在復(fù)位后,定長解析模塊花一段時間在定長解析上,而不立即將數(shù)據(jù)存入flfo。fifo作為定長解析和變長解析中間的緩沖模塊,將定長解析后一個slice內(nèi)的剩余碼流一次或多次的方式存放至此,供變長解析模塊調(diào)用。所以當(dāng)初次使用fifo時,當(dāng)存入16x8bit(也就是4x32bit)后,此時變長解析模塊己經(jīng)可以進行解析。變長解析模塊除了變長解析狀態(tài)機外(參考圖4),還包括ue字段解析模塊、me字段解析模塊、se字段解析模塊和變長數(shù)據(jù)處理模塊以及ce模塊(以下統(tǒng)稱這四個解析模塊為特殊變長數(shù)據(jù)解析模塊)。各子模塊分別解析不同形式的變長碼字。而變長數(shù)據(jù)處理模塊用于控制它所包含的各個子模塊的工作順序,數(shù)據(jù)調(diào)度等。變長解析狀態(tài)機用于控制整個變長解析過程個各個步驟順序以及對變長解析中個別定長字段進行解析。變長數(shù)據(jù)處理模塊中含有64bit快速緩存,用于數(shù)據(jù)重組,并每次都完整的將32bit的數(shù)據(jù)送入ue等模塊進行變長碼解析,參考圖5。該模塊由變長解析狀態(tài)機控制啟動,當(dāng)變長解析狀態(tài)機確定下一待解析的字段為變長字段時,啟動變長數(shù)據(jù)處理模塊。在變長碼解析完畢后,反饋32bit中未使用的bit數(shù)給變長數(shù)據(jù)處理模塊,模塊會根據(jù)反饋值調(diào)整64bit緩存中的數(shù)據(jù),并為下一次變長碼解析的數(shù)據(jù)做準(zhǔn)備。根據(jù)本系統(tǒng),當(dāng)兩個解析狀態(tài)機或任何中間數(shù)據(jù)處理模塊發(fā)現(xiàn)解析完的數(shù)據(jù)錯誤或不符合協(xié)議要求時,自動進入各自的power一up狀態(tài),并能一直等待正確的碼流進入,并繼續(xù)解碼。狀態(tài)機對錯誤碼流的定義為l.數(shù)據(jù)無法解析;2.解析結(jié)果和AVS協(xié)議對應(yīng)位置不符合;3.解析結(jié)果超出AVS協(xié)議對應(yīng)位置的數(shù)據(jù)范圍;4.解析結(jié)果符合AVS協(xié)議,但不符合解碼系統(tǒng)給定的參數(shù),如解析的圖像超出解碼器給定的大小范圍等。變長和定長狀態(tài)機同過AVS協(xié)議對碼字判斷,所以能夠兼容不符合AVS協(xié)議的數(shù)據(jù)出現(xiàn)在視頻碼流中,例如出現(xiàn)兩個正常的幀數(shù)據(jù)間出現(xiàn)出錯的數(shù)據(jù)時,本系統(tǒng)有容錯機制。應(yīng)該理解到的是上述實施例只是對本發(fā)明的說明,而不是對本發(fā)明的限制,任何不超出本發(fā)明實質(zhì)精神范圍內(nèi)的發(fā)明創(chuàng)造,均落入本發(fā)明的保護范圍之內(nèi)。權(quán)利要求1.一種高效AVS視頻碼流解析系統(tǒng),對AVS視頻碼流中的定長和變長碼字進行解析,其特征是按照AVS視頻碼流中碼字的特征,將定長部分和變長部分獨立到兩個狀態(tài)機中分別解析,兩者之間使用fifo對碼流進行緩存。2.根據(jù)權(quán)利要求1所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是定長解析模塊由定長解析狀態(tài)機和中間過程處理模塊組成定長解析狀態(tài)機中的每個狀態(tài)均對應(yīng)到AVS視頻協(xié)議中每個定長碼字,包括其長度和碼字含義。定長解析狀態(tài)機自動判斷和確定下一個待解碼的定長碼字。定長解析狀態(tài)機自主控制并請求輸入原始AVS視頻碼流。定長解析模塊在碼流的定長部分結(jié)束后將變長部分的數(shù)據(jù)送入fifo中緩存,并能夠根據(jù)fifo空滿程度,確定是否繼續(xù)將原始AVS碼流輸出到fifo。3.根據(jù)權(quán)利要求1所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是數(shù)據(jù)緩存fifo入口為8bit寬度,出口為32bit寬度,fifo的空滿程度確定變長解析狀態(tài)機的工作狀態(tài)在fifo中有效數(shù)據(jù)不少于32bit時啟動,在fifo中單個slice的所有有效數(shù)據(jù)都是有完畢后關(guān)閉。4.根據(jù)權(quán)利要求3所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是變長解析狀態(tài)機中的每個狀態(tài)均對應(yīng)到AVS視頻協(xié)議的中的每個變長碼字,僅包含碼字含義,不包含碼字長度,變長解析狀態(tài)機在獲知要解碼的碼字含義后,傳送一個定長的32bit數(shù)據(jù)到變長數(shù)據(jù)處理模塊,并在獲知要解碼的碼字含義后,確定需要啟動的特殊數(shù)據(jù)解析模塊,包括ue、me、se、ce解析模塊。5.根據(jù)權(quán)利要求3所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是變長數(shù)據(jù)處理模塊內(nèi)部使用一個64bit的緩存,根據(jù)內(nèi)部緩存中有效bit數(shù)、后級特殊數(shù)據(jù)解析模塊使用的上個32bit中剩余bit數(shù),確定是否需要請求fifo送入下個32bit原始AVS視頻碼流數(shù)據(jù)到緩存中,在每個變長碼字解析后或得到新的32bit原始AVS視頻數(shù)據(jù)后,均重新計算當(dāng)前64bit緩存中有效bit數(shù)。6.根據(jù)權(quán)利要求3和4所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是變長解析模塊中根據(jù)AVS視頻碼流的特征分別設(shè)置ue、me、se、ce解析模塊,稱為特殊數(shù)據(jù)解析模塊,分別用于解析對應(yīng)的AVS視頻碼流,特殊數(shù)據(jù)解析模塊每次對碼流進行解析后,需要反饋給變長數(shù)據(jù)處理模塊給入的32bit中剩余bit數(shù)。7.根據(jù)權(quán)利要求3和4所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是特殊數(shù)據(jù)解析模塊的啟動由變長解析狀態(tài)機控制,每當(dāng)解析完一個變長碼字后,自動停止。8.根據(jù)權(quán)利要求1所述的一種高效AVS視頻碼流解析系統(tǒng),其特征是當(dāng)輸入無法解析的AVS視頻碼流或輸入數(shù)據(jù)非AVS視頻碼流時,能持續(xù)等待直到輸入的數(shù)據(jù)符合可被解析的AVS視頻碼流,并繼續(xù)進行解析。9.一種高效AVS視頻碼流解析方法,其特征在于將AVS碼流中的定長解析和變長解析分為兩條流水線的方式同時進行,在各自的解析流水線中,根據(jù)其碼流特征設(shè)置相應(yīng)的狀態(tài)機,結(jié)合部分采用一個fifo來過渡,根據(jù)fifo空滿狀態(tài),定、變長兩個解析模塊自動判斷是否開始解析工作.-定長解析模塊,對協(xié)議中定長部分進行解析,解析范圍包括序列頭、I/P/B幀頭、除mb—skip—mn宏塊跳過計數(shù)字段的條帶頭中的所有字段,該模塊通過狀態(tài)機控制當(dāng)前和下一個解碼的字段,自動向前級緩存請求原始碼流數(shù)據(jù),統(tǒng)計當(dāng)前碼流中填充bit數(shù),產(chǎn)生新條帶復(fù)位部分狀態(tài)機寄存器;變長解析模塊,對協(xié)議中變長部分進行解析,由變長解析狀態(tài)機控制啟動,當(dāng)變長解析狀態(tài)機確定下一待解析的字段為變長字段時,啟動變長數(shù)據(jù)處理模塊;在變長碼解析完畢后,反饋32bit中未使用的bit數(shù)給變長數(shù)據(jù)處理模塊,模塊會根據(jù)反饋值調(diào)整64bit緩存中的數(shù)據(jù),并為下一次變長碼解析的數(shù)據(jù)做準(zhǔn)備。10.如權(quán)利要求9所述的一種高效AVS視頻碼流解析方法,其特征在于定長解析模塊在對輸入的原始碼流進行解析后,在將得到的數(shù)據(jù)存入fifo時同時計算存入的數(shù)據(jù)個數(shù)是否是4的倍數(shù),如果最后發(fā)現(xiàn)沒有滿足,則需要人為添加0xFF,以在變長解析模塊中左右移位模塊處理方便,并在最后一個不足8bit的剩余bit上也填充0xl作為補充。11.如權(quán)利要求9或10所述的一種高效AVS視頻碼流解析方法,其特征在于當(dāng)兩個解析狀態(tài)機或任何中間數(shù)據(jù)處理模塊發(fā)現(xiàn)解析完的數(shù)據(jù)錯誤或不符合協(xié)議要求時,自動進入各自的power一up狀態(tài),并一直等待正確的碼流進入,然后繼續(xù)解碼。全文摘要本發(fā)明公開了一種高效AVS視頻碼流解析系統(tǒng)及方法,將AVS碼流中的定長解析和變長解析分為兩條流水線的方式同時進行,在各自的解析流水線中,根據(jù)其碼流特征設(shè)置兩個狀態(tài)機,分別用于控制碼流中定長碼字解析模塊的運作和變長碼字解析模塊的運作。兩個狀態(tài)機中間采用一個fifo(先進先出的緩存)來過渡。本發(fā)明能夠快速實現(xiàn)對AVS視頻碼流的定長、變長碼字進行解析,在實現(xiàn)增加解析解析效率的同時能降低解析電路復(fù)雜度,同時該系統(tǒng)實現(xiàn)的AVS視頻碼流解析電路面積小、工作頻率和功耗低。文檔編號H04N7/26GK101646083SQ200910099560公開日2010年2月10日申請日期2009年6月18日優(yōu)先權(quán)日2009年6月18日發(fā)明者亮劉,陳日儀申請人:杭州高特信息技術(shù)有限公司