本站小編為你精心準備了CAVLC解碼查表優化算法參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
《電視技術雜志》2014年第十一期
在H.264/AVC的基本檔次中,CAVLC作為一種最主要熵解碼方法,其主要功能是解碼殘差塊數據成Coeff_to-ken,SignofTrailingOnes,Level,Total_zeros和Run_before這5個非常重要的語法元素,如圖1所示。CAVLC解碼過程中涉及到5個語法元素的解碼順序和定義如下:1)Coeff_token:一次變換系數幅值掃描中的非零變換系數幅值總數和拖尾變換系數幅值的個數。它主要通過查找1個定長碼表和3個可變長碼表獲得。2)SignofTrailingOnes(T1s):拖尾的變換系數幅值的正負符號。一位符號位,其中0表示正,1表示負。它主要通過最大3位讀非查找碼表而得。3)Level:非零變換系數掃描結尾處絕對值為1的多至連續3個非零變換系數級別中的1個。它通過反序解碼并輸出各種不同幅值。4)Total_zeros:掃描中位于非零變換系數幅值之前的連續的取值為0的變換系數幅值的個數。它主要通過查找可變長碼表獲得。5)Run_before:掃描中位于非零變換系數幅值之前的連續的取值為0的變換系數幅值的個數。它主要通過查找可變長碼表獲得。
2建議方法
2.1可變長碼表在H.264/AVC的CAVLC解碼查表中,由于標準解碼查表方法TLSS(SequentialSearchTableLook-up)存在查表時間長問題,所以如何減少碼表查找時間是當前研究的一個主要方向。本文在分析和研究CAVLC碼表結構特征的基礎上提出了一種基于哈希表快速查詢的CAVLC解碼查表優化方法,可以大大提高CAVLC解碼表查找時間。通過認真觀察和分析CAVLC解碼語法元素的碼表結構,可以發現碼表中語法元素Coeff_token是以二維碼表形式進行存儲的,語法元素Run_before和Total_zeros的碼表是以一維碼表進行存儲。表1是Coeff_token和Total_zeros中部分可變長碼表結構。表1中的碼字(Code)代表對應語法元素的輸入比特流,8位的解碼碼字(Codeword)表示解碼輸出結果。由于表1中解碼碼字由拖尾系數(T1)和非零系數的個數(Tc)兩部分組成,其中前3位表示拖尾系數的個數,后5位表示非零系數的個數。
2.2碼字前綴零0和碼長間存在關系通過分析碼表1中碼字結構,可發現語法元素Coefftoken中碼字前綴0與碼長之間存在如表2所示的固定對應關系。在表2中,碼字前綴0的個數表示碼字的第一個非零系數之前的連續0個數;碼長表示整個碼字的長度,它可分成碼字前綴和碼字后綴。通過表2對應關系,找到一種利用碼字前綴0和碼長對應關系快速確定碼字后綴長度的方法,可以大大節省獲取碼字后綴長度獲取時間。
2.3建立哈希表在本節中,將上述碼字前綴0的個數和通過碼字前綴0與碼長對應關系確定的碼字后綴長度制成一種哈希表形式對應起來,以減少碼字后綴長度獲取時間,從而提高碼表查找整體時間。表3是由語法元素Coeff_token中碼字前綴0個數,碼字后綴長度和碼長間構成部分哈希表關系。表3中的碼字后綴長度表示碼字第一個非零系數之后的部分。它可通過碼字后綴長度=碼長-碼字前綴0個數+1實現。獲取碼字后綴長度后,根據碼字后綴長度從輸入碼流中獲取相應位的比特流,便可得到碼字后綴值。基于上述分析,本文提出了一種基于哈希表查找方法,大大提高了CAVLC解碼查表性能。
2.4基于哈希表查找算法在本文中,提出一種快速基于哈希表查詢CAVLC解碼查表方法。其基本思路是以CAVLC碼字前綴0的個數查找其對應碼字后綴長度,由碼字前綴0個數和碼字后綴長度可快速確定碼長,再通過查找一次標準實CAVLC碼表,可實現CAVLC碼表解碼。快速基于哈希表查詢CAV-LC解碼查表方法具體實現的步驟為:1)輸入解碼碼流;2)根據NC的取值,選取Coeff_token元素對應的可變長碼表;3)計算輸入碼流中連續碼字前綴0的個數;4)根據碼字前綴0的個數從已建立的哈希表中找到對應碼長;5)確定碼字后綴長度,如果找到碼長有2個可能值,通過讀取碼字后綴第一位值后再次確定;6)根據確定碼長查找codtab碼表得到解碼輸出。2.5所提方法應用實例在假設解碼輸入碼流為0000100011……,情況下,以解碼Coeff_token為例,并假設選取NC為0≤NC<2的碼表,闡述Coeff_token解碼查表過程。解碼Coeff_token具體過程可分成如下幾個實現步驟:1)讀取輸入解碼碼流0000100011……。2)根據NC的值0≤NC<2,選取Coeff_token的可變長碼表0作為程序入口。3)計算輸入碼流0000100011中碼字連續前綴0的個數為4。4)根據碼字前綴0的個數(4)與查找已哈希表碼表2,可得到碼長后綴(1或2);由于碼字后綴的長度存在1或2這兩種情況,通過進一步判斷碼字后綴第1位值情況,由于斷碼字后綴第1位值為0,可得到碼字后綴的長度2。5)由上述碼字前綴0的個數(4)和碼字后綴的長度2,可找得到對應的碼長7。6)根據確定碼長(6)查找標準codtab碼表得到解碼輸出0000100,得到T1s=2和Tc=5。對于解碼語法元素Total_zeros和Run_before的方法與解碼完Coeff_token相類似,解碼語法元素Level和signofT1,可直接通過規則的整數算術運算來進行解碼。
3實驗結果與分析
本文中開展的實驗內容主要包括以下兩部分:實驗環境設置和參數選擇,測試表查找時間。
3.1實驗環境設置和參數選擇實驗的硬件環境為:WindowsXP操作系統,Intel2.00GHzCPU,1Gbyte內存和500Gbyte硬盤。軟件環境為VC6.0。實驗比較方法有TLSS,實驗解碼環境參數和測試序列參數的設置如表4和表5所示。
3.2解碼查表時間在本節實驗中,主要測試本文所提算法和TLSS方法在表查找時間方面的性能。圖2~圖7是上述兩種方法在碼表查找時間的比較圖。從圖2~圖7可以看出,在相同的測試條件下(相同的測試序列,相同的QP值,相同幀數),相比標準的TLSS方法,本文方法能夠提高約18%~22%的碼表查找速度。分析其提高主要原因在于采用哈希表查詢的方法去查找碼表,可以大量節省對碼字后綴長度的判斷時間、碼長匹配、判斷、定位和處理時間,進而大大提高CAVLC解碼查表速度。
4小結
本文主要針對標準CAVLC解碼過程中表查找存在解碼時間較長的問題,提出一種高效的基于哈希表的CAVLC表查找方法。該算法利用哈希表查找方式去提高CAVLC碼表查找操作,大大提高了CAVLC解碼效率。實驗結果表明,在未降底碼表查找質量前提下,相比標準CAVLC解碼查找算法,本文所提的算法可以節省18%~22%的表查找時間。
作者:伍學民韓一石陳君單位:廣東工業大學信息工程學院