1. 程式人生 > >h.264 CAVLC例子詳解

h.264 CAVLC例子詳解

3歸納成公式levelCode = 2*level-2(level>0),  levelCode=-2*level-1 (level<0)

1)對於係數1

由表3levelCode = 2*level-2 = 2*1-2 = 0

參照h.264標準9.2.2

因為 !(TotalCoeffs>10 && TrailingOnes<3 ),所以sufixLength = 0

leveCode = ( Min( 15, level_prefix ) << suffixLength ) + level_suffix

=>  =  Min(15, level_prefix) << 0 + leve_suffix

所以 level_prefix=0 , level_suffix = 0

所以level(1)=1

2)對於係數3

由表3leveCode = 2*level-2 = 2*3-2 = 4

因為 sufixLength = 0,所以sufixLength = 1

levelCode =  ( Min( 15, level_prefix ) << suffixLength ) + level_suffix

=>  4 = ( Min( 15, level_prefix ) << 1) + level_suffix

又因為 level_suffix < (1<< suffixLength)

= 1<<1 = 2

所以對level從小到大列舉,滿足條件的只有 level_suffix = 2 , level_suffix = 0

所以Level(0) = 001(prefix)0(suffix)

4.編碼total_zeros(參考h.264標準表9-7

最後一個非零係數前0的個數 TotalZeros =3, TotalCoeffs=5

所以total_zeros = 111

5.編碼非零係數前的0遊程(按逆序編碼)(參考h.264標準表9-10

1)對於係數1

前面共有30,其中相鄰的0有一個,所以ZeroLeft =3,run_before =1,所以run_before(4) =

10

(2)對於係數-1

ZeroLeft =2,run_before =0,所以run_before(3) = 1

(3)對於係數-1

ZeroLeft =2,run_before =0,所以run_before(2) = 1

(4)對於係數1

ZeroLeft =2,run_before =1,所以run_before(1) = 01

(5)對於係數3

ZeroLeft =1,run_before =1,最後一個不用編碼。

至於解碼...(這裡省略)