欢迎来到天天文库
浏览记录
ID:10686034
大小:34.50 KB
页数:4页
时间:2018-07-07
《基于上下文可变长编码介绍》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、CAVLC编码过程详解——Sunrise编码过程:假设有一个4*4数据块{0,3,-1,0,0,-1,1,0,1,0,0,0,0,0,0,0}数据重排列:0,3,0,1,-1,-1,0,1,0……1)初始值设定:非零系数的数目(TotalCoeffs)=5;拖尾系数的数目(TrailingOnes)=3;最后一个非零系数前零的数目(Total_zeros)=3;变量NC=1;(说明:NC值的确定:色度的直流系数NC=-1;其他系数类型NC值是根据当前块左边4*4块的非零系数数目(NA)当前块上面4*4块的非零系数数目(NB)求得的,见毕厚杰书
2、P120表6.10)suffixLength=0;i=TotalCoeffs=5;2)编码coeff_token:查标准(BSISO/IEC14496-10:2003)Table9-5,可得:If(TotalCoeffs==5&&TrailingOnes==3&&0<=NC<2)coeff_token=0000100;Code=0000100;3)编码所有TrailingOnes的符号:逆序编码,三个拖尾系数的符号依次是+(0),-(1),-(1);即:TrailingOnesign[i--]=0;TrailingOnesign[i--]=1
3、;TrailingOnesign[i--]=1;Code=0000100011;4)编码除了拖尾系数以外非零系数幅值Levels:过程如下:(1)将有符号的Level[i]转换成无符号的levelCode;如果Level[i]是正的,levelCode=(Level[i]<<1)–2; 如果Level[i]是负的,levelCode=-(Level[i]<<1)–1;(2)计算level_prefix:level_prefix=levelCode/(1<4、el_suffix:level_suffix=levelCode%(1<(3<5、el_prefix=0时对应的bitstring=1;因为suffixLength初始化为0,故该Level没有后缀;因为suffixLength=0,故suffixLength++;Code=00001000111;编码下一个Level:Level[0]=3;levelCode=4;level_prefix=2;查表得bitstring=001;level_suffix=0;suffixLength=1;故码流为0010;Code=000010001110010;i=0,编码Level结束。5)编码最后一个非零系数前零的数目(TotalZe6、ros):查表9-7,当TotalCoeffs=5,total_zero=3时,bitstring=111;Code=000010001110010111;6)对每个非零系数前零的个数(RunBefore)进行编码:i=TotalCoeffs=5;ZerosLeft=Total_zeros=3;查表9-10:依然按照逆序编码ZerosLeft=3,run_before=1run_before[4]=10;ZerosLeft=2,run_before=0run_before[3]=1;ZerosLeft=2,run_before=0run_be7、fore[2]=1;ZerosLeft=2,run_before=1run_before[1]=01;ZerosLeft=1,run_before=1run_before[0]不需要码流来表示Code=000010001110010111101101;编码完毕。H.264中CAVLC解码过程详解实例解析{03-100-11010000000}NC=1编码后得到输出码流为:000010001110010111101101解码详细过程如下:1. 根据Coeff_token和NC查表(见标准表9-5),得到非零系数数目TotalCoeff8、s和拖尾系数数目TrailingOnesNC=1选择对应的表,Coeff_token为0000100,查表得到TotalCoeffs=5TrailingOnes="
4、el_suffix:level_suffix=levelCode%(1<(3<5、el_prefix=0时对应的bitstring=1;因为suffixLength初始化为0,故该Level没有后缀;因为suffixLength=0,故suffixLength++;Code=00001000111;编码下一个Level:Level[0]=3;levelCode=4;level_prefix=2;查表得bitstring=001;level_suffix=0;suffixLength=1;故码流为0010;Code=000010001110010;i=0,编码Level结束。5)编码最后一个非零系数前零的数目(TotalZe6、ros):查表9-7,当TotalCoeffs=5,total_zero=3时,bitstring=111;Code=000010001110010111;6)对每个非零系数前零的个数(RunBefore)进行编码:i=TotalCoeffs=5;ZerosLeft=Total_zeros=3;查表9-10:依然按照逆序编码ZerosLeft=3,run_before=1run_before[4]=10;ZerosLeft=2,run_before=0run_before[3]=1;ZerosLeft=2,run_before=0run_be7、fore[2]=1;ZerosLeft=2,run_before=1run_before[1]=01;ZerosLeft=1,run_before=1run_before[0]不需要码流来表示Code=000010001110010111101101;编码完毕。H.264中CAVLC解码过程详解实例解析{03-100-11010000000}NC=1编码后得到输出码流为:000010001110010111101101解码详细过程如下:1. 根据Coeff_token和NC查表(见标准表9-5),得到非零系数数目TotalCoeff8、s和拖尾系数数目TrailingOnesNC=1选择对应的表,Coeff_token为0000100,查表得到TotalCoeffs=5TrailingOnes="
5、el_prefix=0时对应的bitstring=1;因为suffixLength初始化为0,故该Level没有后缀;因为suffixLength=0,故suffixLength++;Code=00001000111;编码下一个Level:Level[0]=3;levelCode=4;level_prefix=2;查表得bitstring=001;level_suffix=0;suffixLength=1;故码流为0010;Code=000010001110010;i=0,编码Level结束。5)编码最后一个非零系数前零的数目(TotalZe
6、ros):查表9-7,当TotalCoeffs=5,total_zero=3时,bitstring=111;Code=000010001110010111;6)对每个非零系数前零的个数(RunBefore)进行编码:i=TotalCoeffs=5;ZerosLeft=Total_zeros=3;查表9-10:依然按照逆序编码ZerosLeft=3,run_before=1run_before[4]=10;ZerosLeft=2,run_before=0run_before[3]=1;ZerosLeft=2,run_before=0run_be
7、fore[2]=1;ZerosLeft=2,run_before=1run_before[1]=01;ZerosLeft=1,run_before=1run_before[0]不需要码流来表示Code=000010001110010111101101;编码完毕。H.264中CAVLC解码过程详解实例解析{03-100-11010000000}NC=1编码后得到输出码流为:000010001110010111101101解码详细过程如下:1. 根据Coeff_token和NC查表(见标准表9-5),得到非零系数数目TotalCoeff
8、s和拖尾系数数目TrailingOnesNC=1选择对应的表,Coeff_token为0000100,查表得到TotalCoeffs=5TrailingOnes="
此文档下载收益归作者所有