变长编码方法及装置的制作方法

文档序号:7974216阅读:243来源:国知局
专利名称:变长编码方法及装置的制作方法
技术领域
本发明涉及数据传输与处理技术领域,具体涉及一种变长编码方法及装置。
背景技术
熵编码早在1950年就应用于视频编码,作为整个视频编码框架的最后 一个模块。熵编码的对象是之前所有模块生成的一系列的语法元素,包括 宏块类型、参考帧索引、编码块模板(CBP, Coded Block Pattern)、量化 步长(QP)、运动矢量的残差、变换和量化后的残差系数等。在所有这些 语法元素中,残差系数的信息量及最终编码后的数据量都是最大的,同时它 也是最具编码压缩空间的,因而 一直以来都是熵编码研究的重点。
80年代中期出现了一个新的针对离散余弦变换(DCT)系数编码的变 长熵编码:技术即二维变长编码(2D-VLC )才支术,该:技术通过zig-zag扫描 将块系数表示成(run, level)的形式,并采用 一个变长码对该(mn, level) 数对进行编码。
为提高块结束符(EOB, End of Block)的编码效率,提出了三维VLC (3D-VLC)技术,该技术对(last, run, level)对进行联合编码,其中,last 表示当前块系数是否为块内的最后一个非零系数。同时出现了针对宏块采用 帧内(intra)预测还是帧间(inter)预测法而设计不同VLC码表的方法。
变长熵编码技术是基于上下文的编码技术,主要是将level及run分开, 分别对level和run建立上下文和进行编码,或者基于2D-VLC的上下文进 行编码,该技术的核心是上下文信息的使用及码表切换的方法。
图1为现有的H.264标准中提出的变长编码方法的流程图,如图l所示,
其具体步骤如下
步骤101:对当前块进行zig-zag扫描,得到残差系数序列。
步骤102:对得到的残差系数序列进行游程编码,得到level和run。
其中,level为当前块中的非零系数,mn为当前块中位于各非零系数之
前的零系数的个数。
步骤103:对各level和各run进行变长编码。
现有技术的缺点是,对各个level和各个run分别进行变长编码,而没 有考虑到各level之间和各run之间的联系,因此,可能还有信息冗余,编 码效率还可进一步提高。

发明内容
有鉴于此,本发明的主要目的在于提供一种变长编码方法及装置,以降低 压缩码率。
为达到上述目的,本发明的技术方案是这样实现的 一种变长编码方法,包括
获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到 非零系数level序列和出现在非零系数之前的零系数的个数run序列;
对level序列和run序列分别进行游程编码,分别得到对应的游程码字对, 对得到的两游程码字对分别进行变长编码。
一种变长编码装置,包括
预处理模块,用于对收到的输入数据块的level序列进行游程编码,将 得到的游程码字对(level, lev_pos )输出到变长编码模块,对收到的输入 数据块的run序列进行游程编码,将得到的游程码字对(run, run—pos ) 输出到变长编码模块;
变长编码模块,对收到的游程码字对进行变长编码。 与现有技术相比,本发明通过在对当前块进行扫描,得到残差系数序列, 对该残差系数序列进行传统游程编码,得到level序列和run序列后,根据
level序歹'J中绝对值为1的level,以及run序歹'J中为0的run,对level序列 和mn序列分别进行游程编码,然后再对得到的两游程码字对分别进行变长 编码,进一步利用了 level序列中为1的level的特征信息,和mn序列中为 0的mn的特征信息,降低了压缩码率,提高了峰值信噪比,本发明可以应 用于各种编码器,同时也与现有的国际H.264标准和国内AVS标准完全兼 容。


图1为现有的H.264标准中提出的变长编码的流程图; 图2为本发明实施例一提供的变长编码的流程图3为本发明实施例一中对(level, lev—pos)序列对进行变长编码的流 程图4为本发明实施例一中对(mn, mn_pos)序列对进行变长编码的流 程图5为本发明实施例二提供的变长编码的流程图; 图6为本发明实施例提供的变长编码的装置框图; 图7为本发明实施例一提供的变长编码模块的结构示意图; 图8为本发明实施例二提供的变长编码模块的结构示意图; 图9为本发明实施例一和二提供的非零系数个数编码模块结构示意图; 图10为本发明实施例一和二提供的(level, lev—pos)序列对编码模块 结构示意图11为本发明实施例一和二提供的(run, mn_pos)序列对编码模块结 构示意图。
具体实施例方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图2是本发明实施例一提供的变长编码的流程图,如图2所示,其具体
步骤如下
步骤201:编码端对当前块进行zig-zag扫描,得到残差系数序列。
本步骤中,也可采用zig-zag以外的方式对当前块进行扫描。
本实施例中提到的块的大小可为4x4或8x8等。具体选取哪种分块方式
取决于整个编码器的需要。
步骤202:编码端对得到的残差系数序列进行传统游程编码,得到level
序列和run序列,统计当前块的非零系数个数numcoeff,即level序列中
包含的系凄t个凄t。
本步骤中的传统游程编码指的是,现有的H.264标准中提到的游程编
码,即level为当前块中的非零系数,run为当前块中位于各非零系数之前 的零系数的个数。
步骤203:编码端根据Level序列中包含的绝对值为1的level,对level 序列进行进一步地游程编码,得到(level, lev一pos)序列对;根据run序列 中包含的为0的run,对run序列进行进一步地游程编码,得到(run, mn_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, levjos)序列对,直至扫描 结束。
本步骤中提到的对run序列进行进一步游程编码的过程如下
从mn序列的低频端向高频端扫描即从左向右扫描,将第一个非0的 run作为第一对(run, run_pos )中的run,将该run的相邻高频侧连续为0 的run的个数作为该第 一对(mn, run_pos )中的mn_pos,按同样的方法获 取之后的(run, mn_pos)序列对,直至扫描结束。
令level序列高频端绝对值连续为1的level的个数为tailingones, run 序列4氐频端连续为0的run的个it为tailingzeros。
步骤204:编码端利用当前块的上块和左块中的非零系数个数,对当前 块中的非零系数个数进行邻块预测,得到预测值pred_num。
当前块的上块指的是与当前块相邻、且位于当前块的正上方的块,当前 块的左块指的与当前块相邻、且位于当前块的正左方的块,设定当前块的上 块或左块不存在是指当前块和其上块或左块不在同一个条带内,或是当前 块处在一帧图片的上边缘或左边缘。则邻块预测的过程为设当前块的上块 和左块中的非零系数个数分别为up_num和left—num,则当前块的非零系 凄t个凄t的预测4直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 )序歹'J对得知tailingones的值。
步骤207:编码端从level序列的高频端到低频端,对level序列中绝对 值为1的level的正、负符号进行编码。
由于将level序列中绝对值为1的level视为游程,而绝对值为1的level 还包含符号信息即是正还是负,所以还需对该符号信息进行编码。这里, 用一个bit表示一个绝对值为1的level的符号信息,即0表示该level的 符号为正,而l表示该level的符号为负。若序列中包含n个绝对值为1的 level,则连续用n个bit从高频到低频顺序表示该n个level的符号,其中, n为整数。
步骤208:编码端从(run, mn_pos )序列对的低频端到高频端,顺序 对各( run , run_pos )序歹'J对进行变长编石马。
由于level和run--对应,且已完成了对level序列的编码,则解码端
可根据level序列中包含的level的个数得知run序列中包含的run的个数, 因此在完成(run, mn_pos)序列对的编码后,无需再对tailingzeros编码, 解码端可根据level序列中level的个数和解码得到的(run, run_pos )序列 对的个数得知tailingzeros的值。
以下以一个具体应用实例对本发明实施例一的步骤102~103进行进一 步详细说明
设当前块的大小为4x4,经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., O., 0; 0; 0; 0; 1; O5 l5 0; 2
可以看出当前块的非零系数个数numcoeff为11。
对level序列和 run序歹'j进一步进4亍游禾呈编石马,分另'J4寻至lj( level, lev_pos ) 序歹ij对和(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。
令mn序列低频端连续为0的个数为tailingzeros,此处tailingzeros为6。 以下对本发明实施例一中对(level, lev_pos )序列对进行变长编码的过
程进行详细说明,图3为本发明实施例一提供的对(level, lev_pos)序列对
进行变长编码的流程图,如图3所示,其具体步骤如下
步骤301:编码端根据当前块所处的宏块采用的是帧内预测还是帧间预
测选取对应的2D一VLC表。
为两类。
步骤302:编码端确定2DJVLC表中的第一张表为默认的初始码表。 步骤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, Iev_pos)序列对编码,转至步骤304。
步骤307:编码端采用与刚编码完的(level, lev—pos )序列对相同的码 表,对下一 (level, lev_pos)序列对编码,转至步骤304。
步骤308:编码端采用当前码表对(level, lev—pos )序列对的结束标志 (EOL, End of Level)编码。
以下对本发明实施例一中对(mn, run_pos)序列对进行变长编码的过 程进行详细说明,图4为本发明实施例一提供的对(run, mnjios)序列对 进行变长编码的流程图,如图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)序列对 中的mn的值大于该阈值,则确定更新码表;否则,确定不更新码表。
步骤406:编码端根据刚编码完的(run, run_pos )序列对中的run的 值,确定编码下一(run, run_pos)序列对所用的码表,根据该码表对下一 (run, run_pos)序列对编码,转至步骤404。
步骤407:编码端采用与刚编码完的(run, run—pos )序列对相同的码 表,对下一(run, run_pos)序列对编码,转至步骤404。
步骤408:编码端采用当前码表对(run, mn_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, runjos)序列对分别进行变长编码,将得到的编码值输出到解码端。
图7给出了本发明实施例一提供的变长编码模块的结构示意图,如图7 所示,其主要包括非零系数个数编码模块731、 (level, levjos)序列对 编码模块732、结束标志编码模块733、符号编码模块734和(run, mn_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:用于对预处理4莫块61发来的(run, run_pos)序列对进行变长编码,将得到的编码值输出到解码端。
图8给出了本发明实施例二提供的变长编码模块的结构示意图,如图8 所示,与图7相比,其区别在于不包含结束标志编码模块733,且进一步 包括绝对值连续为1的level个数编码模块736,该模块用于根据预处理 才莫块61发来的(level, levjos)序列对,确定level序列的高频端绝对值连 续为1的level的个数,对该个数进行变长编码,将得到的编码值输出到解 码端。
且,在本实施例中,(level, lev _pos )序歹'J对编码模块732在编码艽毕 时,无需发送当前采用的码表。
图9为本发明实施例一和二提供的非零系数个数编码模块的结构示意 图,如图9所示,其主要包括非零系数个数预测模块911和编码模块912, 其中
非零系数个数预测模块911:用于根据当前块的上块和左块中包含的非 零系数个数,对当前块包含的非零系数个数进行邻块预测,将预测值输出到 编码模块912。
编码模块912:用于根据预处理模块61发来的(level, lev—pos )序列 对确定当前块中的非零系数个数,根据非零系数个数预测模块911发来的预 测值为自身确定的非零系数个数选择VLC表,通过查找该VLC表为自身确 定的非零系数个数编码,将得到的编码值输出到解码端。
图10为本发明实施例一和二提供的(level, leveLpos)序列对编码模 块的结构示意图,如图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, leveLpos)编码才莫块1023:接收到预处理才莫块61发来的(level, levjos)序列对,从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)序列对编码模块的 结构示意图,如图U所示,其主要包括2D一VLC表选择模块1151、2D—VLC 表保存模块1152、 (run, runjos)编码模块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, runjos)序列对,从2D—VLC表保存模块1152获取第一张码表,从高频端 到低频端,根据该码表顺序对各(run, run_pos)序列对编码,每编码完一 个(run, runjos)序列对,向码表更新判断模块1154发送刚编码完的(run, mn一pos)序列对中的run,之后若收到码表更新判断模块1154发来的携带 新码表的更新指示,则根据该新码表对下一 (run, mn_pos)序列对编码; 若收到码表更新判断模块1154发来的不更新指示,则采用与刚编码完的 (run, run_pos)序列对相同的码表,对下一 (run, mn_pos)序列对编码, 将所有(run, mn_pos)序列对编码完毕,将各编码值发送到解码端。
码表更新判断模块1154:当收到(run, run_pos )编码模块1153发来 的run,根据该run的值判断是否需要更新码表,若是,则根据该run的值 在2D—VLC表保存模块1152中选择一个码表,将该码表携带在更新指示中 发送给(run, mn_pos)编码模块1153;否则,向(run, run_pos)编码模 块1153发送不更新指示。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在 本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在 本发明的保护范围之内。
权利要求
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的个数levjos,得到(level, level_pos)序歹'J对。
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、 如权利要求l所述的方法,其特征在于,所述对level序列和run序 列分别进行游程编码之后、对得到的两游程码字对分别进行变长编码之前进 一步包括对输入数据块中的非零系数的个数进行变长编码。
9、 如权利要求8所述的方法,其特征在于,所述对输入数据块中的非 零系数个数进行变长编码包括根据输入数据块的上块和左块中包含的非零 系数个数,对输入数据块中的非零系数个数进行邻块预测,根据该预测值选 择变长编码VCL表,根据该VLC表对输入数据块中的非零系数个数编码。
10、 如权利要求8所述的方法,其特征在于,所述对level序列经游程编码 得到的游程码字对进行变长编码包括A1 、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取 对应的2DJ/LC表,确定2D—VLC表中的第一张表为默认的初始码表,用 确定的2D—VLC码表对level序列经游程编码得到的当前游程码字对(level, lev_pos)序列对编码;Bl、判断是否所有(level, lev_pos)序列对已编码完毕,若是,用确 定的码表对(level, lev_pos)对的结束标志编码;否则,执行步骤Cl;Cl、根据该刚编码完的(level, lev—pos)序列对中的level的绝对值, 判断编码下一 (level, lev_pos)序列对所用的2D一VLC码表是否需要更新, 若是,根据所述绝对值,确定编码下一 (level, levjos)序列对所用的码表, 对下一 (level, lev_pos)序列对编码,转至步骤Bl;否则,采用与刚编码 完的(level, lev_pos)序列对相同的码表,对下一 (level, levjos)序列对 编码,转至步骤Bl。
11、 如权利要求8所述的方法,其特征在于,所述对level序列和run 序列分别进行游程编码之后、对得到的两游程码字对分别进行变长编码之前 进一步包括对level序列的高频端绝对值连续为1的level的个数编码。
12、 如权利要求11所述的方法,其特征在于,对level序列的高频端绝 对值连续为1的level的个数编码包括根据输入数据块中的非零系数个数 选择VLC表,根据该VLC表对level序列的高频端绝对值连续为1的level 的个数编码。
13、 如权利要求11所述的方法,其特征在于,所述对levd序列经游程 编码得到的游程码字对进行变长编码包括A2、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取 对应的2D—VLC表,确定2D一VLC表中的第一张表为默认的初始码表,用 确定的2D一VLC码表对level序列经游程编码得到的当前游程码字对(level, lev_pos)序列对编石马;B2、判断是否所有(level, lev_pos)序列对已编码完毕,若是,确定 (level, lev_pos)序列对编码结束;否则,执行步骤C2;C2、根据该刚编码完的(level, lev_pos )序列对中的level的绝对值, 判断编码下一 (level, lev_pos)序列对所用的2D—VLC码表是否需要更新, 若是,根据所述绝对值,确定编码下一 (level, levj)os)序列对所用的码表, 对下一 (level, lev_pos)序列对编码,转至步骤B2;否则,采用与刚编码 完的(level, lev_pos)序列对相同的码表,对下一 (level, lev_pos )序列对 编码,转至步骤B2。
14、 如权利要求1或10或13所述的方法,其特征在于,所述对level 序列和run序列分别进行游程编码之后进一步包括从level序列的高频端 向低频端扫描,对绝对值为1的level的正负符号编码。
15、 如权利要求14所述的方法,其特征在于,所述对绝对值为1的level 的正负符号编码包括当绝对值为1的level为正时,确定编码指示位为1; 当绝对值为1的level为负时,确定编码指示位为O。
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, mn_pos )序列对所用的码表,对下一 (run, runjos)序列对编码,转至步骤B3;否则,采用与刚编码完的(run, run_pos)序列对相同的码表,对下一 (run, mn_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, levjos)序列 对进行变长编码,编码完毕,将当前采用的码表发送给结束标志编码模块; 结束标志编码模块,根据收到的码表对(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序列的高频端绝对值连续为l的level的个数,对该个数 进行变长编码;(level, lev_pos)序列对编码模块,对收到的(level, levjDos)序列 对进行变长编码;符号编码模块,根据收到的(level, levjos)序列对,从高频端到低频 端,对各绝对值为1的level的正负符号进行编码;(run, run_pos )序列对编码模块,对收到的(mn, run_pos )序列对 进行变长编码。
21、 如权利要求19或20所述的装置,其特征在于,所述非零系数个数 编码模块包括非零系数个数预测模块,用于根据输入数据块的上块和左块中包含的非 零系数个数,对输入数据块包含的非零系数个数进行邻块预测,将预测值输 出到编码模块;编码模块,用于根据预处理模块发来的(ievel, lev—p0S)序列对确定输入数据块中的非零系数个数,根据非零系数个数预测模块发来的预测值为自 身确定的非零系数个数选择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, levjos)序列对编码,每编码完一个(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, mn_pos ) 序列对编码模块包括2D_VLC表选择模块,用于根据输入数据块所处宏块采用的帧内预测或 帧间预测方式,选择对应的2D—VLC表,将该2D—VLC表发送到2D_VLC 表保存模块;2D—VLC表保存模块,用于保存收到的2D—VLC表; (run, mn_pos)编码模块,收到预处理模块发来的(run, mn_pos) 序列对,从2D—VLC表保存模块获取第一张码表,从高频端到低频端,根据 该码表顺序对各(run, run_pos )序列对编码,每编码完一个(run, run_pos ) 序列对,向码表更新判断模块发送刚编码完的(run, mn_pos)序列对中的 run,若收到码表更新判断模块发来的携带新码表的更新指示,则根据该新 码表对下一(run, run_pos)序列对编码;若收到码表更新判断模块发来的 不更新指示,则采用与刚编码完的(run, run_pos)序列对相同的码表,对 下一 (run, run_pos)序歹'J对编码;码表更新判断模块,根据收到的run的值判断是否需要更新码表,若是, 则根据该run的值在2D—VLC表保存模块中选择一个码表,将该码表携带在 更新指示中发送给(run, run_pos)编码才莫块;否则,向(run, run_pos )编 码模块发送不更新指示。
全文摘要
本发明公开了一种变长编码方法,包括获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到level序列和run序列后,对level序列和run序列分别进行游程编码,然后再对得到的两游程码字对分别进行变长编码。本发明同时公开了一种变长编码装置,包括预处理模块和变长编码模块。本发明进一步利用了level序列中为1的level的特征信息,和run序列中为0的run的特征信息,降低了压缩码率,提高了峰值信噪比,本发明可以应用于各种编码器,同时也与现有的国际H.264标准和国内AVS标准完全兼容。
文档编号H04N7/26GK101198056SQ200610164458
公开日2008年6月11日 申请日期2006年12月5日 优先权日2006年12月5日
发明者崔春晖, 熊联欢, 欣 金 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1