h.264 CAVLC decode explaination

轉載自 jobby
最終編輯 jobby

實例解析

{0 3 -1 0

0 -1 1 0

1 0 0 0

0 0 0 0} NC = 1

編碼後得到輸出碼流爲:0000 1000 1110 0101 1110 1101

解碼詳細過程如下:

1.       根據Coeff_tokenNC查表(見標準表9-5),得到非零係數數目TotalCoeffs和拖尾係數數目TrailingOnes

NC = 1選擇對應的表,Coeff_token0000100,查表得到TotalCoeffs=5 TrailingOnes="3"

輸出序列:無

2.       解析拖尾係數

由第一步得到拖尾係數有3個,輸入拖尾係數符號編碼碼流011,得到兩個拖尾係數由先到後是1-1-1

輸出序列:1-1-1

3.       解析除拖尾係數外的非零係數的幅值(level

(1)       確定後綴長度SuffixLength

(2)       根據碼流查表9-6得到前綴LevelPrefix

(3)       根據前綴和後綴,得到LevelCode=(levelprefix<<suffixlength)+levelsuffix

(4)       Levelcode爲偶數 level=(level+2)/2

Levelcode爲奇數 level=(-level-1)/2

(5)       根據設定的閾值確定是否update Suffixlegth

回到例子中,按照逆序

i=0,Sufixlegth=0,查表9-61對應的前綴levelprefix=0levelcode=0,計算得到level=1,i++

i=1,sufixlegth=1,查表0010對應的前綴levelprefix=2,計算levelcode=4level=3,i++

i=2>=TotalCoeffs-TrailingOnes,除拖尾係數外的非零係數解析完畢

輸出序列:31,-1-11

4.       解析每個非零係數前零的個數

根據TotalCoeffs=5和輸入碼流111查表9-7得到TotalZeros=3

初始i=TotalCoeffs-1=4,zeroleft=TotalZeros=3,5個非零係數前零的數目解析如下:

i=4,zeroleft=3,根據碼流10查表9-10,runbefor=1,輸出序列:31,-1-101

i=3,zeroleft=3-1=2,根據碼流1查表runbefore=0,輸出序列:31,-1-101

i=2,zeroleft=2-0=2,根據碼流1查表runbefore=0,輸出序列:31,-1-101

i=1,zeroleft=2-0=2,根據碼流01查表runbefore=1,輸出序列:301,-1-101

i=0,zeroleft=2-1=1,輸出序列:0301,-1-101

5.       解碼完畢,將剩下的元素用0補齊,反序排列就可以得到4*4矩陣。

發佈了28 篇原創文章 · 獲贊 2 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章