CN103139566B - 用于可变长度码的高效解码的方法 - Google Patents
用于可变长度码的高效解码的方法 Download PDFInfo
- Publication number
- CN103139566B CN103139566B CN201210502524.1A CN201210502524A CN103139566B CN 103139566 B CN103139566 B CN 103139566B CN 201210502524 A CN201210502524 A CN 201210502524A CN 103139566 B CN103139566 B CN 103139566B
- Authority
- CN
- China
- Prior art keywords
- code word
- bit
- bits
- code
- vlc
- 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.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了用于可变长度码的高效解码的方法。一种用于解码可变长度码的方法、***和计算机程序产品被公开。解码模块被配置成接收可变长度码。所述可变长度码是多个比特。解码模块还被配置成识别出在所述多个比特的开头处前导比特被连续地重复的次数。前导比特被预定为1或0之一。解码模块还被配置成通过使用前导比特被重复的次数来在码字表中识别出码字。
Description
技术领域
本公开的方面总体上涉及解码。特别地,本公开的一个方面涉及解码可变长度码。
背景技术
新的多媒体应用的不断增加的计算复杂性和数据速率要求需要信号处理***提供高效且灵活的压缩和解压缩例程。编码是用来压缩诸如图像和视频文件之类的媒体文件的技术。可以用在各种用户设备中的图像编码和解码标准的例子是联合图像专家组(JPEG)。
JPEG标准利用了用于基于分别用于编码和解码操作的离散余弦变换(DCT)和离散余弦逆变换(IDCT)来压缩静止图像的有损压缩技术。在JPEG标准中,可以使用8x8的样本数据阵列(称作数据块)以用于处理,其中样本数据可以对应于静止图像信号的亮度(Y)或色度(Cr和Cb)信息。在JPEG术语中,将四个8x8亮度块、一个8x8Cr块和一个8x8Cb数据块称作最小编码单元(MCU)。这种类型的JPEG编码被称作YUV420。存在其他类型的JPEG编码,举例来说,例如YUV444。
另外,例如由JPEG标准规定的解码操作可以利用计算密集型算法,例如霍夫曼解码算法,其是可变长度编码(VLC)技术。在这方面,霍夫曼解码可能利用片上计算和/或存储器资源的大部分,这会增加处理时间并且降低总体***效率。
因此,具有解决上面讨论的问题中的一个或多个的方法、***和计算机程序产品将是有利的。
发明内容
本发明的一个方面涉及一种用于解码可变长度码的方法。所述方法包括接收可变长度码。所述可变长度码是多个比特。随后,所述方法识别出在所述多个比特的开头处前导比特被连续地重复的次数。所述前导比特被预定为1或0之一。接下来,所述方法通过使用前导比特被重复的次数来在码字表中识别出码字。
本发明的另一方面涉及一种用于解码可变长度码的***。所述***包括存储器单元、连接到存储器单元的处理单元、以及解码模块。所述解码模块被配置成接收可变长度码。所述可变长度码是多个比特。所述解码模块还被配置成识别出在所述多个比特的开头处前导比特被连续地重复的次数。所述前导比特被预定为1或0之一。所述解码模块还被配置成通过使用前导比特被重复的次数来在码字表中识别出码字。
本发明的又一方面涉及一种包括逻辑的计算机程序产品,所述逻辑被编码在有形介质上以用于解码可变长度码。所述逻辑包括用于接收可变长度码的指令。所述可变长度码是多个比特。所述逻辑还包括用于识别出在所述多个比特的开头处前导比特被连续地重复的次数的指令。所述前导比特被预定为1或0之一。所述逻辑还包括用于通过使用前导比特被重复的次数来在码字表中识别出码字的指令。
附图说明
在附图中,相同的附图标记通常指代贯穿不同视图的相同部分。附图不一定是按比例的。在下列描述中,参照下列附图来描述本公开的方面,其中:
图1是根据本公开的一个方面的媒体检索***的框图;
图2是根据本公开的一个方面的媒体解码***的框图;
图3是根据本公开的一个方面的码字表;
图4是根据本公开的一个方面的码字表;
图5是根据本公开的一个方面的用于解码可变长度码的流程图;
图6是根据本公开的一个方面的用于在表中找到码字的流程图;
图7是根据本公开的一个方面的用于在表中找到码字的流程图;
图8是根据本公开的一个方面的用于解码可变长度码的流程图;以及
图9是根据本公开的一个方面的用于解码可变长度码的流程图。
具体实施方式
下列的详细描述参照了附图,所述附图通过说明的方式示出本公开的特定细节和方面。在这里使用词“示例性”是指“用作例子、实例、或说明”。在这里被描述为“示例性”的本公开或设计的任何方面不必被解释为相对于本公开或设计的其他方面是优选的或有利的。
图1是根据本公开的一个方面的媒体检索***的框图。媒体检索***2包括源4和用户设备12。在本公开的一个方面中,源4包括媒体6,并且可以通过有线连接和/或无线地被连接到用户设备。在本公开的另一方面中,源4也可以是用户设备12的一部分。用户设备12包括用于显示媒体6的显示器16。
在本公开的一个方面中,源4包括具有分辨率8的媒体6。源4可以是因特网上的网站、存储器源(例如存储器卡或硬盘驱动器)、用户设备(例如移动设备或膝上型计算机)、或者另一类型的源。在本公开的另一方面中,源4可以是用户设备12中的存储器。举例来说,源4可以是利用用户设备12上的照相机捕获的图像。媒体6可以是视频或图像。媒体6可以利用任何编码类型来编码。举例来说,媒体6可以利用JPEG、MPEG、H.264、或者某一其他类型的媒体编码类型来编码。
媒体6具有分辨率8。分辨率8可以是媒体6的原生分辨率。举例来说,在本公开的一个方面中,分辨率8可以是具有800x600的分辨率的SVGA(超级视频图形阵列)。分辨率8可以是任何分辨率,包括但不限于QVGA、VGA、SVGA、XGA、WXGA、以及其他类型的分辨率。
在本公开的一个方面中,用户设备12包括用于解码媒体6的解码单元14。用户设备12还包括具有分辨率18的显示器16。在本公开的一个方面中,用户设备12可以是包括解码单元的设备。举例来说,用户设备12可以是但不限于膝上型计算机、平板计算机、移动电话、照相机、或者包含解码单元的任何其他类型的设备。在本公开的一个方面中,只要用户设备12能够访问解码单元,用户设备12也可以是不具有解码单元的设备。另外,用户设备12可以能够访问媒体文件。举例来说,用户设备12可以被配置成通过因特网、连接到用户设备12的存储设备、无线地访问的设备、通过使用用户设备12上的照相机、和/或媒体6的某一其他合适源4来访问媒体文件。
在本公开的一个方面中,解码单元14是进行编码器的反向操作的设备,其解除编码从而可以检索原始信息。解码单元14可以被配置成解码已被编码的数据的比特流。在本公开的一个方面中,已经使用霍夫曼编码技术对数据进行了编码。所述数据可以是媒体,例如图像文件。
在本公开的一个方面中,用户设备12可以通过使用显示器16来显示媒体6。显示器16可以是监视器和/或任何其他类型的显示设备。显示器16具有分辨率18。在本公开的一个方面中,分辨率18可以是具有320x240的分辨率的QVGA(四分之一视频图形阵列)。然而,分辨率18可以是任何分辨率,包括但不限于QVGA、VGA、SVGA、XGA、WXGA、以及其他类型的分辨率。
另外,用户设备12可以包括一个或多个存储器元件(例如存储器元件20)以用于存储将被用在实现如在这里所概述的与应用管理相关联的操作中的信息。在适当的情况下并且基于特定需要,这些设备还可以在任何合适的存储器元件(例如随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)、可擦可编程只读存储器(EPROM)、电可擦可编程ROM(EEPROM)等等)、软件、硬件中或者在任何其他合适的部件、设备、元件或物体中保存信息。在这里所讨论的任何存储器或存储物品应当被解释为被包含在如在这里所使用的宽泛术语“存储器元件”之内。
此外,在这里的用于解码可变长度码的操作可以由编码在一个或多个有形介质中的逻辑来实施,其可以包括非瞬时性介质(例如提供在专用集成电路(ASIC)中的嵌入式逻辑、数字信号处理器(DSP)指令、潜在地包括将由处理器或其他类似机器执行的目标码和源码的软件等等)。在这些实例的一些中,一个或多个存储器元件(例如存储器元件20)可以存储用于在这里所描述的操作的数据。这包括存储器元件能够存储被执行来实施在这里所描述的活动的软件、逻辑、代码、或处理器指令。
另外,用户设备12可以包括处理单元22。处理单元22可以是处理器、多核处理器、单核处理器、微控制器、控制器电路、或者任何其他类型的处理设备。处理单元可以执行与所述数据相关联的任何类型的指令以实现在这里所详述的操作。在本公开的一个方面中,处理器可以把元件或物品(例如数据)从一个状态或事物变换成另一状态或事物。在另一例子中,可以利用固定逻辑或可编程逻辑(例如由处理器执行的软件/计算机指令)来实施在这里所概述的活动,并且在这里所标识出的元件可以是某种类型的可编程处理器、可编程数字逻辑(例如FPGA、EPROM、EEPROM)、或者ASIC,其包括数字逻辑、软件、代码、电子指令、闪速存储器、光盘、CD-ROM、DVDROM、磁卡或光卡、适合用于存储电子指令的其他类型的机器可读介质、或其任何合适的组合。
图1中的媒体检索***2的说明不意图暗示对于可以实施本公开的一个方面的方式的物理或体系结构限制。可以使用其他部件以作为所示出的部件的补充和/或替换。在本公开的一个方面中,一些部件可能是不必要的。此外,给出各个框以说明一些功能部件。当在本公开的一个方面中实施时,这些框中的一个或多个可以被组合和/或被划分成不同的框。举例来说,在本公开的一个方面中,源4可以位于用户设备12内。
图2是根据本公开的一个方面的媒体解码***的框图。媒体解码***24包括源4和用户设备12。媒体解码***24是可以解码媒体文件并且显示经解码的媒体文件的***。
在本公开的一个方面中,用户设备12包括解码单元14、显示器16、第一表38和第二表42。解码单元14可以包括解码模块26、逆量化单元44、离散余弦逆变换单元46、以及重组单元48。
在本公开的一个方面中,解码单元14可以是熵解码器。熵解码器可以包括数据扩展方法,通过所述数据扩展方法来对先前编码的符号进行解码。在本公开的一个方面中,解码单元14可以解码使用霍夫曼编码器已被编码的数据。然而,可以对其他类型的编码器进行解码,例如算术编码器、Fibonacci编码器、以及其他编码器。
在本公开的一个方面中,逆量化单元44可以被配置成基于二进制值来识别出数值。所述数值可以包括二进制值的基数10表示。在另一方面中,逆量化单元44可以把数值转换成其他数值,而不管所述数值的表示如何。举例来说,如果量化单元将一个数乘以3,则逆量化单元44可以将该数除以3。
在本公开的一个方面中,离散余弦逆变换单元46可以对来自逆量化单元44的接收到的数值块执行离散余弦逆变换。接收到的数值块可以包括与8x8块相关联的YUV颜色空间信息的频率表示。离散余弦逆变换单元46可以是后处理的一部分。
所述8x8块可以包括布置成行和列的像素,其中每行可以包括8个像素。每个像素可以包括YUV信息。所述YUV信息可以从存储器中被检索,并且在后处理期间被转换成RGB表示。在另一方面中,JPEG可以不限于YUV。举例来说,JPEG可以被编码在RGB颜色模型中。
在本公开的一个方面中,当媒体6是图像时,所述图像被划分成8x8像素块。在接收到来自离散余弦逆变换单元46的信息之后,利用在其间执行的可能的其他步骤,重组框整理8x8块以形成图像。所述图像最终被转发到显示器16,以用于例如在监视器上显示该图像。
对于解码模块26、逆量化单元44、离散余弦逆变换单元46、以及重组单元48的说明不意图暗示对于可以实施本公开的一个方面的方式的物理或体系结构限制。可以使用其他部件以作为所示出的部件的补充和/或替换。举例来说,可能有在解码的过程中使用的、未示出的部件。举例来说,颜色变换单元、上采样单元、后处理单元、比特解包器、逆Z字形单元、以及其他单元没有被示出,但是可以结合本公开的一个方面来使用。
在本公开的一个方面中,解码模块26可以接收已经利用一种类型的编码器(例如霍夫曼编码器)进行了编码的比特流。解码模块26可以包括可变长度码28和阈值36。可变长度码28可以是来自源4的比特流的一部分。在可变长度码28之前和之后可以有其他比特。
在本公开的一个方面中,可变长度码28包括多个比特30。多个比特30还可以包括比特串34和前导比特32。前导比特32可以是被预定为处于可变长度码28的开头的该类型的比特。举例来说,前导比特32可以是“1”。解码模块26可以被配置成对在可变长度码28的开头处的前导比特的数目进行计数。解码模块26还可以被配置成把前导比特的数目与阈值36进行比较。基于所述比较,解码模块26可以访问第一表38或第二表42。
在本公开的一个方面中,第一表38和第二表42包括码字,例如码字40。码字40可以与可变长度码28相关联。
解码模块26可以被实施为软件或硬件。当实施为软件时,解码模块26可以使用计算机代码来识别码字以及访问第一表38和第二表42。具有伪码形式的代码的例子可以如下显现:
。
在上面的伪码中,所述程序识别出ones的数目,并且随后使用适当的表来识别出码。所述伪码利用代码“(ones<9)”来识别出在所述多个比特的开头处前导比特是否被连续地重复了一定次数。这里,阈值是9。
如果“ones”小于或等于8,则利用伪码“code=table[8*ones+((vlc>>(28-ones))&7)]”而使用第一表。如果“ones”小于或等于8,则利用伪码的“else”命令而使用第二表,并且该表被表示为“code=table[9*8+vlc>>16)&127]”。
在上面的伪码中使用了C语言运算符。一般来说,所述代码可以是:
。
这里,threshold和addbits可以是常数。所述伪码利用代码“(ones<=threshold)”来识别出在所述多个比特的开头处前导比特是否被连续地重复了一定次数。所述threshold可以是常数,举例来说,例如“8”。
如果“ones”小于或等于8,则利用伪码“code=table[(1<<addbits)*ones+((vlc>>(32–addbits–1–ones))&((1<<addbits)–1))]”而使用第一表。如果“ones”小于或等于8,则利用伪码的“else”命令而使用第二表,并且该表被表示为“code=table[(threshold+1)*(1<<addbits)+((vlc>>16)&((1<<(16–threshold–1))–1))]”。
表达式“32–addibts–1–ones”是未使用的比特的数目,其被移走。所述字具有32个比特。从所述字中减去leadingones的数目(ones)。随后,对于ones之后的“0”比特减去1。随后,减去附加比特的数目。
表达式“16–threshold”是在找到阈值数目或更多前导“1”比特的情况下码中剩余的比特的最大数目。在JPEG标准中定义的最大码长度是16比特。
图2中的媒体解码***12的说明不意图暗示对于可以实施本公开的一个方面的方式的物理或体系结构限制。可以使用其他部件以作为所示出的部件的补充和/或替换。在本公开的一个方面中,一些部件可能是不必要的。此外,给出各个框以说明一些功能部件。当在本公开的一个方面中实施时,这些框中的一个或多个可以被组合和/或被划分成不同的框。举例来说,在本公开的一个方面中,源4可以位于用户设备12内。
本公开的方面可以提供通过使用前导“1”比特的数目来解码VLC。在JPEG编码中,VLC码通常由“1”比特的序列加上少数(在大多数情况下是3个或更少)附加比特构成。因此,有可能通过首先找到前导“1”比特的数目并且随后利用前导“1”比特的数目和3个额外比特对表进行索引来解码VLC编码。该表比完整的码字表小得多。在JPEG中,最大码长度是16比特,所以完整的码表具有64kB或更大。大多数现代处理器能够在单个周期中确定字中前导零的数目,从而可以快速地确定前导“1”比特的数目。在重要使用的情况下,使用这种方法的JPEG解码器比使用先前已知的方法的JPEG解码器快一倍。在实际的实施中,对于多达8个前导“1”比特使用该方法。在9个或更多个前导“1”比特的情况下,所述码可以具有至多7个附加码比特,这是因为由JPEG标准定义的最大码长度是16比特。对于这7个比特,使用具有128个条目的完整表。所以,完整表具有的尺寸为72(9乘8)加上128字节,其等于200字节。“9”对应于0到8个前导“1”比特的可能性,并且“8”对应于3比特二进制码的各种组合。另外,前导“1”比特之后可以跟随着单个“0”比特,单个“0”比特之后跟随着被用于表中的码字定位的3个比特。在多于8个前导“1”比特的情况下,“1”比特可以跟随在前9个比特之后。因此,基于前导“1”比特的数目,其后所跟随的比特的数目是不同的。
移动电话可以具有1600x1200(2MP)像素照相机分辨率和320x240像素(QVGA)显示器,或者移动电话可以具有3200x2400(8MP)照相机和640x480像素(VGA)显示器。在全部两种情况下,照相机与显示器的像素数目之间的比是25。这意味着,每当显示利用照相机拍摄的图像时,只能显示图像中的信息的4%,而图像中的信息的96%会被丢弃。如果图像被全屏幕显示,则以DCT中的高频系数编码的精细细节会被丢弃。当显示图像的镜头拉近时,所截去的宏块会被丢弃。在全部两种情况下,所述丢弃意味着经编码图像中的对应DCT系数可以被跳过。
本公开的方面考虑到,由于可变长度编码的性质,在不对VLC码进行解码的情况下可能不知道DCT系数的经编码尺寸。这意味着VLC解码可以被用于跳过所丢弃的高频系数和所截去的宏块。由于只有4%的图像是可见的,因此只需要对96%的图像信息进行VLC解码,同时可能需要对4%的图像信息进行完全处理。这使VLC解码的速度对于整个解码过程的速度来说是重要的。
本公开的方面考虑到,当在每个VLC的完整表中进行搜索时,进行搜索所花费的时间成对数函数。本公开的方面还考虑到,使用完全码表在进行搜索所花费的时间方面可能成本高,以及与本公开的方面相比对于处理器的使用量更大。
本公开的方面考虑到,使用具有最大码长度的完整表可能大于处理器存储器的高速缓存,举例来说,例如L1高速缓存。完整表可能在对应于每个VLC的16比特处具有扩展码。于是所述表是基于16比特VLC码形成的。在该表中,例如,00的VLC码可以被找到16384次。这种类型的表可能需要64kB的存储器来加载。在许多情况下,用于移动电话的L1高速缓存少于64kB。
本公开的方面考虑到,可以使用上面两个表的组合。在这方面,可以首先对于8比特及以下的那些码使用8比特表。随后,通过在完全码表中进行二进制交叉搜索而对超出8比特的那些码进行第二搜索。
本公开的方面可以提供使用码中的前导1比特的数目来构造小的一步查找表。VLC中的前导1比特的数目被用来索引所述查找表。
本公开的方面可以考虑到,一些当前的方法使用JPEG报头中的附加表来跳过VLC的一些部分。当进行镜头拉远解码时,这个过程可以被用在解码中。这种方法需要生成所述表,这意味着需要对硬件JPEG编码器进行修改。
本公开的方面提供对于0到8个前导1比特的VLC使用9x8条目的表的机制,其中8个条目对应于3个附加比特。0比特可以跟随在前导1比特之后。所述3个附加比特可以跟随在所述0比特之后。对于具有9个或更多个前导1比特的VLC,可以有附加的128条目的表。结果是72加上128的表,这等于200字节。这个表尺寸比64kB表小得多,并且可以装配(fit)在移动电话上的处理器存储器高速缓存内。这一方面可以针对甚至最长的码提供较少不可预测的分支和简单的查找表。
对于目前常见的高分辨率图像,软件解码可能花费可观的时间量。本公开的方面可以在208MHz处理器上在300ms内解码2兆像素图像。当前在使用的先前编码器在1.2秒内解码了所述2兆像素图像。这是在本公开的方面中所公开的解码器的4倍长。
前述已经相当宽泛地概述了本公开的不同方面的特征和技术优点,以便可以更好地理解下面的详细描述。下文中将描述本公开的方面的附加特征和优点。本领域技术人员应当认识到,所公开的概念和特定方面可以很容易地被利用以作为修改或重新设计其他结构或过程以用于实施本公开的不同方面的相同目的的基础。本领域技术人员还应当认识到,这样的等同构造没有背离如在所附权利要求书中阐述的精神和范围。
图3是根据本公开的一个方面的码字表。表302包括轴304、轴306和多个码字(例如码字308)。表302可以是如图2中所示的第一表38的一个例子。表302可以由解码模块26访问。此外,表302可以被保存在存储设备、存储器、处理器存储器、和/或任何其他合适的存储介质中。
在本公开的一个方面中,轴304具有数字0到8。这些数字可以表示VLC中的前导比特的数目。举例来说,在11111001的VLC中,如果前导比特被设置为1,则前导比特的数目是5。所述VLC的开头有5个连续的“1”比特。在该例子中,所述数目是5。因此,在轴304上选择的数字将是“5”。在另一例子中,在01的VLC中,如果前导比特被设置为0,则前导比特的数目是0。所述VLC的开头有“0”比特,因此在该VLC中不存在前导比特“1”。在该例子中,所述数目是0。因此,在轴304上选择的数字将是“0”。在本公开的其他方面中,轴304上的数字可以是不同的,和/或可以达到更高的数字。
在本公开的一个方面中,轴306具有数字0到7,其由二进制形式表示。举例来说,5的二进制形式是101。这些数字可以表示VLC中的比特串。在本公开的一个方面中,举例来说,在11111001的VLC中,前5个比特是1并且是前导比特。于是下一个0比特是表明前导比特已结束的指示符。在指示符比特之后是所述比特串。在该例子中,所述比特串是比特01。在本公开的一个方面中,所述比特串是3个比特。因此,在VLC之后的比特流中的下一个比特形成01X,其中X表示1或0。因此,在轴306上将选择010或011。可以看到,对于在轴304中选择的每个数字,码字308对于全部两列是相同的。举例来说,如果在轴304中选择“5”,则对应于010和011的码字308都是“22”。在本公开的其他方面中,轴306上的数字可以是不同的,和/或可以达到更高的数字。
在本公开的一个方面中,当阈值为9时,轴304将是数字0-8,并且轴306将是0-7的二进制值(000、001、010、011...等等)。使用上面的例子,码字308是22。
与此对比,霍夫曼表可以是其后跟随***字的比特组,并且过程必须滤过每行以识别出码字。举例来说,霍夫曼表可以与如在ISO/IEC10918-1:1993(E)标准、表K.5中所列出的类似。图4是根据本公开的一个方面的码字表。
这里部分地示出按照码来排序的标准表:
在这里部分地示出一旦基于前导“1”比特进行***之后的该表:
0个前导1比特,10比特,多达1个额外比特:
1个前导1比特,10比特,多达2个额外比特:
2个前导1比特,10比特,多达2个额外比特:
3个前导1比特,10比特,多达2个额外比特:
9个或更多个前导1比特加上多达7个比特从而达到最大码长度16:
表402包括诸如条目404之类的条目以及多个码字(例如码字406)。表402可以是如图2中所示的第二表42的一个例子。表402可以由解码模块26访问。此外,表402可以被保存在存储设备、存储器、处理器存储器、和/或任何其他合适的存储介质中。
在本公开的一个方面中,表402具有VLC及其相应码字的条目。举例来说,条目404具有1111111110000010的VLC和09的码字406。在本公开的一个方面中,例如,在1111111110000011的VLC中,前9个比特是1并且是前导比特。在前导比特之后是比特串。在该例子中,所述比特串是比特0000011。
在本公开的一个方面中,所述比特串总是跟随在前9个比特之后的比特(多达7个)。在另一方面中,所述比特串可以是不同的尺寸。举例来说,当阈值为9时,表中的所有条目在开头处将具有至少9个1。所述比特串可以与跟随在9个前导比特之后的比特相匹配。举例来说,0000011将与对应于1111111110000011的条目相匹配。在另一例子中,完全VLC可以与一个条目相匹配。举例来说,1111111110000011将与1111111110000011的完全条目相匹配。表402可以具有不同数目的条目,这取决于阈值被设置为什么,例如来自图2的阈值36。
图5是根据本公开的一个方面的用于解码可变长度码的流程图。过程500可以被实施在来自图2的媒体解码***24中。
过程500开始于解码模块可以被配置成接收可变长度码,其中所述可变长度码是多个比特(步骤502)。接下来,解码模块可以识别出在所述多个比特的开头处前导比特被连续地重复的次数(步骤504)。前导比特可以被预定为1或0之一。在本公开的一个方面中,前导比特是1。
随后,确定所述数目是否小于阈值(步骤506)。在本公开的一个方面中,所述阈值是9。如果所述数目小于阈值,则解码模块可以在第一码字表中识别出码字(步骤508)。因此,在本公开的一个方面中,如果前导比特(例如1)的数目小于9,则使用第一表。举例来说,如果所述16比特数字是1111101001011101,则解码模块将访问第一表以找到与该数字相关联的码字。第一表可以是如图3中所示的表302。在该例子中,使用图3中的表,所述码字将是71。
可替换地,如果所述数目不小于所述阈值,则解码模块可以在第二码字表中识别出码字(步骤510)。因此,在本公开的一个方面中,如果前导比特(例如1)的数目等于或大于9,则使用第二表。举例来说,如果所述16比特数字是1111111110000011,则解码模块将访问第二表以找到与该数字相关联的码字。第二表可以是如图4中所示的表402。在该例子中,使用图4中的表,所述码字将是0a。随后所述过程终止。
图6是根据本公开的一个方面的用于在表中找到码字的流程图。过程600可以被实施在来自图2的媒体解码***24中,其中表302来自图3。
过程600开始于解码模块可以被配置成使用数目识别出所述表的第一轴上的位置(步骤602)。在本公开的一个方面中,第一轴上的所述位置是通过可变长度码(VLC)中前导比特的数目识别出的。所述表可以是如图3中所示的表302。举例来说,在11111001的VLC中,如果前导比特被设置为1,则前导比特的数目是5。在VLC的开头处存在5个连续的“1”比特。在该例子中,所述数目是5。在另一例子中,在01的VLC中,如果前导比特被设置为0,则前导比特的数目是0。所述VLC的开头有“0”比特,因此在该VLC中不存在前导比特“1”。在该例子中,所述数目是0。
随后,解码模块可以使用所述多个比特中的比特串识别出所述表的第二轴上的位置(步骤604)。所述比特串是形成VLC的所述多个比特的一部分。在本公开的一个方面中,例如,在11111001的VLC中,前5个比特是1并且是前导比特。于是下一个0比特是表明前导比特已结束的指示符。在指示符比特之后是所述比特串。在该例子中,所述比特串是比特01。在本公开的一个方面中,所述比特串是3个比特。因此,解码模块将取得VLC之后的比特流中的下一个比特以形成01X,其中X表示1或0。
最后,解码模块可以使用第一轴上的所述位置和第二轴上的所述位置识别出码字(步骤606)。在本公开的一个方面中,当阈值为9时,第一轴将是数字0-8并且第二轴将是0-7的二进制值(000、001、010、011...等等)。使用上面的例子,对于5个前导1和等于01X的比特串,所述码字是22。码字22适用于作为比特串的010和011这二者。随后所述过程终止。
图7是根据本公开的一个方面的用于在表中找到码字的流程图。过程700可以被实施在来自图2的媒体解码***24中,其中表402来自图4。
过程700开始于解码模块可以被配置成识别出所述多个比特中的比特串(步骤702)。在本公开的一个方面中,举例来说,在1111111110000011的VLC中,前9个比特是1并且是前导比特。在前导比特之后是所述比特串。在该例子中,所述比特串是比特0000011。在本公开的一个方面中,所述比特串总是跟随在前9个比特之后的比特(多达7个)。在另一方面中,所述比特串可以是不同的尺寸。接下来,解码模块可以把所述比特串匹配到第二表中的条目(步骤704)。举例来说,当阈值为9时,所述表中的所有条目在开头处将具有至少9个1。所述比特串可以与跟随在9个前导比特之后的比特相匹配。最后,解码模块可以识别出与所述条目相关联的码字(步骤706)。举例来说,0000011将与对应于1111111110000011的条目相匹配。使用来自图4的表402,0000011将导致0a的码字。随后所述过程终止。
图8是根据本公开的一个方面的用于解码可变长度码的流程图。过程800可以被实施在来自图2的媒体解码***24中。
过程800开始于检索媒体文件(步骤802)。所述媒体文件可以是图像文件,例如JPEG。所述媒体文件可以从源中被检索,举例来说,例如存储设备或因特网。所述媒体文件可以作为二进制比特流而被接收。接下来,所述过程识别出比特流中的可变长度码(步骤804)。随后,所述过程识别出VLC中前导1的数目(步骤806)。前导比特可以被预定为1或0之一。在本公开的一个方面中,前导比特是1。
随后,确定所述数目是否小于阈值(步骤808)。在本公开的一个方面中,所述阈值是9。如果所述数目小于阈值,则解码模块可以在第一码字表中识别出码字(步骤810)。因此,在本公开的一个方面中,如果前导比特(例如1)的数目小于9,则使用第一表。举例来说,如果所述16比特数字是1111101001011101,则解码模块将访问第一表以找到与该数字相关联的码字。在该例子中,使用图3中的表,所述码字将是71。
可替换地,如果所述数目不小于阈值,则解码模块可以在第二码字表中识别出码字(步骤812)。因此,在本公开的一个方面中,如果前导比特(例如1)的数目等于或大于9,则使用第二表。举例来说,如果所述16比特数字是1111111110000011,则解码模块将访问第二表以找到与该数字相关联的码字。在该例子中,使用图4中的表,所述码字将是0a。随后所述过程终止。
图9是根据本公开的一个方面的用于解码可变长度码的流程图。过程900可以被实施在来自图2的媒体解码***24中。
过程900开始于解码模块可以被配置成接收可变长度码,其中所述可变长度码是多个比特(步骤902)。接下来,解码模块可以识别出在所述多个比特的开头处前导比特被连续地重复的次数(步骤904)。前导比特可以被预定为1或0之一。在本公开的一个方面中,前导比特是1。
随后,解码模块可以使用前导比特被连续地重复的次数来识别出码字表中的码字(步骤906)。过程900与过程500的操作的不同之处在于,在过程900中使用仅仅一个表。用在过程900中的表类似于来自图3的表302。然而,过程900中的表可以大于来自图3的表302。用在过程900中的表可以包括所***字。当使用仅仅一个表时,表尺寸可以是16x64字节,其产生1024字节的表尺寸。该尺寸仍然比64kB小得多。可以从下列码中创建所述表的一些:
9个前导1比特,6个额外比特:
15个前导1比特,0个额外比特:
。
随后所述过程终止。
所描绘的不同方面中的流程图和框图示出设备、方法、***和计算机程序产品的一些可能实施的体系结构、功能和操作。在这方面,所述流程图或框图中的每个框可以表示计算机可用或可读程序代码的模块、段或部分,其包括用于实施一个或多个规定功能的一个或多个可执行指令。在一些可替换实施中,在所述框中提到的所述一个或多个功能可以不按图中所示的顺序发生。举例来说,在一些情况下,接连示出的两个框可以被基本上同时执行,或者所述框可以有时按照相反的顺序来执行,这取决于所涉及的功能。
Claims (20)
1.一种用于解码可变长度码的方法,所述方法包括:
接收可变长度码,其中所述可变长度码是多个比特;
识别出在所述多个比特的开头处前导比特被连续地重复的次数,其中所述前导比特被预定为1或0之一;以及
通过使用所述前导比特被重复的所述次数并将所述次数与阈值进行比较来在码字表中识别出码字。
2.根据权利要求1所述的方法,其中,识别出码字的步骤包括:
确定所述次数是否小于阈值;以及
响应于确定所述次数小于阈值,在第一码字表中识别出码字。
3.根据权利要求2所述的方法,还包括:
响应于确定所述次数等于或大于阈值,在第二码字表中识别出码字。
4.根据权利要求2所述的方法,其中,在所述第一码字表中识别出码字的步骤包括:
使用所述次数来识别出所述第一码字表的第一轴上的位置;
使用所述多个比特中的比特串来识别出所述第一码字表的第二轴上的位置;以及
使用第一轴上的所述位置和第二轴上的所述位置来识别出码字。
5.根据权利要求2所述的方法,其中,所述阈值是9,并且其中所述前导比特是1。
6.根据权利要求4所述的方法,其中,任何前导比特之后都跟随有0比特,并且其中所述比特串是跟随在所述0比特之后的3个比特。
7.根据权利要求3所述的方法,其中,在所述第二码字表中识别出码字的步骤包括:
识别出所述多个比特中的比特串;
将所述比特串匹配到所述第二码字表中的条目;以及
识别出与所述条目相关联的码字。
8.根据权利要求7所述的方法,其中,所述比特串是在所述多个比特的开头处的9个比特之后的7个比特。
9.根据权利要求1所述的方法,其中,所述可变长度码来自图像文件。
10.根据权利要求1所述的方法,其中,在所述码字表中识别出码字的步骤包括:
使用所述次数来识别出所述码字表的第一轴上的位置;
使用所述多个比特中的比特串来识别出所述码字表的第二轴上的位置;以及
使用第一轴上的所述位置和第二轴上的所述位置来识别出码字。
11.根据权利要求10所述的方法,其中,任何前导比特之后都跟随有0比特,并且其中所述比特串是跟随在所述0比特之后的任何比特。
12.一种用于解码可变长度码的***,所述***包括:
存储器单元;
连接到所述存储器单元的处理单元;
解码模块,其被配置成:接收可变长度码,其中所述可变长度码是多个比特;识别出在所述多个比特的开头处前导比特被连续地重复的次数,其中所述前导比特被预定为1或0之一;以及通过使用所述前导比特被重复的所述次数并将所述次数与阈值进行比较来在码字表中识别出码字。
13.根据权利要求12所述的***,其中,所述解码模块被配置成识别出码字包括所述解码模块被配置成:
确定所述次数是否小于阈值;以及
响应于确定所述次数小于阈值,在第一码字表中识别出码字。
14.根据权利要求13所述的***,其中,所述解码模块还被配置成:
响应于确定所述次数等于或大于阈值,在第二码字表中识别出码字。
15.根据权利要求13所述的***,其中,在第一码字表中识别出码字的过程中,所述解码模块还被配置成:
使用所述次数来识别出所述第一码字表的第一轴上的位置;
使用所述多个比特中的比特串来识别出所述第一码字表的第二轴上的位置;以及
使用第一轴上的所述位置和第二轴上的所述位置来识别出码字。
16.根据权利要求13所述的***,其中,所述阈值是9,并且其中所述前导比特是1。
17.根据权利要求14所述的***,其中,在所述第二码字表中识别出码字的过程中,所述解码模块还被配置成:
识别出所述多个比特中的比特串;
将所述比特串匹配到所述第二码字表中的条目;以及
识别出与所述条目相关联的码字。
18.一种用于解码可变长度码的设备,所述设备包括:
用于接收可变长度码的装置,其中所述可变长度码是多个比特;
用于识别出在所述多个比特的开头处前导比特被连续地重复的次数的装置,其中所述前导比特被预定为1或0之一;以及
用于通过使用所述前导比特被重复的所述次数并将所述次数与阈值进行比较来在码字表中识别出码字的装置。
19.根据权利要求18所述的设备,所述用于通过使用所述前导比特被重复的所述次数来在码字表中识别出码字的装置还包括:
用于确定所述次数是否小于阈值的装置;以及
用于响应于确定所述次数小于阈值而在第一码字表中识别出码字的装置。
20.根据权利要求19所述的设备,还包括:
用于响应于确定所述次数等于或大于阈值而在第二码字表中识别出码字的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/307,064 | 2011-11-30 | ||
US13/307064 | 2011-11-30 | ||
US13/307,064 US8593309B2 (en) | 2011-11-30 | 2011-11-30 | Method for efficient decoding of variable length codes |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103139566A CN103139566A (zh) | 2013-06-05 |
CN103139566B true CN103139566B (zh) | 2016-06-15 |
Family
ID=48431488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210502524.1A Active CN103139566B (zh) | 2011-11-30 | 2012-11-30 | 用于可变长度码的高效解码的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8593309B2 (zh) |
CN (1) | CN103139566B (zh) |
DE (1) | DE102012111405A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016145243A1 (en) | 2015-03-10 | 2016-09-15 | Apple Inc. | Adaptive chroma downsampling and color space conversion techniques |
US10362310B2 (en) * | 2015-10-21 | 2019-07-23 | Qualcomm Incorporated | Entropy coding techniques for display stream compression (DSC) of non-4:4:4 chroma sub-sampling |
CN108171763B (zh) * | 2018-01-15 | 2021-08-13 | 珠海市杰理科技股份有限公司 | 解码系数的存取方法和***、jpeg解码系数的存取方法 |
US10666291B1 (en) * | 2019-03-12 | 2020-05-26 | Microsoft Technology Licensing, Llc | High efficiency data decoder |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1866750A (zh) * | 2005-05-20 | 2006-11-22 | 奥林巴斯映像株式会社 | 数据编码及解码装置、数据编码及解码方法 |
CN101090501A (zh) * | 2006-06-13 | 2007-12-19 | 财团法人工业技术研究院 | 模型搜寻式的可变长度编解码方法与装置 |
US7388914B2 (en) * | 1995-03-15 | 2008-06-17 | Kabushiki Kaisha Toshiba | Moving picture coding and/or decoding systems, and variable-length coding and/or decoding system |
CN101547353A (zh) * | 2008-03-28 | 2009-09-30 | 富士通株式会社 | 可变长码解码加速装置 |
US7847711B2 (en) * | 2007-02-16 | 2010-12-07 | Scalado Ab | Generating a data stream and identifying positions within a data stream |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7333037B2 (en) | 2006-02-14 | 2008-02-19 | Broadcom Corporation | Method and system for improved lookup table (LUT) mechanism for Huffman decoding |
SE0802657A1 (sv) | 2008-12-23 | 2010-06-24 | Scalado Ab | Extrahering av digital information |
-
2011
- 2011-11-30 US US13/307,064 patent/US8593309B2/en not_active Expired - Fee Related
-
2012
- 2012-11-26 DE DE102012111405A patent/DE102012111405A1/de active Pending
- 2012-11-30 CN CN201210502524.1A patent/CN103139566B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7388914B2 (en) * | 1995-03-15 | 2008-06-17 | Kabushiki Kaisha Toshiba | Moving picture coding and/or decoding systems, and variable-length coding and/or decoding system |
CN1866750A (zh) * | 2005-05-20 | 2006-11-22 | 奥林巴斯映像株式会社 | 数据编码及解码装置、数据编码及解码方法 |
CN101090501A (zh) * | 2006-06-13 | 2007-12-19 | 财团法人工业技术研究院 | 模型搜寻式的可变长度编解码方法与装置 |
US7847711B2 (en) * | 2007-02-16 | 2010-12-07 | Scalado Ab | Generating a data stream and identifying positions within a data stream |
CN101547353A (zh) * | 2008-03-28 | 2009-09-30 | 富士通株式会社 | 可变长码解码加速装置 |
Also Published As
Publication number | Publication date |
---|---|
US20130135124A1 (en) | 2013-05-30 |
US8593309B2 (en) | 2013-11-26 |
DE102012111405A1 (de) | 2013-06-06 |
CN103139566A (zh) | 2013-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2636680C1 (ru) | Способ и устройство кодирования или декодирования | |
KR101461209B1 (ko) | 2d 매트릭스들에 인코딩 파라미터들을 저장하는 이미지 압축을 위한 방법 및 장치 | |
CN101243611B (zh) | 变换块的高效编码和解码 | |
US7286066B1 (en) | Acceleration of bitstream decoding | |
US10776957B2 (en) | Online image compression in hardware | |
CN101272442B (zh) | 数字图像无损压缩方法和装置、解析方法及图像译码器 | |
US8902992B2 (en) | Decoder for selectively decoding predetermined data units from a coded bit stream | |
US20180152199A1 (en) | Coding method, decoding method, coder, and decoder | |
CN103139566B (zh) | 用于可变长度码的高效解码的方法 | |
CN101494788B (zh) | 视频图像的压缩/解压缩方法与装置 | |
US8682091B2 (en) | Real-time image compression | |
CN1452397A (zh) | 利用基数近似或利用差分码和转义码的帧压缩 | |
US8306346B2 (en) | Static image compression method and non-transitory computer readable medium having a file with a data structure | |
CN103078646A (zh) | 字典查询压缩、解压缩方法及其装置 | |
US8305244B2 (en) | Coding data using different coding alphabets | |
CN111432213A (zh) | 用于视频和图像压缩的自适应贴片数据大小编码 | |
CN112887713B (zh) | 图片压缩、解压缩方法和装置 | |
US9712848B2 (en) | Frame buffer compression using separate aggregation of fixed-length and variable-length components of codewords | |
CN110191341B (zh) | 一种深度数据的编码方法和解码方法 | |
CN115662346B (zh) | Demura补偿值压缩方法和*** | |
US20050232362A1 (en) | High-speed image compression apparatus using last non-zero detection circuit | |
US8798139B1 (en) | Dual-pipeline CABAC encoder architecture | |
CN108184113B (zh) | 一种基于图像间参考的图像压缩编码方法和*** | |
CN116170599B (zh) | 一种同步实时图像压缩方法、***、介质及终端 | |
US9973209B2 (en) | Processor and data processing method thereof |
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 | ||
C56 | Change in the name or address of the patentee | ||
CP01 | Change in the name or title of a patent holder |
Address after: Neubiberg, Germany Patentee after: Intel Mobile Communications GmbH Address before: Neubiberg, Germany Patentee before: Intel Mobile Communications GmbH |