CN101198056A - 变长编码方法及装置 - Google Patents
变长编码方法及装置 Download PDFInfo
- Publication number
- CN101198056A CN101198056A CN 200610164458 CN200610164458A CN101198056A CN 101198056 A CN101198056 A CN 101198056A CN 200610164458 CN200610164458 CN 200610164458 CN 200610164458 A CN200610164458 A CN 200610164458A CN 101198056 A CN101198056 A CN 101198056A
- Authority
- CN
- China
- Prior art keywords
- run
- sequence
- level
- pos
- coding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明公开了一种变长编码方法,包括:获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到level序列和run序列后,对level序列和run序列分别进行游程编码,然后再对得到的两游程码字对分别进行变长编码。本发明同时公开了一种变长编码装置,包括:预处理模块和变长编码模块。本发明进一步利用了level序列中为1的level的特征信息,和run序列中为0的run的特征信息,降低了压缩码率,提高了峰值信噪比,本发明可以应用于各种编码器,同时也与现有的国际H.264标准和国内AVS标准完全兼容。
Description
技术领域
本发明涉及数据传输与处理技术领域,具体涉及一种变长编码方法及装置。
背景技术
熵编码早在1950年就应用于视频编码,作为整个视频编码框架的最后一个模块。熵编码的对象是之前所有模块生成的一系列的语法元素,包括:宏块类型、参考帧索引、编码块模板(CBP,Coded Block Pattern)、量化步长(QP)、运动矢量的残差、变换和量化后的残差系数等。在所有这些语法元素中,残差系数的信息量及最终编码后的数据量都是最大的,同时它也是最具编码压缩空间的,因而一直以来都是熵编码研究的重点。
80年代中期出现了一个新的针对离散余弦变换(DCT)系数编码的变长熵编码技术即:二维变长编码(2D-VLC)技术,该技术通过zig-zag扫描将块系数表示成(run,level)的形式,并采用一个变长码对该(run,level)数对进行编码。
为提高块结束符(EOB,End of Block)的编码效率,提出了三维VLC(3D-VLC)技术,该技术对(last,run,level)对进行联合编码,其中,last表示当前块系数是否为块内的最后一个非零系数。同时出现了针对宏块采用帧内(intra)预测还是帧间(inter)预测法而设计不同VLC码表的方法。
变长熵编码技术是基于上下文的编码技术,主要是将level及run分开,分别对level和run建立上下文和进行编码,或者基于2D-VLC的上下文进行编码,该技术的核心是上下文信息的使用及码表切换的方法。
图1为现有的H.264标准中提出的变长编码方法的流程图,如图1所示,其具体步骤如下:
步骤101:对当前块进行zig-zag扫描,得到残差系数序列。
步骤102:对得到的残差系数序列进行游程编码,得到level和run。
其中,level为当前块中的非零系数,run为当前块中位于各非零系数之前的零系数的个数。
步骤103:对各level和各run进行变长编码。
现有技术的缺点是,对各个level和各个run分别进行变长编码,而没有考虑到各level之间和各run之间的联系,因此,可能还有信息冗余,编码效率还可进一步提高。
发明内容
有鉴于此,本发明的主要目的在于提供一种变长编码方法及装置,以降低压缩码率。
为达到上述目的,本发明的技术方案是这样实现的:
一种变长编码方法,包括:
获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到非零系数level序列和出现在非零系数之前的零系数的个数run序列;
对level序列和run序列分别进行游程编码,分别得到对应的游程码字对,对得到的两游程码字对分别进行变长编码。
一种变长编码装置,包括:
预处理模块,用于对收到的输入数据块的level序列进行游程编码,将得到的游程码字对:(level,lev_pos)输出到变长编码模块,对收到的输入数据块的run序列进行游程编码,将得到的游程码字对:(run,run_pos)输出到变长编码模块;
变长编码模块,对收到的游程码字对进行变长编码。
与现有技术相比,本发明通过在对当前块进行扫描,得到残差系数序列,对该残差系数序列进行传统游程编码,得到level序列和run序列后,根据level序列中绝对值为1的level,以及run序列中为0的run,对level序列和run序列分别进行游程编码,然后再对得到的两游程码字对分别进行变长编码,进一步利用了level序列中为1的level的特征信息,和run序列中为0的run的特征信息,降低了压缩码率,提高了峰值信噪比,本发明可以应用于各种编码器,同时也与现有的国际H.264标准和国内AVS标准完全兼容。
附图说明
图1为现有的H.264标准中提出的变长编码的流程图;
图2为本发明实施例一提供的变长编码的流程图;
图3为本发明实施例一中对(level,lev_pos)序列对进行变长编码的流程图;
图4为本发明实施例一中对(run,run_pos)序列对进行变长编码的流程图;
图5为本发明实施例二提供的变长编码的流程图;
图6为本发明实施例提供的变长编码的装置框图;
图7为本发明实施例一提供的变长编码模块的结构示意图;
图8为本发明实施例二提供的变长编码模块的结构示意图;
图9为本发明实施例一和二提供的非零系数个数编码模块结构示意图;
图10为本发明实施例一和二提供的(level,lev_pos)序列对编码模块结构示意图;
图11为本发明实施例一和二提供的(run,run_pos)序列对编码模块结构示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图2是本发明实施例一提供的变长编码的流程图,如图2所示,其具体步骤如下:
步骤201:编码端对当前块进行zig-zag扫描,得到残差系数序列。
本步骤中,也可采用zig-zag以外的方式对当前块进行扫描。
本实施例中提到的块的大小可为4×4或8×8等。具体选取哪种分块方式取决于整个编码器的需要。
步骤202:编码端对得到的残差系数序列进行传统游程编码,得到level序列和run序列,统计当前块的非零系数个数:numcoeff,即:level序列中包含的系数个数。
本步骤中的传统游程编码指的是,现有的H.264标准中提到的游程编码,即:level为当前块中的非零系数,run为当前块中位于各非零系数之前的零系数的个数。
步骤203:编码端根据Level序列中包含的绝对值为1的level,对level序列进行进一步地游程编码,得到(level,lev_pos)序列对;根据run序列中包含的为0的run,对run序列进行进一步地游程编码,得到(run,run_pos)序列对。
这里,(level,lev_pos)序列对中的level指的是,level序列中从高频端到低频端的各绝对值非1的level;level_pos指的是,各绝对值非1的level的相邻低频侧绝对值连续为1的level的个数;(run,run_pos)序列对中的run指的是,run序列中从低频端到高频端的各绝对值非0的run;run_pos指的是,各绝对值非0的run的相邻高频侧连续为0的run的个数。
因此,本步骤中提到的对level序列进行进一步游程编码的过程如下:
从level序列的高频端向低频端扫描即:从右向左扫描,将第一个绝对值非1的level作为第一对(level,lev_pos)中的level,将该level的相邻低频侧绝对值连续为1的level的个数作为第一对(level,lev_pos)中的lev_pos,按照同样的方法获取之后的(level,lev_pos)序列对,直至扫描结束。
本步骤中提到的对run序列进行进一步游程编码的过程如下:
从run序列的低频端向高频端扫描即:从左向右扫描,将第一个非0的run作为第一对(run,run_pos)中的run,将该run的相邻高频侧连续为0的run的个数作为该第一对(run,run_pos)中的run_pos,按同样的方法获取之后的(run,run_pos)序列对,直至扫描结束。
令level序列高频端绝对值连续为1的level的个数为tailingones,run序列低频端连续为0的run的个数为tailingzeros。
步骤204:编码端利用当前块的上块和左块中的非零系数个数,对当前块中的非零系数个数进行邻块预测,得到预测值pred_num。
当前块的上块指的是与当前块相邻、且位于当前块的正上方的块,当前块的左块指的与当前块相邻、且位于当前块的正左方的块,设定当前块的上块或左块不存在是指:当前块和其上块或左块不在同一个条带内,或是当前块处在一帧图片的上边缘或左边缘。则邻块预测的过程为:设当前块的上块和左块中的非零系数个数分别为:up_num和left_num,则当前块的非零系数个数的预测值pred_num为:
a、当上块和左块均存在时,pred_num=(up_num+left_num)/2。
b、当上块存在而左块不存在时,pred_num=up_num。
c、当上块不存在而左块存在时,pred_num=left_num。
d、当上块和左块均不存在时,pred_num=0。
步骤205:编码端利用pred_num为numcoeff选择VLC表,通过查VLC表的方式对numcoeff编码,将得到的编码值发往解码端。
这里,用来对numcoeff编码的VLC表是依据条件概率P(numcoeff|pred_num)生成的,编码码字可以采用Huffman码。
步骤206:编码端从(level,lev_pos)序列对的高频端到低频端,顺序对各(level,lev_pos)序列对进行变长编码,编码完毕,将得到的编码值发往解码端。
由于已对numcoeff编码,因此在完成(level,lev_pos)序列对的编码后,编码端无需再对tailingones编码,解码端可根据解码得到的numcoeff和(level,lev_pos)序列对得知tailingones的值。
步骤207:编码端从level序列的高频端到低频端,对level序列中绝对值为1的level的正、负符号进行编码。
由于将level序列中绝对值为1的level视为游程,而绝对值为1的level还包含符号信息即:是正还是负,所以还需对该符号信息进行编码。这里,用一个bit表示一个绝对值为1的level的符号信息,即:0表示该level的符号为正,而1表示该level的符号为负。若序列中包含n个绝对值为1的level,则连续用n个bit从高频到低频顺序表示该n个level的符号,其中,n为整数。
步骤208:编码端从(run,run_pos)序列对的低频端到高频端,顺序对各(run,run_pos)序列对进行变长编码。
由于level和run一一对应,且已完成了对level序列的编码,则解码端可根据level序列中包含的level的个数得知run序列中包含的run的个数,因此在完成(run,run_pos)序列对的编码后,无需再对tailingzeros编码,解码端可根据level序列中level的个数和解码得到的(run,run_pos)序列对的个数得知tailingzeros的值。
以下以一个具体应用实例对本发明实施例一的步骤102~103进行进一步详细说明:
设当前块的大小为4×4,经zig-zag扫描后得到的残差系数序列为:
-5;1;-1;4;-1;-2;0;-1;-3;0;-2;-1;0;0;-10
其中,序列的左端为低频端,右端为高频端。
经过传统游程编码后得到level序列和对应的run序列分别为:
level序列:
-5;1;-1;4;-1;-2;-1;-3;-2;-1;-1
run序列:
0;0;0;0;0;0;1;0;1;0;2
可以看出:当前块的非零系数个数numcoeff为11。
对level序列和run序列进一步进行游程编码,分别得到(level,lev_pos)序列对和(run,run_pos)序列对:
(level,lev_pos)序列对:
(-2,0);(-3,1);(-2,1);(4,2);(-5,0)
(run,run_pos)序列对:
(1,1);(1,1);(2,0)
令level序列高频端绝对值连续为1的个数为tailingones,此处tailingones为2。
令run序列低频端连续为0的个数为tailingzeros,此处tailingzeros为6。
以下对本发明实施例一中对(level,lev_pos)序列对进行变长编码的过程进行详细说明,图3为本发明实施例一提供的对(level,lev_pos)序列对进行变长编码的流程图,如图3所示,其具体步骤如下:
步骤301:编码端根据当前块所处的宏块采用的是帧内预测还是帧间预测选取对应的2D_VLC表。
2D_VLC表根据块所采用的预测方法为帧内预测还是帧间预测,被划分为两类。
步骤302:编码端确定2D_VLC表中的第一张表为默认的初始码表。
步骤303:编码端用确定的码表对当前的(level,lev_pos)序列对编码。
步骤304:编码端判断是否所有(level,lev_pos)序列对已编码完毕,若是,执行步骤308;否则,执行步骤305。
步骤305:编码端根据该刚编码完的(level,lev_pos)序列对中的level的绝对值:abs(level),判断编码下一(level,lev_pos)序列对所用的码表是否需要更新,若是,执行步骤306;否则,执行步骤307。
这里,可根据经验设定一阈值,若abs(level)大于该阈值,则确定更新码表;否则,确定不更新码表。
步骤306:编码端根据刚编码完的(level,lev_pos)序列对中的level的绝对值:abs(level),确定编码下一(level,lev_pos)序列对所用的码表,根据该码表对下一(level,lev_pos)序列对编码,转至步骤304。
步骤307:编码端采用与刚编码完的(level,lev_pos)序列对相同的码表,对下一(level,lev_pos)序列对编码,转至步骤304。
步骤308:编码端采用当前码表对(level,lev_pos)序列对的结束标志(EOL,End of Level)编码。
以下对本发明实施例一中对(run,run_pos)序列对进行变长编码的过程进行详细说明,图4为本发明实施例一提供的对(run,run_pos)序列对进行变长编码的流程图,如图4所示,其具体步骤如下:
步骤401:编码端根据当前块所处的宏块采用的是帧内预测还是帧间预测选取对应的2D_VLC表。
步骤402:编码端确定2D_VLC表中的第一张表为默认的初始码表。
步骤403:编码端用确定的码表对当前的(run,run_pos)序列对编码。
步骤404:编码端判断是否所有(run,run_pos)序列对已编码完毕,若是,执行步骤408;否则,执行步骤405。
步骤405:编码端根据该刚编码完的(run,run_pos)序列对中的run的值,判断用于编码下一(run,run_pos)序列对所用的码表是否需要更新,若是,执行步骤406;否则,执行步骤407。
这里,可根据经验设定一阈值,若刚编码完的(run,run_pos)序列对中的run的值大于该阈值,则确定更新码表;否则,确定不更新码表。
步骤406:编码端根据刚编码完的(run,run_pos)序列对中的run的值,确定编码下一(run,run_pos)序列对所用的码表,根据该码表对下一(run,run_pos)序列对编码,转至步骤404。
步骤407:编码端采用与刚编码完的(run,run_pos)序列对相同的码表,对下一(run,run_pos)序列对编码,转至步骤404。
步骤408:编码端采用当前码表对(run,run_pos)对的结束标志(EOR,End Of Run)编码。
图5为本发明实施例二提供的变长编码的流程图,如图5所示,其具体步骤如下:
步骤501~505步骤201~205相同。
步骤506:对level序列高频端绝对值连续为1的level的个数:trailingones编码。
利用numcoeff为trailingones选择VLC表,利用查VLC表的方式对trailingones编码。用来对trailingones编码的VLC表依据条件概率P(trailingones|numcoeff)生成,编码码字可以采用Huffman码。
步骤507:编码端从(level,lev_pos)序列对的高频端到低频端,顺序对各(level,lev_pos)序列对进行变长编码。
步骤508与步骤207相同。
步骤509与步骤208相同。
在本发明实施例二中,由于要对trailingones编码,因此在对(level,lev_pos)序列对编码完毕时,解码端可根据解码得到的numcoeff和trailingones得知(level,lev_pos)序列对是否结束,编码端无需再对(level,lev_pos)序列对的结束标志编码。即:本发明实施例二的步骤507:对(level,lev_pos)序列对进行变长编码的过程包括图3所示的步骤301~307,且步骤307中,在判定所有(level,lev_pos)序列对编码完毕时,无需再对(level,lev_pos)序列对的结束标志编码。
图6是本发明实施例提供的变长编码的装置框图,如图6所示,其主要包括:预处理模块61和变长编码模块62,其中:
预处理模块61:用于对输入的当前块进行扫描,得到残差系数序列,对该残差系数序列进行传统游程编码,根据得到的level序列中包含的绝对值为1的level,对该level序列进行进一步游程编码,将得到的(level,lev_pos)序列对输出到变长编码模块62;根据得到的run序列中为0的run,对该run序列进行进一步游程编码,将得到的(run,run_pos)序列对输出到变长编码模块62。
如图6所示,预处理模块61包括:第一游程编码模块611和第二游程编码模块612,其中:
第一游程编码模块611:用于对输入的当前块进行扫描,得到残差系数序列,对该残差系数序列进行游程编码,将得到的level序列和run序列输出到第二游程编码模块612。
第二游程编码模块612:根据第一游程编码模块611发来的level序列中绝对值为1的level对level序列进行游程编码,将得到的游程码字对:(level,lev_pos)输出到变长编码模块62;根据第一游程编码模块611发来的的run序列中为0的run对run序列进行游程编码,将得到的游程码字对:(run,run_pos)输出到变长编码模块62。
变长编码模块62:对预处理模块61发来的(level,lev_pos)序列对和(run,run_pos)序列对分别进行变长编码,将得到的编码值输出到解码端。
图7给出了本发明实施例一提供的变长编码模块的结构示意图,如图7所示,其主要包括:非零系数个数编码模块731、(level,lev_pos)序列对编码模块732、结束标志编码模块733、符号编码模块734和(run,run_pos)序列对编码模块735,其中:
非零系数个数编码模块731:用于根据预处理模块61发来的(level,lev_pos)序列对确定当前块中的非零系数个数,对该非零系数个数进行变长编码,将得到的编码值输出到解码端。
(level,lev_pos)序列对编码模块732:用于对预处理模块61发来的(level,lev_pos)序列对进行变长编码,编码完毕,将得到的编码值输出到解码端,并将当前采用的码表发送给结束标志编码模块733。
结束标志编码模块733:用于在收到(level,lev_pos)序列对编码模块732发来的码表时,根据该码表对(level,lev_pos)序列对的结束标志编码,将得到的编码值输出到解码端。
符号编码模块734:用于根据预处理模块61发来的(level,lev_pos)序列对,从高频端到低频端,对各绝对值为1的level的正负符号编码,将得到的码流输出到解码端。
(run,run_pos)序列对编码模块735:用于对预处理模块61发来的(run,run_pos)序列对进行变长编码,将得到的编码值输出到解码端。
图8给出了本发明实施例二提供的变长编码模块的结构示意图,如图8所示,与图7相比,其区别在于:不包含结束标志编码模块733,且进一步包括:绝对值连续为1的level个数编码模块736,该模块用于根据预处理模块61发来的(level,lev_pos)序列对,确定level序列的高频端绝对值连续为1的level的个数,对该个数进行变长编码,将得到的编码值输出到解码端。
且,在本实施例中,(level,lev_pos)序列对编码模块732在编码完毕时,无需发送当前采用的码表。
图9为本发明实施例一和二提供的非零系数个数编码模块的结构示意图,如图9所示,其主要包括:非零系数个数预测模块911和编码模块912,其中:
非零系数个数预测模块911:用于根据当前块的上块和左块中包含的非零系数个数,对当前块包含的非零系数个数进行邻块预测,将预测值输出到编码模块912。
编码模块912:用于根据预处理模块61发来的(level,lev_pos)序列对确定当前块中的非零系数个数,根据非零系数个数预测模块911发来的预测值为自身确定的非零系数个数选择VLC表,通过查找该VLC表为自身确定的非零系数个数编码,将得到的编码值输出到解码端。
图10为本发明实施例一和二提供的(level,level_pos)序列对编码模块的结构示意图,如图10所示,其主要包括:2D_VLC表选择模块1021、2D_VLC表保存模块1022、(level,level_pos)编码模块1023和码表更新判断模块1024,其中:
2D_VLC表选择模块1021:用于根据当前块所处宏块采用的帧内预测或帧间预测方式,选择对应的2D_VLC表,将该2D_VLC表发送到2D_VLC表保存模块1022。
2D_VLC表保存模块1022:用于接收并保存2D_VLC表选择模块1021发来的2D_VLC表。
(level,level_pos)编码模块1023:接收到预处理模块61发来的(level,lev_pos)序列对,从2D_VLC表保存模块1022获取第一张码表,从高频端到低频端,根据该码表顺序对各(level,lev_pos)序列对编码,每编码完一个(level,lev_pos)序列对,向码表更新判断模块1024发送刚编码完的(level,lev_pos)序列对中的level,之后若收到码表更新判断模块1024发来的携带新码表的更新指示,则根据该新码表对下一(level,lev_pos)序列对编码;若收到码表更新判断模块1024发来的不更新指示,则采用与刚编码完的(level,lev_pos)序列对相同的码表,对下一(level,lev_pos)序列对编码,将所有(level,lev_pos)序列对编码完毕,将各编码值发送到解码端。
对于本发明实施例一,(level,level_pos)编码模块1023进一步用于,将所有(level,lev_pos)序列对编码完毕,向结束标志编码模块733发送当前采用的码表。
码表更新判断模块1024:当收到(level,level_pos)编码模块1023发来的level,根据该level的绝对值判断是否需要更新码表,若是,则根据该level的绝对值在2D_VLC表保存模块1022中选择一个码表,将该码表携带在更新指示中发送给(level,level_pos)编码模块1023;否则,向(level,level_pos)编码模块1023发送不更新指示。
图11为本发明实施例一和二提供的(run,run_pos)序列对编码模块的结构示意图,如图11所示,其主要包括:2D_VLC表选择模块1151、2D_VLC表保存模块1152、(run,run_pos)编码模块1153和码表更新判断模块1154,其中:
2D_VLC表选择模块1151:用于根据当前块所处宏块采用的帧内预测或帧间预测方式,选择对应的2D_VLC表,将该2D_VLC表发送到2D_VLC表保存模块1152。
2D_VLC表保存模块1152:用于接收并保存2D_VLC表选择模块1151发来的2D_VLC表。
(run,run_pos)编码模块1153:接收到预处理模块61发来的(run,run_pos)序列对,从2D_VLC表保存模块1152获取第一张码表,从高频端到低频端,根据该码表顺序对各(run,run_pos)序列对编码,每编码完一个(run,run_pos)序列对,向码表更新判断模块1154发送刚编码完的(run,run_pos)序列对中的run,之后若收到码表更新判断模块1154发来的携带新码表的更新指示,则根据该新码表对下一(run,run_pos)序列对编码;若收到码表更新判断模块1154发来的不更新指示,则采用与刚编码完的(run,run_pos)序列对相同的码表,对下一(run,run_pos)序列对编码,将所有(run,run_pos)序列对编码完毕,将各编码值发送到解码端。
码表更新判断模块1154:当收到(run,run_pos)编码模块1153发来的run,根据该run的值判断是否需要更新码表,若是,则根据该run的值在2D_VLC表保存模块1152中选择一个码表,将该码表携带在更新指示中发送给(run,run_pos)编码模块1153;否则,向(run,run_pos)编码模块1153发送不更新指示。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (23)
1.一种变长编码方法,其特征在于,包括:
获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到非零系数level序列和出现在非零系数之前的零系数的个数run序列;
对level序列和run序列分别进行游程编码,分别得到对应的游程码字对,对得到的两游程码字对分别进行变长编码。
2.如权利要求1所述的方法,其特征在于,所述对level序列进行游程编码包括:根据level序列中绝对值为1的level,对level序列进行游程编码。
3.如权利要求1或2所述的方法,其特征在于,所述对run序列进行游程编码包括:根据run序列中为0的run,对run序列进行游程编码。
4.如权利要求2所述的方法,其特征在于,所述根据level序列中绝对值为1的level,对level序列进行游程编码包括:记录level序列中各绝对值非1的level,以及该level的相邻低频侧连续为1的level的个数lev_pos,得到(level,level_pos)序列对。
5.如权利要求4所述的方法,其特征在于,所述记录level序列中各绝对值非1的level,以及该level的相邻低频侧连续为1的level的个数lev_pos为:从level序列的高频端向低频端依次记录。
6.如权利要求3所述的方法,其特征在于,所述根据run序列中为0的run,对run序列进行游程编码包括:记录run序列中各非0的run的run,并记录该run的相邻高频侧连续为0的run的个数run_pos,得到(run,run_pos)序列对。
7.如权利要求6所述的方法,其特征在于,所述记录各非0的run的run,并记录该run的相邻高频侧连续为0的run的个数run_pos为:从run序列的低频端向高频端依次记录。
8.如权利要求1所述的方法,其特征在于,所述对level序列和run序列分别进行游程编码之后、对得到的两游程码字对分别进行变长编码之前进一步包括:对输入数据块中的非零系数的个数进行变长编码。
9.如权利要求8所述的方法,其特征在于,所述对输入数据块中的非零系数个数进行变长编码包括:根据输入数据块的上块和左块中包含的非零系数个数,对输入数据块中的非零系数个数进行邻块预测,根据该预测值选择变长编码VCL表,根据该VLC表对输入数据块中的非零系数个数编码。
10.如权利要求8所述的方法,其特征在于,所述对level序列经游程编码得到的游程码字对进行变长编码包括:
A1、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取对应的2D_VLC表,确定2D_VLC表中的第一张表为默认的初始码表,用确定的2D_VLC码表对level序列经游程编码得到的当前游程码字对:(level,lev_pos)序列对编码;
B1、判断是否所有(level,lev_pos)序列对已编码完毕,若是,用确定的码表对(level,lev_pos)对的结束标志编码;否则,执行步骤C1;
C1、根据该刚编码完的(level,lev_pos)序列对中的level的绝对值,判断编码下一(level,lev_pos)序列对所用的2D_VLC码表是否需要更新,若是,根据所述绝对值,确定编码下一(level,lev_pos)序列对所用的码表,对下一(level,lev_pos)序列对编码,转至步骤B1;否则,采用与刚编码完的(level,lev_pos)序列对相同的码表,对下一(level,lev_pos)序列对编码,转至步骤B1。
11.如权利要求8所述的方法,其特征在于,所述对level序列和run序列分别进行游程编码之后、对得到的两游程码字对分别进行变长编码之前进一步包括:对level序列的高频端绝对值连续为1的level的个数编码。
12.如权利要求11所述的方法,其特征在于,对level序列的高频端绝对值连续为1的level的个数编码包括:根据输入数据块中的非零系数个数选择VLC表,根据该VLC表对level序列的高频端绝对值连续为1的level的个数编码。
13.如权利要求11所述的方法,其特征在于,所述对level序列经游程编码得到的游程码字对进行变长编码包括:
A2、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取对应的2D_VLC表,确定2D_VLC表中的第一张表为默认的初始码表,用确定的2D_VLC码表对level序列经游程编码得到的当前游程码字对:(1evel,lev_pos)序列对编码;
B2、判断是否所有(level,lev_pos)序列对已编码完毕,若是,确定(level,lev_pos)序列对编码结束;否则,执行步骤C2;
C2、根据该刚编码完的(level,lev_pos)序列对中的level的绝对值,判断编码下一(level,lev_pos)序列对所用的2D_VLC码表是否需要更新,若是,根据所述绝对值,确定编码下一(level,lev_pos)序列对所用的码表,对下一(level,lev_pos)序列对编码,转至步骤B2;否则,采用与刚编码完的(level,lev_pos)序列对相同的码表,对下一(level,lev_pos)序列对编码,转至步骤B2。
14.如权利要求1或10或13所述的方法,其特征在于,所述对level序列和run序列分别进行游程编码之后进一步包括:从level序列的高频端向低频端扫描,对绝对值为1的level的正负符号编码。
15.如权利要求l4所述的方法,其特征在于,所述对绝对值为1的level的正负符号编码包括:当绝对值为1的level为正时,确定编码指示位为1;当绝对值为1的level为负时,确定编码指示位为0。
16.如权利要求1或10或13所述的方法,其特征在于,所述对run序列经游程编码得到的游程码字对进行变长编码包括:
A3、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取对应的2D_VLC表,确定2D_VLC表中的第一张表为默认的初始码表,用确定的2D_VLC码表对run序列经游程编码得到的当前游程码字对:(run,run_pos)序列对编码;
B3、判断是否所有(run,run_pos)序列对已编码完毕,若是,用确定的码表对(run,run_pos)对的结束标志编码;否则,执行步骤C3;
C3、根据该刚编码完的(run,run_pos)序列对中的run值,判断编码下一(run,run_pos)序列对所用的2D_VLC码表是否需要更新,若是,根据所述run值,确定编码下一(run,run_pos)序列对所用的码表,对下一(run,run_pos)序列对编码,转至步骤B3;否则,采用与刚编码完的(run,run_pos)序列对相同的码表,对下一(run,run_pos)序列对编码,转至步骤B3。
17.一种变长编码装置,其特征在于,包括:
预处理模块,用于对收到的输入数据块的level序列进行游程编码,将得到的游程码字对:(level,lev_pos)输出到变长编码模块,对收到的输入数据块的run序列进行游程编码,将得到的游程码字对:(run,run_pos)输出到变长编码模块;
变长编码模块,对收到的游程码字对进行变长编码。
18.如权利要求17所述的装置,其特征在于,所述预处理模块包括:
第一游程编码模块,用于对输入数据块进行扫描,得到残差系数序列,对该残差系数序列进行游程编码,将得到的level序列和run序列输出到第二游程编码模块;
第二游程编码模块,根据收到的level序列中绝对值为1的level对level序列进行游程编码,将得到的游程码字对:(level,lev_pos)输出到变长编码模块;根据收到的run序列中为0的run对run序列进行游程编码,将得到的游程码字对:(run,run_pos)输出到变长编码模块。
19.如权利要求17所述的装置,其特征在于,所述变长编码模块包括:
非零系数个数编码模块,根据收到的(level,lev_pos)序列对确定输入数据块中的非零系数个数,对该个数进行变长编码;
(level,lev_pos)序列对编码模块,对收到的(level,lev_pos)序列对进行变长编码,编码完毕,将当前采用的码表发送给结束标志编码模块;
结束标志编码模块,根据收到的码表对(level,lev_pos)序列对的结束标志编码;
符号编码模块,根据收到的(level,lev_pos)序列对,从高频端到低频端,对各绝对值为1的level的正负符号进行编码;
(run,run_pos)序列对编码模块,对收到的(run,run_pos)序列对进行变长编码。
20.如权利要求17所述的装置,其特征在于,所述变长编码模块包括:
非零系数个数编码模块,根据收到的(level,lev_pos)序列对确定输入数据块的非零系数个数,对该个数进行变长编码;
绝对值连续为1的level个数编码模块,根据收到的(level,lev_pos)序列对,确定level序列的高频端绝对值连续为1的level的个数,对该个数进行变长编码;
(level,lev_pos)序列对编码模块,对收到的(level,lev_pos)序列对进行变长编码;
符号编码模块,根据收到的(level,lev_pos)序列对,从高频端到低频端,对各绝对值为1的level的正负符号进行编码;
(run,run_pos)序列对编码模块,对收到的(run,run_pos)序列对进行变长编码。
21.如权利要求19或20所述的装置,其特征在于,所述非零系数个数编码模块包括:
非零系数个数预测模块,用于根据输入数据块的上块和左块中包含的非零系数个数,对输入数据块包含的非零系数个数进行邻块预测,将预测值输出到编码模块;
编码模块,用于根据预处理模块发来的(level,lev_pos)序列对确定输入数据块中的非零系数个数,根据非零系数个数预测模块发来的预测值为自身确定的非零系数个数选择VLC表,通过查找该VLC表为自身确定的非零系数个数编码。
22.如权利要求19或20所述的装置,其特征在于,所述(level,level_pos)序列对编码模块包括:
2D_VLC表选择模块,用于根据输入数据块所处宏块采用的帧内预测或帧间预测方式,选择对应的2D_VLC表,将该2D_VLC表发送到2D_VLC表保存模块;
2D_VLC表保存模块,用于保存收到的2D_VLC表;
(level,level_pos)编码模块,收到预处理模块发来的(level,lev_pos)序列对,从2D_VLC表保存模块获取第一张码表,从高频端到低频端,根据该码表顺序对各(level,lev_pos)序列对编码,每编码完一个(level,lev_pos)序列对,向码表更新判断模块发送刚编码完的(level,lev_pos)序列对中的level,若收到码表更新判断模块发来的携带新码表的更新指示,则根据该新码表对下一(level,lev_pos)序列对编码;若收到码表更新判断模块发来的不更新指示,则采用与刚编码完的(level,lev_pos)序列对相同的码表,对下一(level,lev_pos)序列对编码;
码表更新判断模块,根据收到的level的绝对值判断是否需要更新码表,若是,则根据该level的绝对值在2D_VLC表保存模块中选择一个码表,将该码表携带在更新指示中发送给(level,level_pos)编码模块;否则,向(level,level_pos)编码模块发送不更新指示。
23.如权利要求19或20所述的装置,其特征在于,所述(run,run_pos)序列对编码模块包括:
2D_VLC表选择模块,用于根据输入数据块所处宏块采用的帧内预测或帧间预测方式,选择对应的2D_VLC表,将该2D_VLC表发送到2D_VLC表保存模块;
2D_VLC表保存模块,用于保存收到的2D_VLC表;
(run,run_pos)编码模块,收到预处理模块发来的(run,run_pos)序列对,从2D_VLC表保存模块获取第一张码表,从高频端到低频端,根据该码表顺序对各(run,run_pos)序列对编码,每编码完一个(run,run_pos)序列对,向码表更新判断模块发送刚编码完的(run,run_pos)序列对中的run,若收到码表更新判断模块发来的携带新码表的更新指示,则根据该新码表对下一(run,run_pos)序列对编码;若收到码表更新判断模块发来的不更新指示,则采用与刚编码完的(run,run_pos)序列对相同的码表,对下一(run,run_pos)序列对编码;
码表更新判断模块,根据收到的run的值判断是否需要更新码表,若是,则根据该run的值在2D_VLC表保存模块中选择一个码表,将该码表携带在更新指示中发送给(run,run_pos)编码模块;否则,向(run,run_pos)编码模块发送不更新指示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610164458 CN100551064C (zh) | 2006-12-05 | 2006-12-05 | 变长编码方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610164458 CN100551064C (zh) | 2006-12-05 | 2006-12-05 | 变长编码方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101198056A true CN101198056A (zh) | 2008-06-11 |
CN100551064C CN100551064C (zh) | 2009-10-14 |
Family
ID=39548150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610164458 Expired - Fee Related CN100551064C (zh) | 2006-12-05 | 2006-12-05 | 变长编码方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100551064C (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013033895A1 (zh) * | 2011-09-07 | 2013-03-14 | 速压公司 | 数据压缩和解压缩方法、程序、存储介质及电子产品 |
CN103188486A (zh) * | 2011-12-28 | 2013-07-03 | 联芯科技有限公司 | H.263视频编码的可变长编码方法和系统 |
CN111384968A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 数据压缩解压装置和数据解压方法 |
CN112399181A (zh) * | 2019-08-19 | 2021-02-23 | 华为技术有限公司 | 图像编解码的方法、装置和芯片 |
CN112449186A (zh) * | 2019-08-30 | 2021-03-05 | 腾讯科技(深圳)有限公司 | 编码方法、解码方法、相应的装置、电子设备及存储介质 |
-
2006
- 2006-12-05 CN CN 200610164458 patent/CN100551064C/zh not_active Expired - Fee Related
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013033895A1 (zh) * | 2011-09-07 | 2013-03-14 | 速压公司 | 数据压缩和解压缩方法、程序、存储介质及电子产品 |
CN103188486A (zh) * | 2011-12-28 | 2013-07-03 | 联芯科技有限公司 | H.263视频编码的可变长编码方法和系统 |
CN103188486B (zh) * | 2011-12-28 | 2016-04-20 | 联芯科技有限公司 | H.263视频编码的可变长编码方法和系统 |
CN111384968A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 数据压缩解压装置和数据解压方法 |
CN111384968B (zh) * | 2018-12-28 | 2022-08-09 | 上海寒武纪信息科技有限公司 | 数据压缩解压装置和数据解压方法 |
CN112399181A (zh) * | 2019-08-19 | 2021-02-23 | 华为技术有限公司 | 图像编解码的方法、装置和芯片 |
WO2021031877A1 (zh) * | 2019-08-19 | 2021-02-25 | 华为技术有限公司 | 图像编解码的方法、装置和芯片 |
CN112399181B (zh) * | 2019-08-19 | 2022-08-26 | 华为技术有限公司 | 图像编解码的方法、装置和存储介质 |
US11863799B2 (en) | 2019-08-19 | 2024-01-02 | Huawei Technologies Co., Ltd. | Image encoding method and apparatus, image decoding method and apparatus, and chip |
CN112449186A (zh) * | 2019-08-30 | 2021-03-05 | 腾讯科技(深圳)有限公司 | 编码方法、解码方法、相应的装置、电子设备及存储介质 |
CN112449186B (zh) * | 2019-08-30 | 2021-10-12 | 腾讯科技(深圳)有限公司 | 编码方法、解码方法、相应的装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN100551064C (zh) | 2009-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102592909B1 (ko) | 변환 계수의 엔트로피 부호화/복호화 방법 및 장치 | |
CN100488254C (zh) | 一种基于上下文的熵编码方法及解码方法 | |
CN1316433C (zh) | 视频信息编码方法和视频信息解码方法 | |
CN104185990B (zh) | 视频译码中的系数的译码 | |
US6894628B2 (en) | Apparatus and methods for entropy-encoding or entropy-decoding using an initialization of context variables | |
JP3842803B2 (ja) | 信号符号化方法、信号復号方法、信号符号化装置、信号復号装置、信号符号化プログラム、及び信号復号プログラム | |
CN101420614B (zh) | 一种混合编码与字典编码整合的图像压缩方法及装置 | |
US20080219578A1 (en) | Method and apparatus for context adaptive binary arithmetic coding and decoding | |
CN107743239B (zh) | 一种视频数据编码、解码的方法及装置 | |
WO2003003745A1 (en) | Image encoder, image decoder, image encoding method, and image decoding method | |
EP3211897B1 (en) | Method and apparatus for encoding and decoding transform coefficients | |
US20160277741A1 (en) | High throughput significance map processing for cabac in hevc | |
CN107734341A (zh) | 编码和解码变换单位的残差系数的有效性映射的方法 | |
CN102860006A (zh) | 管理预测运动向量候选 | |
CN107710759A (zh) | 用于非正方形块的转换系数编解码的方法及装置 | |
CN109923861A (zh) | 用于对表示与图片数据有关的语法元素的二进制符号序列进行上下文自适应二进制算术编码的方法和设备 | |
CN102783035A (zh) | 并行熵编码和解码方法和设备 | |
CN101267553A (zh) | 一种实现编、解码的方法和装置 | |
CN100551064C (zh) | 变长编码方法及装置 | |
CN100542293C (zh) | 变长编解码方法及其编解码器 | |
CN100413342C (zh) | 用于视频或图像压缩的帧内预测模式编解码的方法和装置 | |
JP2004129206A (ja) | 信号符号化方法、信号復号方法、信号符号化装置、信号復号装置、信号符号化プログラム、及び、信号復号プログラム | |
Vermeirsch et al. | Region-adaptive probability model selection for the arithmetic coding of video texture | |
CN102783036A (zh) | 使用辅码字指示符的编码和解码方法和设备 | |
KR100195717B1 (ko) | 가변 길이 복호기 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20160422 Address after: American California Patentee after: Snaptrack, Inc. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: Huawei Technologies Co., Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091014 Termination date: 20161205 |
|
CF01 | Termination of patent right due to non-payment of annual fee |