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

          新聞中心

          EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > H.264解碼糾錯在軟硬件協(xié)同系統(tǒng)中的實現(xiàn)

          H.264解碼糾錯在軟硬件協(xié)同系統(tǒng)中的實現(xiàn)

          作者: 時間:2011-03-30 來源:網(wǎng)絡(luò) 收藏

          1 引言

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

             視頻壓縮標(biāo)準(zhǔn)具有很高的壓縮效率和很好的網(wǎng)絡(luò)支持, 非常適應(yīng)于無線多媒體和基于Internet 的應(yīng)用。在信息傳輸?shù)倪^程中,不可避免的就是噪聲。 本身具有很好的抗噪聲技術(shù),如SPS,PPS 和圖像數(shù)據(jù)的分開打包, 一幀中可有多個Slice,靈活宏塊順序(FMO)等。但是也有很多情況錯誤無法被完全修復(fù)。 具有很高的壓縮率(7~50 倍),這就意味著圖像中的冗余已經(jīng)被大大消除,要從其余的碼流中恢復(fù)圖像有很大困難。此外,H.264 壓縮標(biāo)準(zhǔn)采用變長編碼的CAVLC 和CABAC,一旦在這些地方出錯, 器將無法判斷下一個變長碼開始的位置,導(dǎo)致錯誤的擴散。

            在硬件方面,過程中各部分的都有其固定的結(jié)構(gòu),如果不及時檢出錯誤,會導(dǎo)致如內(nèi)存溢出、查表錯誤、狀態(tài)機進入死循環(huán)等。出的圖像會錯位或者變形, 更嚴(yán)重的時候整個解碼器會停止運行。

            所以在解碼器中加入功能,及早地發(fā)現(xiàn)碼流噪聲并將解碼器恢復(fù)到正常的狀態(tài)是非常有意義而且非常必要的。

            本項目的解碼器是基于SoC 的ASIC 解決方案,它具有高速、低功耗、低成本的特點。添加功能可以提高解碼器的適用性和穩(wěn)定性,另一方面,應(yīng)該盡量減少模塊對原有芯片的面積和速度的影響。

            2 碼流結(jié)構(gòu)和錯誤檢出

            H.264 標(biāo)準(zhǔn)壓縮的碼流具有嚴(yán)格的格式。公共信息被提取出來作為SPS(序列參數(shù)集), PPS(圖像參數(shù)集)單獨打包,與像素信息分離。SPS 和PPS 是碼流中極為重要的信息,將它們單獨打包可以在傳輸環(huán)境較差的情況下多次傳送,這在一定程度上增強了碼流傳輸?shù)目垢蓴_能力。每個包被稱作一個NAL 單元,根據(jù)NAL 類型,各個數(shù)據(jù)包中的數(shù)據(jù)按照協(xié)議中規(guī)定的句法元素順序緊密排列。這為糾錯提供了兩點便利:(1)各個NAL 中的錯誤不會蔓延,即如果當(dāng)前NAL 中檢測出了錯誤而且又無法確定錯誤終止的地方,那么可以將當(dāng)前包丟棄,直到下一個NAL 開始;(2)很多句法元素都有其固定的范圍。檢測解碼出的元素值是否超出范圍限制是一個非常有用的辦法,也能盡早發(fā)現(xiàn)錯誤,避免解碼器進入異常狀態(tài)。

            H.264 視頻碼流包括五個層次的信息: 序列層,圖像層,片層,宏塊層,子宏塊層,分別與NAL 類型的SPS,PPS,Slice(包括片頭,宏塊,子宏塊信息)相對應(yīng)。

            宏塊是編解碼處理的基本單位,也是進行錯誤修補的基本單位。H.264 視頻碼流結(jié)構(gòu)如圖1 所示。

          H.264 碼流結(jié)構(gòu)

          圖1 H.264 碼流結(jié)構(gòu)

            在上面的幾個層次中,每一層都具有其特定的句法元素結(jié)構(gòu),以及相應(yīng)句法的處理辦法,整個錯誤檢測功能就是基于此的。目前可以檢測到的錯誤基于以下幾類:

           ?。?)保留位錯誤。這是最容易檢測出的錯誤。在H.264 協(xié)議中規(guī)定了一些保留位, 如NAL 起始的forbidden_zero_bit,SPS 中的reserved_zero_4bits 等。解碼器順序讀入碼流時要確定這些保留位的值是正確的,如果有誤,就應(yīng)該丟棄當(dāng)前的包或者標(biāo)記錯誤,做進一步的處理。

           ?。?)句法元素值不在指定范圍。大多數(shù)的句法元素,尤其是在SPS 和PPS,都有一個指定的范圍。如用于計算最大幀數(shù)的log2_max_frame_num_minus4 必須在0~12 之間,如果讀入的值超出這個范圍,即可以判斷當(dāng)前讀入的碼流有錯誤。

            (3)相關(guān)句法元素矛盾。有一些句法元素讀入了一個錯誤的值,但仍然在正確的范圍內(nèi),單單通過當(dāng)前語句是無法檢測出的。這時候就要利用句法元素之間的相關(guān)性,判斷讀出的值是否合理。例如PPS 中要指定當(dāng)前圖像所引用的序列參數(shù)信息, 即PPS->seq_parAMEter_set_id。如果當(dāng)前引用的SPS 的ID 在所有收到的SPS 中不存在, 即可判斷SPS 或者當(dāng)前PPS 有一方出了問題; 對于slice_type 的I,B,P 各種類型,mb_type 的查表方法也不同, 如果在I slice 中出現(xiàn)了幀間預(yù)測的宏塊類型,也可以判斷出錯。

            以上方法都是可以通過句法元素本身的值判斷出來的,可以在讀入碼流的同時處理,即在處理PPS、SPS 的相應(yīng)語句后加入判斷,不會對原有解碼器造成太大的影響。


          上一頁 1 2 3 下一頁

          評論


          相關(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); })();