CN100527847C - 基于零前缀码的变长码解码方法 - Google Patents
基于零前缀码的变长码解码方法 Download PDFInfo
- Publication number
- CN100527847C CN100527847C CN 200710064445 CN200710064445A CN100527847C CN 100527847 C CN100527847 C CN 100527847C CN 200710064445 CN200710064445 CN 200710064445 CN 200710064445 A CN200710064445 A CN 200710064445A CN 100527847 C CN100527847 C CN 100527847C
- Authority
- CN
- China
- Prior art keywords
- node
- code
- bit
- child node
- child
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 4
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及基于零前缀码的变长码解码方法,属于数字视频编解码技术领域。该方法包括:生成多个基于0前缀码的多叉树,根据该多叉树对码流进行变长码解码;该树的结构包括:由一个根节点及其多级节点构成的0前缀码字比特序列,根节点只记录其子节点的个数,其它各级节点还记录所述码字序列的比特位,每个节点最多存在4个子节点,如果该节点的子节点个数为0,该节点为叶子节点,叶子节点同时记录和码字对应的语法元素值。本发明具有较高的效率,能够满足在实时编解码系统中的应用。
Description
技术领域
本发明属于数字视频编解码技术领域,具体来说,是关于快速参照H.264/AVC标准中规定的CAVLC表格进行解码的方法。
背景技术
H.264/AVC是新一代数字视频编码标准,它是由国际电联(ITU)和MPEG标准组织ISO组成的合作开发组(JVT)共同开发的。H.264/AVC作为视频技术标准,能够适应于视频应用的各个领域,包括低码率的无线应用,网络视频应用,高清晰度的电视广播应用和DVD应用。
H.264/AVC和以前的编码标准H.263,MPEG-4类似,都是采用基于预测变换的混合编码模式,同时吸收了以前的标准的优势,在编码性能上较H.263,MPEG-4有了较大的提高,在同等质量的情况下能够节约40%的码率。H.264/AVC的码流分为两个层次,视频编码层(VideoCoding Layer,VLC)和网络抽象层(Network Abstract Layer,NAL)。视频编码层主要记录对视频内容进行压缩后的核心数据,网络抽象层主要记录描述特定网络环境的信息,通过这样的层次划分,有利于视频数据的封装和数据在网络中的传输控制。
H.264/AVC的编码过程主要分为以下几个部分:
(1)帧内预测,以消除空间冗余度;
(2)通过运动搜索进行帧间预测,以消除时间冗余度;
(3)对原始图像块和预测块之间的差别形成的残差块进行变换和量化;
(4)对量化后得到的系数残差进行重排和熵编码。
解码过程主要分为以下几个部分:
(1)熵解码,对解码后的系数进行重排;
(2)对重排后的系数进行反量化和反变换;
(3)通过帧内预测或帧间预测得到预测块;
(4)通过预测块和残差块得到解码图像。
在H.264/AVC编码中,熵编码分为两种:上下文自适应的可变长度编码(CAVLC,简称变长码)和上下文自适应的二进制算术编码(CABAC)。CAVLC熵编码是一种可变长编码,可变长编码是利用不同的语法元素在码流中出现的概率,利用不同比特长度的码字对语法元素进行编码,出现概率高的语法元素对应于比特长度较短的码字,概率较低的语法元素对应于比特长度较长的码字。在编码的过程中,通过码表的形式记录着不同的语法元素信息所对应的码字。由于在不同的视频帧中,语法元素信息的概率分布不相同,采用统一的码表不能够达到很高的压缩效率,在CAVLC熵编码过程中,采用已编码的邻近的图像块对应的语法元素的信息来动态的调整编码所参照的码表,使编码所选择的码表中码字的概率分布同实际的语法元素信息的概率分布更接近,以达到较高的压缩效率。采用CAVLC编码对H.264/AVC中的系数残差进行熵编码,需要编码的语法元素有TotalCoeff(重排序列中非0系数的个数),TrailingOnes(重排序列末尾的1或者-1的个数),total_zeros(重排序列中最后一个非0系数前0的个数),run_before(重排序列中每个非0系数前0的个数)。每个的语法元素对应着不同的码表,但是TotalCoeff和TrailingOnes是采用组合编码的方式,通过对两个匹配的语法元素联合编码并合并成一个码字以提高压缩效率,由于两种语法元素信息编码后合并在一个码字中,相应的码表长度就比一个语法元素进行编码时有所增加。
在解码过程中,为了从码流中的码字得到具体的语法元素的值,需要按照码表中出现的码字的长度从码流存储器中读取相同长度的码字,然后同码表中的码字进行匹配,如果匹配不成功,则切换到码表中出现的下一个码字,进行相同的操作。采用这样的方式进行解码需要频繁的访问码流存储器,而且在最差的情况下需要对整个码表进行遍历后才能够找到正确的码字,完成解码过程。这种处理方法效率低下,不适于应用在实时的编解码系统中。
发明内容
本发明的目的是为克服已有技术的不足之处,提出一种基于零前缀码的变长码解码方法,本发明根据CAVLC码表生成多叉树。即变换CAVLC码表的形式,该方法面向H.264/AVC在实时性要求较高的系统的应用,为使用者提供了在符合H.264/AVC标准所规定的码流中,对残差块参照CAVCL码表进行解码;这种方法具有较高的效率,能够满足在实时编解码系统中的应用。
本发明提出的基于零前缀码的变长码解码方法,其特征在于,该方法包括:生成多个基于0前缀码的多叉树,根据该多叉树对码流进行变长码解码;
所述的基于0前缀码的多叉树的结构包括:由一个根节点及其多级节点构成的0前缀码字比特序列,下级节点是其上级节点的子节点;其中,根节点只记录其子节点的个数,其它各级节点除记录其子节点的个数外,还记录所述码字序列的比特位,所述子节点记录的比特位是其上级节点记录的比特位及后续的比特位,每个节点最多存在4个子节点,各子节点分别记录后续的非零比特位及其前的0-3个0的比特位;如果该节点的子节点个数为0,该节点为叶子节点,叶子节点同时记录和码字对应的语法元素值;
所述根据生成的基于0前缀码的多叉树对码流进行变长码解码,具体包括以下步骤:
1)设置所述多叉树的根节点为当前节点,设置比特位指针P指向下一个将要读取的码流比特位,如果码流结束,则转到6);
2)读取当前节点的子节点数N,令N=N-1,设置子节点计数K,且K=0;
3)如果码流结束,则表示码流错误,转到6);否则,读取该指针P指向的码流比特位,令K=K+1,指针P移到下一个将要读取的比特位,读取的码流比特位如果值为1,则转到4);如果值为0,则转到5);
4)设置当前节点的第K个子节点为当前节点,判断当前节点是否为叶子节点,如果是,则读取存储在该节点中的视频语法元素信息,并转到1);如果不是叶子节点,则转到2);
5)令N=N-1,如果N=0,则令K=K+1,并转到4);否则转到3);
6)结束当前码流的解码。
本发明的原理:
本发明基于可变长编码的原理。由于编码系统进行的是可变长编码,在同一个码表列中不存在一个码字是另一个码字的前缀,把CAVLC码表转换为树来表示。由于在CAVLC码表中,码字中值为0的比特位占有较大的比例,采用0前缀树来对CAVLC进行转换,能够提高整体的解码效率。
本发明具有以下特点:
1.由于码字按树结构进行存储,只需按顺序读取比特流数据,减少对存储器的访问。
2.解码时只需访问对应的多叉树,不必对码表进行搜索,提高了解码效率。
3.基于0前缀码的多叉树中一个节点可对应多个比特位,对于大部分的码字,能够遍历较少的节点,就找到对应的语法元素信息。
将本发明应用在实时系统中,能够简化解码器,提高处理速度。
附图说明
图1为本发明的基于0前缀码的多叉树的节点结构。
图2为本实施例解码中语法元素total_zeros所参照的CAVLC码表。
图3为本实施例根据CAVLC码表所生成的基于0前缀码的多叉树结构。
具体实施方式
下面结合附图及实施例对本发明进行详细的说明。
本发明提出的基于零前缀码的变长码解码方法,其特征在于,该方法包括:生成多个基于0前缀码的多叉树,根据该多叉树对码流进行变长码解码;其中,基于0前缀码的多叉树的结构包括:由一个根节点及其多级节点构成的0前缀码字比特序列,下级节点是其上级节点的子节点;其中,根节点只记录其子节点的个数,其它各级节点除记录其子节点的个数外,还记录所述码字序列的比特位,所述子节点记录的比特位是其上级节点记录的比特位及后续的比特位,每个节点最多存在4个子节点,各子节点分别记录后续的非零比特位及其前的0的0-3个0的比特位;如果该节点的子节点个数为0,该节点为叶子节点(则表示码字结束),叶子节点同时记录和码字对应的语法元素值。
该多叉树中一个节点的内容,如图1所示,包括其子节点个数,子节点指针或语法元素值(如果是叶子节点,则没有子节点指针,如果不是叶子节点,则没有语法元素值);
上述基于0前缀码的多叉树是利用H.264/AVC标准中所规定的码表来生成的,其具体生成方法包括:首先对多叉树进行初始化(即初始化为仅含一个子节点个数为0的根节点的树),并设置变量E,其值为1或0;再利用该树来生成基于0前缀码的多叉树,具体包括以下步骤:
1)置树的根节点为当前节点,读取码表中的一个码字,设置比特位指针P指向码字的第一个比特位,如码表结束则转到5);
2)指针P所指的位置读取该码字的N个比特位,直到读取到的比特位值为1或者N=3或者码字结束,移动指针P到下一个将要读取得比特位,并判断指针P是否到了码字的结束,如果码字已结束,则变量E置1,否则置0;如果读取到的比特位串中有1,则转到3);如果读取到的比特位串中没有1,则转到4);
3)判断当前节点的第N个子节点是否存在,如不存在,则建立相应子节点,判断当前节点的字节点个数是否小于N,如小于N,则修改当前节点的子节点个数为N,并移动当前节点到它的第N个子节点。如果E=1,则设置当前节点为叶子节点,将对应得视频语法元素信息存储在该节点中,结束当前码字的转换,转到1);如果E=0,则转到2);
4)断当前节点的第N+1个子节点是否存在,如不存在,则建立相应得子节点,判断当前节点的子节点个数是否小于N+1,如小于N+1,则修改当前节点的子节点个数为N+1,并移动当前节点到它的第N+1个子节点。如果则设置当前节点为叶子节点,并将对应得视频语法元素信息存储在该节点中,结束当前码字的转换,转到1);如果E=0,则转到2)。
5)基于0前缀码的多叉树的构造结束。
基于0前缀码的多叉树构造完成后,在以后的解码过程中,就不需要参照H.264/AVC标准中的码表进行解码,只需要参照基于0前缀码的多叉树即可解码,这样可以避免复杂的匹配过程。
根据上述生成的基于0前缀码的多叉树对码流进行变长码解码,具体包括以下步骤:
1)设置所述多叉树的根节点为当前节点,设置比特位指针P指向下一个将要读取的码流比特位,如果码流结束,则转到6);
2)取当前节点的子节点数N,令N=N-1,设置子节点计数K,且K=0;
3)果码流结束,则表示码流错误,转到6);否则,读取该指针P指向的码流比特位,令K=K+1,指针P移到下一个将要读取得比特位,读取的码流比特位如果值为1,则转到4);如果值为0,则转到5);
4)设置当前节点的第K个子节点为当前节点,判断当前节点是否为叶节点,如果是,则读取存储在该节点中的视频语法元素信息,并转到1);如果不是叶节点,则转到2);
5)令N=N-1,如果N=0,则令K=K+1,并转到4);否则转到3);
6)结束当前码流的解码。
这样就完成了参照基于0前缀码的多叉树对H.264/AVC的残差块码流的解码。
以下通过实施例对本发明所提出的一种根据CAVLC码表的基于0前缀码的多叉树解码方法进行详细说明。
本实施例采用的基于0前缀码的多叉树,在每个节点中采用一个域来存储该节点的子节点数,子节点的取值范围为0-4,其中0代表叶子节点。
图2是本实施例解码中语法元素total_zeros(重排序列中最后一个非0系数前0的个数)所参照的CAVLC码表,其中码表第一列表示解码得到的语法元素total_zeros的值,码表的第二列到第八列表示码流中可能存在的码字,同一行中的码字和该行第一列中的语法元素值对应,根据已经解码得到的不同的TotalCoeff(重排序列中非0系数的个数)值从不同的列中选取码字进行解码。
本实施例对图2中CAVLC码表的第一列转换得到的基于0前缀码的多叉树,如图3所示。图中包括一个根节点及四级节点,其中,最上层的节点表示根节点,其中记录其子节点为4。每级的一个节点的子节点(如果存在)按从左到右的顺序依次为该节点的第一个子节点,第二个子节点,第三个子节点和第四个子节点。每个节点旁边的比特串表示该节点记录的某个码字中的一段比特位串,叶子节点旁边的比特串对应于其记录的一个完整的码字。
本实施例对一段比特流为000011的码字进行解码,是参照图3中的基于0前缀码的多叉树中相应部分,如图3所示。其解码方法包括:读取根节点中的子节点个数,值为4,读取比特流,由于前三位都没有值为1的比特位,所以读取子节点数减一位比特,即3比特,并把当前节点移动到根节点的第4个子节点;读取当前节点中的子节点个数,值为4,读取比特流,由于第二位为值为1的比特位,所以读取2比特,并设置当前节点的第2个子节点为当前节点;读取当前节点中的子节点个数,值为4,读取比特流,由于第一位为值为1的比特位,所以只读取1比特,并设置当前节点的第1个子节点为当前节点;读取当前节点中的子节点个数,值为0,故该码字解码结束,得到total_zeros值为7。
该码字参照基于0前缀码的多叉树进行解码的过程中,只遍历了该多叉树中一支具有3级数节点的部分。可见,采用本发明的方法能够较快的得到码字对应得语法元素信息。
Claims (2)
1、一种基于零前缀码的变长码解码方法,其特征在于,该方法包括:生成多个基于0前缀码的多叉树,根据该多叉树对码流进行变长码解码;
所述的基于0前缀码的多叉树的结构包括:由一个根节点及其多级节点构成的0前缀码字比特序列,下级节点是其上级节点的子节点;其中,根节点只记录其子节点的个数,其它各级节点除记录其子节点的个数外,还记录所述码字序列的比特位,所述子节点记录的比特位是其上级节点记录的比特位及后续的比特位,每个节点最多存在4个子节点,各子节点分别记录后续的非零比特位及其前的0-3个0的比特位;如果该节点的子节点个数为0,该节点为叶子节点,叶子节点同时记录和码字对应的语法元素值;
所述根据生成的基于0前缀码的多叉树对码流进行变长码解码,具体包括以下步骤:
1)设置所述多叉树的根节点为当前节点,设置比特位指针P指向下一个将要读取的码流比特位,如果码流结束,则转到6);
2)读取当前节点的子节点数N,令N=N-1,设置子节点计数K,且K=0;
3)如果码流结束,则表示码流错误,转到6);否则,读取该指针P指向的码流比特位,令K=K+1,指针P移到下一个将要读取的比特位,读取的码流比特位如果值为1,则转到4);如果值为0,则转到5);
4)设置当前节点的第K个子节点为当前节点,判断当前节点是否为叶子节点,如果是,则读取存储在该节点中的视频语法元素信息,并转到1);如果不是叶子节点,则转到2);
5)令N=N-1,如果N=0,则令K=K+1,并转到4);否则转到3);
6)结束当前码流的解码。
2、如权利要求1所述的方法,其特征在于,所述基于0前缀码的多叉树的生成方法,该方法首先对多叉树初始化为仅含一个子节点个数为0的根节点的初始化树,并设置变量E,其值为1或0;再利用该初始化树来生成基于0前缀码的多叉树,具体包括以下步骤:
11)设置树的根节点为当前节点,读取码表中的一个码字,设置比特位指针P指向码字的第一个比特位,如码表结束则转到15);
12)从指针P所指的位置读取该码字的N个比特位,直到读取到的比特位值为1或者N=3或者码字结束,移动指针P到下一个将要读取的比特位,并判断指针P是否到了码字的结束,如果码字已结束,则变量E置1,否则置0;如果读取到的比特位串中有1,则转到13);如果读取到的比特位串中没有1,则转到14);
13)判断当前节点的第N个子节点是否存在,如不存在,则建立相应子节点,判断当前节点的子节点个数是否小于N,如小于N,则修改当前节点的子节点个数为N,并移动当前节点到它的第N个子节点;如果E=1,则设置当前节点为叶子节点,将对应的视频语法元素信息存储在该节点中,结束当前码字的转换,转到11);如果E=0,则转到12);
14)判断当前节点的第N+1个子节点是否存在,如不存在,则建立相应的子节点,判断当前节点的子节点个数是否小于N+1,如小于N+1,则修改当前节点的子节点个数为N+1,并移动当前节点到它的第N+1个子节点;如果E=1设置当前节点为叶子节点,并将对应的视频语法元素信息存储在该节点中,结束当前码字的转换,转到11);如果E=0,则转到12);
15)基于0前缀码的多叉树的构造结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710064445 CN100527847C (zh) | 2007-03-16 | 2007-03-16 | 基于零前缀码的变长码解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710064445 CN100527847C (zh) | 2007-03-16 | 2007-03-16 | 基于零前缀码的变长码解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101022554A CN101022554A (zh) | 2007-08-22 |
CN100527847C true CN100527847C (zh) | 2009-08-12 |
Family
ID=38710183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710064445 Expired - Fee Related CN100527847C (zh) | 2007-03-16 | 2007-03-16 | 基于零前缀码的变长码解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100527847C (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120134426A1 (en) * | 2009-08-20 | 2012-05-31 | Thomson Licensing | Method and apparatus for reusing tree structures to encode and decode binary sets |
CN104661038B (zh) * | 2009-12-10 | 2018-01-05 | Sk电信有限公司 | 使用树形结构的解码装置 |
CN104579567B (zh) * | 2015-01-08 | 2018-10-12 | 无锡清华信息科学与技术国家实验室物联网技术中心 | 逆向路径的编码方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1463500A (zh) * | 2001-05-22 | 2003-12-24 | 皇家菲利浦电子有限公司 | 解码变长码字序列的方法 |
CN1662063A (zh) * | 2004-02-24 | 2005-08-31 | 上海交通大学 | 可变长码解码方法 |
CN1780398A (zh) * | 2004-11-18 | 2006-05-31 | 上海乐金广电电子有限公司 | Cavlc解码方法 |
-
2007
- 2007-03-16 CN CN 200710064445 patent/CN100527847C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1463500A (zh) * | 2001-05-22 | 2003-12-24 | 皇家菲利浦电子有限公司 | 解码变长码字序列的方法 |
CN1662063A (zh) * | 2004-02-24 | 2005-08-31 | 上海交通大学 | 可变长码解码方法 |
CN1780398A (zh) * | 2004-11-18 | 2006-05-31 | 上海乐金广电电子有限公司 | Cavlc解码方法 |
Non-Patent Citations (2)
Title |
---|
H.264中CAVLC解码的高效算法. 童伟,支琤,宋利,熊红凯.微计算机信息,第2006年第26期. 2006 * |
H.264解码器中CAVLC码表查找算法的改进. 朱冬冬,戴琼海.电视技术,第2004年第1期. 2004 * |
Also Published As
Publication number | Publication date |
---|---|
CN101022554A (zh) | 2007-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100492916C (zh) | 采用多映射表的可变长度编码和解码方法及设备 | |
KR101924249B1 (ko) | 계위적 엔트로피 인코딩 및 디코딩 | |
CN100518325C (zh) | 用于视频压缩的组合的游程长度编码和可变长度编码 | |
KR100636229B1 (ko) | 신축형 부호화를 위한 적응적 엔트로피 부호화 및 복호화방법과 그 장치 | |
CN102783035B (zh) | 并行熵编码方法和设备 | |
CN100488254C (zh) | 一种基于上下文的熵编码方法及解码方法 | |
US7281771B1 (en) | Method and apparatus for entropy coding | |
CN101601296A (zh) | 使用套叠式模式标记的用于可分级视频编码的系统和方法 | |
US20070133677A1 (en) | Method and apparatus for encoding and decoding video signals on group basis | |
CN103002283A (zh) | 多视角分布式视频压缩的边信息生成方法 | |
CN102572428B (zh) | 面向多媒体传感网分布式编解码的边信息估计方法 | |
CN100527847C (zh) | 基于零前缀码的变长码解码方法 | |
Banister et al. | Robust image transmission using JPEG2000 and turbo-codes | |
CN100551064C (zh) | 变长编码方法及装置 | |
CN100581253C (zh) | 用于解码比特流的装置和方法 | |
CN100499815C (zh) | 一种支持视频帧随机读取的视频编解码方法 | |
Lee et al. | Soft decoding of VLC encoded data for robust transmission of packetized video | |
US6801668B2 (en) | Method of compressing data by use of self-prefixed universal variable length code | |
CN113453002B (zh) | 量化与熵编码方法及装置 | |
JP2001274690A (ja) | 可変長復号器 | |
JPH08340258A (ja) | 可変長符号化/復号化装置 | |
WO2020258188A1 (zh) | 解码方法、解码器和解码系统 | |
CN1321533C (zh) | 最大宏块类型与编码块模式联合编/解码的方法 | |
Subbalakshmi et al. | Joint source-channel decoding for MPEG-4 coded video over wireless channels | |
CN100414996C (zh) | 用于编码和解码关键字数据的装置和方法 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090812 Termination date: 20140316 |