根据可变长编码的码字生成位流的方法和装置的制作方法

文档序号:7920486阅读:212来源:国知局
专利名称:根据可变长编码的码字生成位流的方法和装置的制作方法
技术领域
本发明涉及数据处理领域,具体地,涉及根据可变长编码的码字生成位流的方法
和装置。
背景技术
在编码理论中,可变长编码(Variable-Length Coding, VLC)是将信源映射为可变 位数的码字的编码方式,其允许信源零误差地被压縮及解压縮(无损数据压縮)。可变长编 码的基本思想是对一组出现概率各不相同的信源符号,采用不同长度的码字表示,对出现 概率高的信源符号采用短码字,对出现概率低的信源符号采用长码字。这样的编码方式由 于具有很高的压縮效率,所以广泛应用于包括JPEG、MPEG2、H. 264等在内的图像、视频和音 频等多媒体信息的编码标准。目前常用的VLC编码策略有Huffman编码、Lempel-Ziv编码 以及算术编码等。 无论采用哪一种特定的VLC编码方式,由于所得到的VLC码字都是可变长的,其长 度未必是字节的倍数,所以在将这样的VLC码字串接起来生成位流的过程中,通常对于每 一个VLC码字都需要按位来进行串接,并且在进行每一个位的串接时都要进行复杂的位操 作。 图1示出了这样的按位将VLC码字串接起来生成位流的通常方法的流程图。 在该通常方法中,例如对于要串接起来生成位流的多个VLC码字中位长度为n的
当前VLC码字v,通过步骤105-140的n次循环,将其中的各个位依次串接到一个8位的输
出缓冲器中,并进而通过该输出缓冲器将该VLC码字v串接到输出位流中。 具体地,在步骤105,设k = 1,即对于当前VLC码字v,从其最左侧的第1位开始进
行串接。 在步骤IIO,将输出缓冲器中的数据向左移1位。 在步骤115,通过利用位掩码与当前VLC码字v进行与(AND)操作,获得该VLC码
字V的最左侧的第k位Vk。 在步骤120,利用或(OR)操作,将所获得的该当前VLC码字v的最左侧的第k位Vk 放置到输出缓冲器中的最右侧的位、即最低位上。 在步骤125,判断输出缓冲器是否已满。若是,则该过程前进到步骤130,否则转到 步骤135。 在步骤130,将该输出缓冲器中的内容输出到位流中。 在步骤135,判断该当前VLC码字v中是否还有未串接的下一位。若有,则该过程 前进到步骤140,否则该过程结束。 在步骤140,使k = k+l,并返回到步骤IIO,继续串接该当前VLC码字v中的下一 位。 可以看出,在上面的通常方法中,对于一个n位长的VLC码字,至少需要进行
l)n次移位操作;
2)n次与(AND)操作; 3)n次或(0R)操作; 4) n次分支操作(步骤125)。 上面的通常方法例如可以在用于MPEG2视频编码的基准编码模型TM5 (参考www. mpeg. org/MPEG/MSSG/tm5)中以及在基准JPEG图像编码软件IJG的实现(参考www. ijg. org)中发现。 但是,在该通常方法中,由于存在大量的分支操作,所以本领域技术人员可以理 解,大量的分支操作中必然会出现分支预测错误、分支未命中的情况。其原因如下。
在现代的处理器中,一般都采用流水线的处理方式。也就是说,如图2的流水线所 示,虽然通常一条指令的处理需要多个时钟周期才能完成,但是CPU可以不必等待前面的 指令的处理完成,而每个时钟周期都发出一条指令,这样, 一条指令可以在上一条指令的处 理结束之前就被发出并执行。但是,在分支指令的情况下,存在着原来的顺序指令流被中断 并跳转到分支指令流的可能性。但是,正确的、应该执行的分支指令流只有在分支指令的处 理结束后才能够确定。这样,为了继续流水线的处理,在现代的处理器中,一般都根据预定 的策略预测一条分支来执行。显然,这样的预测会存在预测正确的情况,也会存在预测错误 的情况。 如果分支预测正确,则指令的执行将正常地进行,但是如果分支预测错误,则在
DSP、GPU、 IBM的CELL系统中的SPE (Synergistic ProcessingElement,协处理单元)以及
专门设计的处理器等没有分支预测错误的挽救机制的简单流水线体系结构中,将花费更多
的时钟周期将已经通过分支预测装入到流水线中要执行的指令和结果全部清除,然后重新
获取并装入正确的分支的指令序列来执行。这样,必然会导致性能的急剧降低。 此外,即使在Intel处理器等具有分支预测错误的挽救机制的复杂流水线体系结
构中,如果采用上述通常方法,也会存在因在分支预测错误时进行挽救操作而导致一定程
度的性能降低的问题。

发明内容
为了解决上述问题,本发明提供了一种根据可变长编码的码字生成位流的方法和 装置,以便尽可能消除根据VLC码字生成位流的过程中的分支操作以及减少所需的操作数 量,从而提升性能。 根据本发明的一个方面,提供了一种根据可变长编码的码字生成位流的方法,包 括设置输出缓冲器,其中该输出缓冲器具有至少对于要串接起来生成位流的多个可变长 编码的码字的每一个都能够容纳的位长度;对于上述多个可变长编码的码字中当前处理的 可变长编码的码字将该当前处理的可变长编码的码字填充到上述输出缓冲器中的与已被 占用的位接续的位置;将上述输出缓冲器的已填充的位中构成了完整字节的位输出到位流 中;以及将上述输出缓冲器中未构成完整字节的剩余位移位到该输出缓冲器中的高位。
根据本发明的另一个方面,提供了一种根据可变长编码的码字生成位流的装置, 包括输出缓冲器设置单元,用于设置输出缓冲器,其中该输出缓冲器具有至少对于要串 接起来生成位流的多个可变长编码的码字的每一个都能够容纳的位长度;码字串接单元, 用于对于上述多个可变长编码的码字中当前处理的可变长编码的码字,将其填充到上述输出缓冲器中的与已被占用的位接续的位置;位流输出单元,用于在上述码字串接单元填充 上述当前处理的可变长编码的码字之后,将该输出缓冲器的已填充的位中构成了完整字节 的位输出到位流中;以及输出后移位单元,用于在上述位流输出单元输出上述构成了完整 字节的位之后,将上述输出缓冲器中未构成完整字节的剩余位移位到该输出缓冲器中的高 位。


相信通过以下结合附图对本发明具体实施方式
的说明,能够使人们更好地了解本 发明上述的特点、优点和目的。 图1是将VLC码字串接起来生成位流的通常方法的流程图;
图2是现代的处理器所采用的流水线的处理方式的示意图; 图3是根据本发明实施例的根据可变长编码的码字生成位流的方法的流程图;
图4是图3的方法的图示说明;以及 图5是根据本发明实施例的根据可变长编码的码字生成位流的装置的方框图。
具体实施例方式
下面就结合附图对本发明的各个优选实施例进行详细说明。 图3是根据本发明实施例的根据可变长编码的码字生成位流的方法的流程图,图 4是其图示说明。 如图3所示,首先在步骤305,对于要串接起来生成位流的、包含多个VLC码字的码 本,设置一个输出缓冲器Bl,其中该输出缓冲器Bl具有对于该多个VLC码字中的每一个来 说都能够容纳的位长度N。 在一个实施例中,根据该码本的多个VLC码字中最长的VLC码字的位长度,设置该 输出缓冲器B1。其中,由于码本通常是以包含各个VLC码字的内容的码表的形式存储的,所 以根据该码表是能够获知其中最长的VLC码字的位长度的。 在进一步的实施例中,如果设该码本中最长的VLC码字的位长度为M,则为了使所 设置的输出缓冲器B1对于该码本中的各个VLC码字都足够容纳,将该输出缓冲器B1的位 长度N设定为2的幂数中比M+7大的最小值。当然,并不限于此,也可以将输出缓冲器Bl 设置为包括更多的位。 在步骤310,设置一个用于存储当前要进行串接的VLC码字的码字缓冲器B2,其中 该码字缓冲器B2具有与上述输出缓冲器Bl相同的位长度N。 在步骤315,获取该码本中当前要进行串接的n位长的VLC码字v,并且,如图4 (b) 所示,将该n位长的VLC码字v存储在码字缓冲器B2中的最右端。也就是说,将该VLC码 字v填充到该码字缓冲器B2的最低的n个有效位中。 在步骤320,如图4(a) (c)所示,将当前的VLC码字v在码字缓冲器B2中向左移 位到与上述输出缓冲器B1中已填充的位接续的位置,即使当前的VLC码字v向左移N-l-n 位。其中如图4(a)所示,1是输出缓冲器B1中已经被占用的位的数量,这些位是上一个进 行串接的VLC码字未通过该输出缓冲器B1完全输出到位流中的、剩余的位。当然,可以理 解,在初始对一个码本中的VLC码字进行串接时,该输出缓冲器Bl是空的,其中的位均未被占用。 此外,在本步骤中,将当前的VLC码字v在码字缓冲器B2中向左移N-l-n位的目 的是为了如图4(a)和4(c)所示,使码字缓冲器B2中被当前VLC码字v占用的位与输出缓 冲器B1中被上一个VLC码字占用的位接续。 在步骤325,通过利用码字缓冲器B2中的内容对输出缓冲器B1进行或(0R)操作, 将当前的VLC码字v填充到输出缓冲器Bl中,从而与上一个VLC码字的剩余位串接在一起, 并更新1 = l+n。 也就是说,如图4(d)所示,当前的VLC码字v的各位被填充到输出缓冲器Bl中已 被占用的1个位之后的位置,此时输出缓冲器B1中包括当前的VLC码字v在内已被占用 l+n位。 在步骤330,将该输出缓冲器Bl中最左端的l/8个字节的内容输出到位流中,其中 1/8表示输出缓冲器B1中已被占用的位的位数1与8的整数除。 由于输出缓冲器B1中包括当前的VLC码字v在内的、已被占用的位数l未必是字 节的倍数,所以在这1位中,只能够将从左端开始已构成了完整字节的位输出到位流中,而 其他未构成一个完整字节的位则应继续存储在输出缓冲器B1中。在此情况下,这l位中已 构成的完整字节的数量,可以通过计算整数除1/8来得到。也就是说,输出缓冲器B1中与该 整数除1/8的值对应的数量的字节,即前1/8个字节,是应该被输出到位流中的完整字节。
在图4(d)所示的例子中,输出缓冲器B1中已被占用的l位中,形成了两个完整的 字节、即字节0和字节1。在此情况下,将该完整的字节O和字节1输出到位流中。
此外,在一个实施例中,在计算整数除1/8的值时,本领域技术人员可以理解,能 够利用移位操作来实现该整数除。举一个简单例子来说,在计算4/2时,由于对应于4的二 进制数是IOO,所以可以通过将该二进制数100向右移1位,来获得与整数除4/2的结果相 对应的值10、 S卩2。 在步骤335 ,更新1 = 1 mod 8 ,其中mod表示取模运算。 也就是说,由于输出缓冲器B1中前1/8个字节已被输出,所以输出缓冲器B1中被
占用的位还剩下该1/8个字节之外的、未形成完整字节的剩余1 mod 8位。 在步骤340,如图4(e)、(f)所示,将输出缓冲器B1中剩余的位移位到输出缓冲器
Bl的最左端,以使该输出缓冲器B1中最左端的1个有效位被当前VLC码字v的未被输出到
位流中的剩余位所填充。 在步骤345,判断上述码本中是否还存在未串接的VLC码字,若有,则该过程返回 到步骤315,否则该过程结束。 以上就是对本实施例的根据可变长编码的码字生成位流的方法的详细描述。在本 实施例中,并不像上述通常使用的方法那样任意地利用一个8位的缓冲器,来按位串接各 个VLC码字,而是通过设置一个与要进行串接的码本中最长的VLC码字的位长度有关的输 出缓冲器,来按码字的整体进行各个VLC码字的串接。可以看出,在本实施例中,在对一个 n位长的VLC码字进行串接时,需要进行 1)3次移位操作(其中包括在步骤330中所说明的为实现整数除而进行的移位操 作); 2) 1次或(0R)操作;
3) 1次取模操作;
4)0个分支操作。 从以上可以看出,如果采用本发明,则由于在将一个VLC码字串接到位流的过程 中消除了分支操作,所以对于简单流水线体系结构的系统来说,能够极大地提升性能。此 外,除了消除分支操作之外,还由于相对于上述通常使用的方法减少了在串接一个VLC码 字的过程中所需的操作数量,所以即使是对于复杂流水线体系结构的系统来说,也能够实 现性能的提升。 在同一发明构思下,本发明提供一种根据可变长编码的码字生成位流的装置。下 面结合附图对其进行描述。 图5是根据本发明实施例的根据可变长编码的码字生成位流的装置的方框图。如 图5所示,本实施例的根据可变长编码的码字生成位流的装置50包括输出缓冲器设置单 元501、码字缓冲器设置单元502、码字串接单元503、位流输出单元504以及输出后移位单 元505。 输出缓冲器设置单元501设置输出缓冲器B1,其中该输出缓冲器B1具有对于要串 接起来生成位流的多个VLC码字的每一个都能够容纳的位长度。 在一个实施例中,输出缓冲器设置单元501根据上述多个VLC码字中最长的VLC 码字的位长度设置上述输出缓冲器B1。 在进一步的实施例中,输出缓冲器设置单元501将上述输出缓冲器B1的位长度设 定为2的幂数中比上述最长的VLC码字的位长度M加7大的最小值。当然,并不限于此,在 具体实现中,也可以将输出缓冲器B1设置为包括更多的位。 码字缓冲器设置单元502设置用于存储当前要进行串接以输出到位流中的VLC码 字的码字缓冲器B2,其中该码字缓冲器B2具有与上述输出缓冲器B1相同的位长度。
码字串接单元503对于上述多个VLC码字中当前处理的VLC码字v,将其填充到上 述输出缓冲器B1中的与已被占用的位接续的位置。 如图5所示,码字串接单元503进一步包括码字存储单元5031、码字移位单元 5032以及或操作单元5033。 码字存储单元5031将当前处理的VLC码字v存储在上述码字缓冲器B2中的最右
丄山顺。 码字移位单元5032将该当前处理的VLC码字v在上述码字缓冲器B2中向左移位 到与上述输出缓冲器B1中已填充的位接续的位置,即向左移N-l-n位。其中,l是输出缓 冲器B1中已经被占用的位的数量,这些位是上一个进行串接的VLC码字未通过该输出缓冲 器B1完全输出到位流中的、剩余的位;此外,n是该当前处理的VLC码字v的位长度。
或操作单元5033通过利用上述码字缓冲器B2中的内容对上述输出缓冲器Bl进 行或操作,将该当前处理的VLC码字v填充到该输出缓冲器Bl中的与已被占用的l个位接 续的位置,以将该当前处理的VLC码字v与上一个VLC码字的剩余位串接在一起。
位流输出单元504在码字串接单元503将当前处理的VLC码字v填充到输出缓冲 器B1中之后,将该输出缓冲器B1的已填充的1 = l+n位中构成了完整字节的位输出到位 流中。 在一个实施例中,位流输出单元504求取上述输出缓冲器B1的已填充的位的位数
81与8的整数除1/8的值,并且将输出缓冲器Bl中与该整数除1/8的值对应的数量的字节, 即前1/8个字节输出到位流中,而其他未构成一个完整字节的位则继续存储在输出缓冲器 Bl中。 在进一步的实施例中,位流输出单元504利用移位操作来求取整数除1/8的值。
输出后移位单元505在位流输出单元504将输出缓冲器Bl中构成了完整字节的 位输出到位流中之后,将该输出缓冲器B1中未构成完整字节的剩余l = 1 mod 8位移位到 该输出缓冲器B1中的高位,以使该输出缓冲器B1中最左端的1个有效位被当前VLC码字 v的、未被输出到位流中的剩余位所填充。 以上就是对本实施例的根据可变长编码的码字生成位流的装置的详细描述。其 中,该装置50及其各个组成部分,可以由专用的电路或芯片构成,也可以通过计算机(处理 器)执行相应的程序来实现。 以上虽然通过一些示例性的实施例对本发明的根据可变长编码的码字生成位流 的方法和装置进行了详细的描述,但是以上这些实施例并不是穷举的,本领域技术人员可 以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发 明的范围仅以所附权利要求为准。
权利要求
一种根据可变长编码的码字生成位流的方法,包括设置输出缓冲器,其中该输出缓冲器具有至少对于要串接起来生成位流的多个可变长编码的码字的每一个都能够容纳的位长度;对于上述多个可变长编码的码字中当前处理的可变长编码的码字将该当前处理的可变长编码的码字填充到上述输出缓冲器中的与已被占用的位接续的位置;将上述输出缓冲器的已填充的位中构成了完整字节的位输出到位流中;以及将上述输出缓冲器中未构成完整字节的剩余位移位到该输出缓冲器中的高位。
2. 根据权利要求1所述的方法,其中上述设置输出缓冲器的步骤进一步包括根据上述多个可变长编码的码字中最长码字的位长度设置上述输出缓冲器。
3. 根据权利要求1或2所述的方法,其中上述设置输出缓冲器的步骤进一步包括将上述输出缓冲器的位长度设定为2的幂数中比上述多个可变长编码的码字中最长码字的位长度加7大的最小值。
4. 根据权利要求1所述的方法,还包括设置用于存储当前处理的可变长编码的码字的码字缓冲器,其中该码字缓冲器具有与上述输出缓冲器相同的位长度。
5. 根据权利要求4所述的方法,其中将该当前处理的可变长编码的码字填充到上述输出缓冲器中,与已被占用的位接续的位置的步骤进一步包括将该当前处理的可变长编码的码字存储在上述码字缓冲器中的最右端;将该当前处理的可变长编码的码字在上述码字缓冲器中向左移位到与上述输出缓冲器中已填充的位接续的位置;以及通过利用上述码字缓冲器中的内容对上述输出缓冲器进行或操作,将该当前处理的可变长编码的码字填充到该输出缓冲器中,与已被占用的位接续的位置。
6. 根据权利要求1所述的方法,其中将上述输出缓冲器的已填充的位中,构成了完整字节的位输出到位流中的步骤进一步包括求取上述输出缓冲器的已填充的位的位数与8的整数除;以及将上述输出缓冲器中的、与上述整数除的值对应的数量的字节的内容输出到位流中。
7. 根据权利要求6所述的方法,其中求取上述输出缓冲器的已填充的位的位数与8的整数除的步骤是利用移位操作来实现的。
8. —种根据可变长编码的码字生成位流的装置,包括输出缓冲器设置单元,用于设置输出缓冲器,其中该输出缓冲器具有至少对于要串接起来生成位流的多个可变长编码的码字的每一个都能够容纳的位长度;码字串接单元,用于对于上述多个可变长编码的码字中当前处理的可变长编码的码字,将其填充到上述输出缓冲器中的与已被占用的位接续的位置;位流输出单元,用于在上述码字串接单元填充上述当前处理的可变长编码的码字之后,将该输出缓冲器的已填充的位中构成了完整字节的位输出到位流中;以及输出后移位单元,用于在上述位流输出单元输出上述构成了完整字节的位之后,将上述输出缓冲器中未构成完整字节的剩余位移位到该输出缓冲器中的高位。
9. 根据权利要求8所述的装置,其中上述输出缓冲器设置单元根据上述多个可变长编码的码字中最长码字的位长度设置上述输出缓冲器。
10. 根据权利要求8或9所述的装置,其中上述输出缓冲器设置单元将上述输出缓冲器的位长度设定为2的幂数中比上述多个可变长编码的码字中最长码字的位长度加7大的最小值。
11. 根据权利要求8所述的装置,还包括码字缓冲器设置单元,其设置用于存储当前处理的可变长编码的码字的码字缓冲器,其中该码字缓冲器具有与上述输出缓冲器相同的位长度。
12. 根据权利要求11所述的装置,其中上述码字串接单元进一步包括码字存储单元,用于将上述当前处理的可变长编码的码字存储在上述码字缓冲器中的最右端;码字移位单元,用于将该当前处理的可变长编码的码字在上述码字缓冲器中向左移位到与上述输出缓冲器中已填充的位接续的位置;以及或操作单元,用于通过利用上述码字缓冲器中的内容对上述输出缓冲器进行或操作,将该当前处理的可变长编码的码字填充到该输出缓冲器中,与已被占用的位接续的位置。
13. 根据权利要求8所述的装置,其中上述位流输出单元求取上述输出缓冲器的已填充的位的位数与8的整数除,并且将上述输出缓冲器中的、与上述整数除的值对应的数量的字节的内容输出到位流中。
14. 根据权利要求13所述的装置,其中上述位流输出单元利用移位操作来求取上述输出缓冲器的已填充的位的位数与8的整数除。
全文摘要
本发明提供了一种根据可变长编码的码字生成位流的方法和装置。该方法包括设置输出缓冲器,其中该输出缓冲器具有至少对于要串接起来生成位流的多个可变长编码的码字的每一个都能够容纳的位长度;对于上述多个可变长编码的码字中当前处理的可变长编码的码字将该当前处理的可变长编码的码字填充到上述输出缓冲器中的与已被占用的位接续的位置;将上述输出缓冲器的已填充的位中构成了完整字节的位输出到位流中;以及将上述输出缓冲器中未构成完整字节的剩余位移位到该输出缓冲器中的高位。在本发明中,由于在将一个可变长编码的码字串接到位流的过程中消除了分支操作并且减少了所需的操作数量,所以能够极大地提升性能。
文档编号H04N7/26GK101729881SQ200810170308
公开日2010年6月9日 申请日期2008年10月10日 优先权日2008年10月10日
发明者刘家俊, 刘星, 徐晟 , 高怿之, 鹿宝生 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1