对下面的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
最新推荐文章于 2024-04-11 17:24:32 发布