<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > PC機(jī)的MPEG-4編碼原理詳解及實(shí)現(xiàn)

          PC機(jī)的MPEG-4編碼原理詳解及實(shí)現(xiàn)

          作者: 時(shí)間:2011-12-25 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/165964.htm

          程序采用了以下策略選取相鄰塊。定義塊A,B,C,X的DC系數(shù)值分別為DC_A,DC_B,DC_C,DC_X。

          如果DC_A與DC_B的差小于DC_B與DC_C的差,則DC_A與DC_B在數(shù)值上比較接近,即在垂直方向上的數(shù)值比水平方向上更接近,所以采用DC_C來預(yù)測(cè)DC_X;反之,在水平方向的數(shù)值比較接近,即采用DC_A來預(yù)測(cè)DC_X。

          將當(dāng)前塊的DC系數(shù)與用來預(yù)測(cè)的相鄰塊的DC系數(shù),經(jīng)過特定處理后做差,其差存放到當(dāng)前塊的DC位置上,同時(shí)記錄此DC系數(shù)的預(yù)測(cè)方向。

          AC預(yù)測(cè)主要是針對(duì)8×8塊的第一行或者第一列AC系數(shù),其預(yù)測(cè)方向取決于當(dāng)前塊DC系數(shù)的預(yù)測(cè)方向。如圖2所示,如果之前DC預(yù)測(cè)為水平預(yù)測(cè),則當(dāng)前塊X的第一列AC系數(shù)采用A塊的第一列AC系數(shù)預(yù)測(cè),同時(shí)將X的第一列7個(gè)AC系數(shù)各自取絕對(duì)值后相加到變量S1(S1的初始值為0)上。將當(dāng)前塊第一列AC系數(shù)與用來預(yù)測(cè)的相鄰塊A的第一列AC系數(shù)做差,其7個(gè)差值存放到當(dāng)前塊的第一列AC系數(shù)的位置上,同時(shí)將7個(gè)差值各自取絕對(duì)值后相加到變量S2(S2的初始值為0)上。如果之前的DC預(yù)測(cè)為垂直預(yù)測(cè),則只進(jìn)行當(dāng)前塊X的第一行AC系數(shù)預(yù)測(cè),其預(yù)測(cè)步驟同第一列AC系數(shù)的預(yù)測(cè)一樣。

          有時(shí)AC預(yù)測(cè)會(huì)產(chǎn)生較大的預(yù)測(cè)誤差,并沒有達(dá)到節(jié)省位流的目的,因此必須判斷AC預(yù)測(cè)的有效性。在單個(gè)8×8小塊的AC預(yù)測(cè)中,用S1記錄了此小塊的第一行或第一列AC系數(shù)的絕對(duì)值之和,用S2記錄了第一行或第一列預(yù)測(cè)后7個(gè)差值的絕對(duì)和。以一個(gè)宏塊的6個(gè)8×8小塊為單位,將各個(gè)小塊的S1與S2之差相加,得到值S。如果S非零,則此宏塊進(jìn)行AC預(yù)測(cè),其標(biāo)志ACpred_flag置1,否則此宏塊不進(jìn)行AC預(yù)測(cè),ACpred_flag置0。

          1.2.2 之字型掃描

          DC和AC預(yù)測(cè)之后,對(duì)8×8塊的系數(shù)進(jìn)行之字形掃描,共有Zigzag,Zigzag_v(交替垂直掃描)和Zigzag_h(交替水平掃描)三種掃描方式。采用何種掃描方式由三個(gè)要素決定,即幀內(nèi)還是幀間預(yù)測(cè),AC預(yù)測(cè)標(biāo)志ACpred_flag的值,DC系數(shù)的預(yù)測(cè)方向。

          對(duì)于幀內(nèi)預(yù)測(cè)的宏塊,如果AC預(yù)測(cè)標(biāo)志ACpredflag為0,則此宏塊中的6個(gè)8×8塊都使用Zigzag掃描;如果AC預(yù)測(cè)標(biāo)志為1,則此宏塊中的6個(gè)8×8塊將根據(jù)各自的DC預(yù)測(cè)方向決定AC系數(shù)的掃描方向。如果DC預(yù)測(cè)為水平預(yù)測(cè),則此8×8塊使用Zigzag_v掃描方式掃描系數(shù),否則使用Zigzag_h掃描方式。

          對(duì)于幀間預(yù)測(cè)的宏塊,其每個(gè)8×8塊統(tǒng)一采用Zigzag掃描方式掃描系數(shù)。

          8×8的系數(shù)矩陣經(jīng)過之字型掃描后,大部分非零系數(shù)集中在一個(gè)一維數(shù)組的前部,大部分零系數(shù)集中在此一維數(shù)組的后面,根據(jù)此特點(diǎn)便產(chǎn)生了游程。

          1.2.3 游程和熵

          所謂游程編碼就是對(duì)8×8系數(shù)矩陣的AC系數(shù)進(jìn)行特定的處理,使其成為個(gè)數(shù)更少的三維矢量(Last,Run,Level)。其中,Level代表非0系數(shù)的大小。Run代表Level前面連續(xù)0的個(gè)數(shù)。Last代表終止標(biāo)志:其值為0時(shí),表示Level后還有不為0的系數(shù);其值為1時(shí)表示該系數(shù)是最后不為0的數(shù);余下的系數(shù)全為0。游程編碼生成三維矢量,壓縮了數(shù)據(jù)量,然后根據(jù)Last,Run和Level的不同組合作為索引,找到對(duì)應(yīng)Huffman編碼表中的碼字,生成碼流。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();