a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 消費電子 > 設計應用 > H.264解碼糾錯在軟硬件協同系統中的實現

H.264解碼糾錯在軟硬件協同系統中的實現

作者: 時間:2011-03-30 來源:網絡 收藏

1 引言

本文引用地址:http://www.j9360.com/article/166192.htm

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

  在硬件方面,過程中各部分的都有其固定的結構,如果不及時檢出錯誤,會導致如內存溢出、查表錯誤、狀態機進入死循環等。出的圖像會錯位或者變形, 更嚴重的時候整個解碼器會停止運行。

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

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

  2 碼流結構和錯誤檢出

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

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

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

H.264 碼流結構

圖1 H.264 碼流結構

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

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

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

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

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


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉