對下面的block編碼,假設該快上面和左邊塊的非零係數之和(Na+Nb)=0,該塊不是亮度直流塊。 Z-Z重排序 0,3,0,1,-1,-1,0,1,0…..
獲得碼流 00010001110010111101101。 下面詳細分析編碼過程 1.編碼coeff_token。(參考H.264標準9.21表9-5) (1) nC=round((Na+Nb)/2)= 0。(對於亮度直流塊nC=-1或nC=-2) (2) 非零係數個數TotalCoeffs=5 (3) 拖尾1的個數TrailingOnes =3。(本來有4個,但最多隻能要3個) 所以 coeff_token = “0000100”。 2.編碼拖尾1的符號(按逆序編碼) 正0負1,所以得 “011” 3. 編碼剩餘非零係數(按逆序編碼)(參考h.264標準表9-6)
表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) = 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 前面共有3個0,其中相鄰的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,最後一個不用編碼。 至於解碼…...(這裏省略) |
h.264 CAVLC example explaination
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.