h.264 CAVLC例子詳解
表3歸納成公式levelCode = 2*level-2(level>0), levelCode=-2*level-1 (level<0)
(1)對於係數1。
由表3,levelCode = 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。
由表3,leveCode = 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)
所以對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
前面共有3個0,其中相鄰的0有一個,所以ZeroLeft
=3,run_before =1,所以run_before(4) =
(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,最後一個不用編碼。
至於解碼…...(這裡省略)