h.264 CAVLC example explaination

转载自 五岭之南
最终编辑 weiwei22844

对下面的block编码,假设该快上面和左边块的非零系数之和(Na+Nb=0,该块不是亮度直流块。

Z-Z重排序 0,3,0,1,-1,-1,0,1,0..

获得码流 00010001110010111101101

下面详细分析编码过程

1.编码coeff_token。(参考H.264标准9.219-5

(1) nC=round((Na+Nb/2= 0。(对于亮度直流块nC=-1nC=-2

(2) 非零系数个数TotalCoeffs=5

(3) 拖尾1的个数TrailingOnes =3(本来有4个,但最多只能要3)

所以 coeff_token = 0000100

2.编码拖尾1的符号(按逆序编码)

01,所以得 011

3. 编码剩余非零系数(按逆序编码)(参考h.264标准表9-6

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,最后一个不用编码。

至于解码...(这里省略)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值