H.264中CAVLC解码过程详解

实例解析

{0  3  -1  0

  0  -1  1  0

  1  0  0  0

  0  0  0  0}  NC = 1

编码后得到输出码流为: 0000 1000 1110 0101 1110 1101

解码详细过程如下:

1.       根据 Coeff_token NC 查表 ( 见标准表 9-5) ,得到非零系数数目 TotalCoeffs 和拖尾系数数目 TrailingOnes

NC = 1 选择对应的表, Coeff_token 0000100 ,查表得到 TotalCoeffs=5 TrailingOnes="3"

输出序列:无

2.       解析拖尾系数

由第一步得到拖尾系数有 3 个,输入拖尾系数符号编码码流 011 ,得到两个拖尾系数由先到后是 1 -1 -1

输出序列: 1 -1 -1

3.       解析除拖尾系数外的非零系数的幅值( level

(1)       确定后缀长度 SuffixLength

(2)       根据码流查表 9-6 得到前缀 LevelPrefix

(3)       根据前缀和后缀,得到 LevelCode=(levelprefix<<suffixlength)+levelsuffix

(4)       Levelcode 为偶数 level=(level+2)/2

Levelcode 为奇数 level=(-level-1)/2

(5)       根据设定的阈值确定是否 update Suffixlegth

回到例子中,按照逆序

i=0,Sufixlegth=0, 查表 9-6 1 对应的前缀 levelprefix=0 levelcode=0, 计算得到 level=1,i++

i=1,sufixlegth=1, 查表 0010 对应的前缀 levelprefix=2, 计算 levelcode=4 level=3,i++

i=2>=TotalCoeffs-TrailingOnes, 除拖尾系数外的非零系数解析完毕

输出序列: 3 1 1 -1 -1

4.       解析每个非零系数前零的个数

根据 TotalCoeffs=5 和输入码流 111 查表 9-7 得到 TotalZeros=3

初始 i=TotalCoeffs-1=4,zeroleft=TotalZeros=3,5 个非零系数前零的数目解析如下:

i=4,zeroleft=3, 根据码流 10 查表 9-10,runbefor=1, 输出序列: 3 1 1 -1 0 -1

i=3,zeroleft=3-1=2, 根据码流 1 查表 runbefore=0 ,输出序列: 3 1 1 -1 0 -1

i=2,zeroleft=2-0=2, 根据码流 1 查表 runbefore=0 ,输出序列: 3 1 1 -1 0 -1

i=1,zeroleft=2-0=2, 根据码流 01 查表 runbefore=1 ,输出序列: 3 0 1 1 -1 0 -1

i=0,zeroleft=2-1=1 ,输出序列: 0 3 0 1 1 -1 0 -1

5.       解码完毕,将剩下的元素用 0 补齐,反序排列就可以得到 4*4 矩阵。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值