技术领域
以下公开的示例实施例涉及一种可编程的霍夫曼解码设备和方法。
背景技术:
霍夫曼编码是无损压缩方法的示例。
发展至今的视频和音频标准通常使用霍夫曼无损压缩方法。
霍夫曼压缩方法估计定义的符号的概率值,并从估计的概率值产生霍夫曼树,由此创建包括数字值0和1的比特串。
在解码期间,霍夫曼压缩方法通过比较每个比特串与先前产生的霍夫曼表来提取原始符号。
根据霍夫曼压缩方法的上述典型特征,可通过逐个检查比特串来找到匹配的符号。
根据霍夫曼压缩方法,由于符号的概率特征取决于应用而显著地不同,因此不同的应用具有不同的霍夫曼表。
针对作为典型视频标准的运动图像专家组(MPEG),MPEG2和MPEG4,定义彼此不同的霍夫曼表。
因此,通常通过软件来实施霍夫曼压缩方法。
然而,当使用软件时,需要比较每个比特串与表值,由此显著增加将要执行的计算量。在此情况下,预定比特串可被存储在存储器中并被按组处理。
然而,按组处理需要以组为单位的比较计算。此外,由于存储霍夫曼表,所以大容量存储器是必要的。
因此,尽管已经开发了用于高速处理的硬件,但是当应用被改变并且每个霍夫曼表被专门用于特定应用时,所述硬件是不适用的。
技术实现要素:
前述和/或其他方面通过提供一种解码设备来实现,其中,所述解码设备包括:表存储单元,用于存储至少一个表,其中,所述表包括至少一个码;接收单元,用于接收至少一个指令信号;符号提取单元,用于基于所述至少一个指令从所述至少一个表提取符号值和符号长度。
所述至少一个指令信号可包括:表配置控制信号、霍夫曼前缀控制信号、霍夫曼后缀控制信号和霍夫曼符号解码控制信号。
解码设备可还包括表产生单元,用于产生所述至少一个表。
表产生单元可包括:排列单元,用于按照降序或升序排列所述至少一个码;码分离单元,用于将所述至少一个码中的每个码的后缀和前缀分别彼此分离,使得后缀对应于目标后缀长度;组结合单元,用于根据每个前缀来结合后缀组,使得所述至少一个表的大小被最小化。
解码设备可还包括比特计算单元,用于计算使表的大小最小化的目标后缀长度。
比特计算单元可包括:后缀设置单元,用于将目标后缀长度设置为最小值;检测单元,用于检测没有包括在所述至少一个表中的码之中的具有最大长度的码;计算单元,用于计算所述至少一个表中的每个表的大小;第一比较单元,用于比较先前表大小与当前表大小;第二比较单元,用于比较当前后缀长度是否对应于最大后缀长度。
当先前表大小大于当前表大小时,后缀设置单元可将目标后缀长度设置为当前后缀长度。
在当前后缀长度小于最大后缀长度时,后缀设置单元可增加所述当前后缀长度,并且每个模块重复上述操作。
解码设备可还包括:表配置存储单元,用于存储与所述至少一个表中的每个表有关的数据;前缀存储单元,用于存储基于所述至少一个表中的每个表产生的至少一个前缀;映射表存储单元,用于存储与所述至少一个码有关的符号数据。
表配置存储单元可存储数据,其中,所述数据包括:与在所述至少一个表中的每个表的映射表上的第一地址对应的偏移地址、所述至少一个码中的每个码的后缀长度和非前缀长度、用于将至少两个表映射到一个表的组装比特(packing bit)长度。
前缀存储单元可存储与所述至少一个前缀中的每个前缀的起始比特对应的标志。
映射表存储单元可存储数据,其中,所述数据包括:与所述至少一个码中的每个码对应的符号值、所述至少一个码中的每个码的后缀长度、用于确认在所述至少一个码之中存在映射的码的命中标志(hit_flag)。
符号提取单元可从表配置存储单元和前缀存储单元加载与表号对应的参数,并从基于所述参数提取的前缀计算映射表的地址,由此提取符号值和符号长度。
前述和/或其他方面通过提供一种解码方法来实现,其中,所述解码方法包括:存储至少一个表,其中,所述表包括至少一个码;接收至少一个指令信号;基于所述至少一个指令信号从所述至少一个表提取符号值和符号长度。
示例实施例的另外的方面、特征和/或优点将在以下的描述中部分地进行阐述,并将部分地通过所述描述而清楚,或通过本公开的实践被了解。
附图说明
从以下结合附图对示例实施例的描述,这些和/或其他方面和优点将变得清楚和更易于理解,其中:
图1示出根据示例实施例的解码设备的结构;
图2示出根据示例实施例的输入到解码设备的示例指令;
图3示出根据示例实施例的解码方法;
图4示出根据示例实施例的表;
图5A至图5D示出根据示例实施例的表结构的示例;
图6示出根据示例实施例的根据前缀和后缀的示例表结构;
图7示出根据示例实施例的比特计算单元的结构;
图8示出根据示例实施例的提取目标后缀比特长度的方法;
图9示出根据示例实施例的解码设备的电路结构;
图10示出存储在图9中示出的表配置存储单元中的数据;
图11示出存储在图9中示出的前缀存储单元中的数据;
图12示出存储在图9中示出的映射表存储单元中的数据。
具体实施方式
现在将详细参考示例实施例,其示例在附图中示出,其中,相同的参考标号始终指示相同的元件。下面通过参照附图描述示例实施例以解释本公开。
在本发明的描述中,如果确定有关公开的技术或配置的详细描述不必要地使本发明的主题模糊,则所述有关公开的技术或配置的详细描述将被省略。下面要使用的术语基于它们在本发明中的功能被公开并被利用,并且可根据用户、用户的意图或实践而改变。因此,应该基于整个说明书来确定术语的含义。
图1示出根据示例实施例的解码设备的结构。
参照图1,解码设备可包括:表存储单元110,用于存储均包括至少一个码的至少一个表;接收单元120,用于接收至少一个指令信号;符号提取单元130,用于基于所述至少一个指令信号从所述至少一个表提取符号值和符号长度。
图2示出根据示例实施例的输入到解码设备的示例指令。
参照图2,根据示例实施例的解码设备可定义多个指令信号,用于实现霍夫曼解码的编程。
根据一方面,指令解码器210可接收指令信号并将所述指令信号以操作码的形式发送至复用器(MUX)220。MUX220可将所述操作码复用到至少一个指令信号中,并将所述至少一个指令信号发送至实际处理数据的霍夫曼解码器230,由此提取所述至少一个码的符号值和符号长度。
根据示例实施例,所述至少一个指令信号可包括表配置控制信号、霍夫曼前缀控制信号、霍夫曼后缀控制信号和霍夫曼符号解码控制信号等中的一个或多个。
以下,将描述使用图1的解码设备的解码方法。
图3示出根据示例实施例的解码方法。
参照图3,在操作310,解码设备可存储均包括至少一个码的至少一个表。
在操作320,解码设备可接收至少一个指令信号。
在操作330,解码设备可基于所述至少一个指令信号从所述至少一个表提取符号值和符号长度。
以下,将描述根据示例实施例的表产生方法。
根据示例实施例的解码设备可使用表产生单元140产生所述至少一个表。
表产生单元140可使用排列单元141按照降序或升序排列所述至少一个码。
表产生单元140可使用码分离单元142将所述至少一个码中的每个码的后缀和前缀分别彼此分离,使得所述后缀对应于目标后缀长度。
表产生单元140可使用组结合单元143根据每个前缀来结合后缀组,使得所述至少一个表的大小被最小化。
图4示出根据示例实施例的表。图5A至图5D示出根据示例实施例的表结构的示例。
例如,表产生单元140可对如图4所示的在H.264/AVC中使用的霍夫曼表中的total_zero进行编码。例如,total_zero可指示在最后的非零系数之前的零的数量。此外,当如图5A所示,TotalCoeff为3时,表产生单元140可按下面的方式产生关于霍夫曼编码的表。例如,TotalCoeff可指示非零系数的总数量。
例如,如图5B所示,表产生单元140可按照降序排列至少一个码。
如图5C所示,表产生单元140可分离前缀以使得后缀对应于3比特(即,目标后缀长度),使得所述至少一个码具有相对于最长码的相同前缀。
如图5D所示,表产生单元140可从除一组具有前缀“000”的码之外的剩余码分离下一个前缀以使得后缀对应于3比特,其中,所述3比特是相对于具有最大长度的码的目标后缀长度。
表产生单元140可产生前缀“0”和“000”的前缀组。所述前缀中的每个前缀可通过后缀组来表示。
图6示出根据示例实施例的根据前缀和后缀的示例表结构。
当可从预定比特流找到前缀时,根据示例实施例的解码设备可产生并存储如图6所示的表,使得仅通过加载预定后缀来提取结果。
尽管所述示例示出产生目标后缀长度为3比特的表的处理,但是根据示例实施例的解码设备可提取使表大小最小化的目标后缀长度。
解码设备可使用比特计算单元150计算使表大小最小化的目标后缀长度。
图7示出根据示例实施例的比特计算单元的结构。图8示出根据示例实施例的提取目标后缀长度的方法。
参照图7和图8,在操作810,比特计算单元可按照降序或升序排列至少一个码。
在操作820,比特计算单元可使用后缀设置单元710将目标后缀长度设置为最小值。
例如,后缀设置单元可将目标后缀长度初始设置为二进制值1,其中,二进制值1为最小单位长度。
在操作830,比特计算单元可使用检测单元720从没有包括在表中的码中检测具有最大长度的码。
在操作840,比特计算单元可使用计算单元730计算所述至少一个表中的每个表的大小。
在操作850,比特计算单元可使用第一比较单元740比较先前表大小与当前表大小。
当先前表大小大于当前表大小时,在操作860,后缀设置单元可将目标后缀长度设置为当前后缀长度。
在操作870,比特计算单元可使用第二比较单元750比较当前后缀长度是否对应于最大后缀长度。
在当前后缀长度小于最大后缀长度时,后缀设置单元可在操作880增加所述当前后缀长度并重复上述操作。
假设前缀长度是m比特,非前缀长度是n比特,并且前缀的数量为c,则可使用等式1计算表大小。
[等式1]
表大小=2n+c×2m
解码设备可通过将各个前述操作中的每个操作重复与码的最大长度一样多次,以通过计算使表大小和非前缀长度最小化的目标后缀长度来执行表映射。
以下,将描述根据示例实施例的基于解码设备的电路结构的解码方法。
图9示出根据示例实施例的解码设备的电路结构。
参照图9,解码设备可包括:表配置存储单元910,存储与每个表有关的数据;前缀存储单元920,用于存储基于每个表产生的至少一个前缀;映射表存储单元930,用于存储与至少一个码有关的符号数据。
图10示出存储在图9的表配置存储单元910中的数据。
参照图10,表配置存储单元910可存储与在每个表的映射表上的第一地址对应的偏移地址、每个码的后缀长度和非前缀长度、用于将至少两个表映射到一个表的组装比特长度。
图11示出存储在图9的前缀存储单元920中的数据。
参照图11,前缀存储单元920可存储与每个前缀的起始比特对应的标志。
例如,前缀存储单元920可在每个前缀值前设置作为一比特值的“1”。所述一比特值“1”可表示指示前缀的起始比特的标志。
解码设备可通过所述标志来比较并提取前缀值。
图12示出存储在图9的映射表存储单元930中的数据。
参照图12,映射表存储单元930可存储数据,其中,所述数据包括:与每个码对应的符号值、每一个码的后缀长度、用于确认在至少一个码之中存在映射的码的命中标志。
例如,符号值可对应于霍夫曼码。后缀长度可表示实际的霍夫曼码的后缀长度。
存储在映射表存储单元930中的数据可对处理诸如图5B中示出的“00011”码有用。
例如,图5B中示出的前缀和后缀两者都是3比特,前缀和后缀可被映射到两个码“000110”和“000111”。
然而,由于所述码实际上是2比特,所以映射表需要包括上述数据。
命中标志被用于处理转义码。当在所述至少一个码之中没有映射的码的存在时,可处理转义码。由于转义码不遵守通常的霍夫曼编码,所以转义码可被单独处理。
当转义码存在时,根据示例实施例的解码设备可存储用于确认映射表是否包括转义码的命中标志。
例如,解码设备可按下面的方式设置关于每个指令信号存储的值。
根据一方面,在表配置存储单元910中的非前缀的长度和后缀的长度可都是3。由于关于表的前缀是“0”或“000”,所以前缀存储单元920可存储“10”和“1000”。映射表存储单元930的符号值和后缀长度可对应于图6中示出的total_zero和后缀长度。
根据示例实施例的符号提取单元可通过从表配置存储单元910和前缀存储单元920加载与表号对应的参数并从基于所述参数提取的前缀计算映射表的地址来提取符号值和符号长度。
根据示例实施例,可实现高速霍夫曼解码。此外,通过使表大小最小化可减少需要的存储空间,并减少解码器为了产生表所需的时间,提高解码速度。
另外,所述示例实施例可被应用到各种使用霍夫曼编码的应用。例如,根据上述示例实施例的用于解码的设备和方法可被用于视频或音频解码(诸如用于解码根据H.264/AVC的高分辨率视频比特流),或可被用于解码代表其他信息(诸如文本信息)的比特流。
根据上述示例实施例的用于解码的设备和方法可使用一个或多个处理器,其中,所述处理器可包括微处理器、中央处理单元(CPU)、数字信号处理器(DSP)或专用集成电路(ASIC),以及这些和其他处理装置的部分或组合。
这里使用的术语“模块”和“单元”可指示但不限于执行特定任务的软件或硬件部件或装置,诸如现场可编程门阵列(FPGA)或专用集成电路(ASIC)。模块或单元可被配置为驻留在可寻址的存储介质上,并被配置为在一个或多个处理器上执行。因此,作为示例,模块或单元可包括:部件(诸如软件部件、面向对象的软件部件、类部件和任务部件)、进程、函数、属性、过程、子程序、程序代码的片段、驱动程序、固件、微代码、电路、数据、数据库、数据结构、表、数组和变量。在部件和模块/单元中提供的功能可被组合成更少的部件和模块/单元,或进一步分离成另外的部件和模块。
根据上述的示例实施例的所述方法可被记录在包括用于实施由计算机执行的各种操作的程序指令的非瞬时性计算机可读介质中。所述介质还可单独包括数据文件、数据结构等,或可包括与所述程序指令相结合的数据文件、数据结构等。记录在介质上的程序指令可以是为了示例实施例的目的而专门设计和构建的程序指令,或它们可以是对于计算机软件领域中的技术人员公知且可用的程序指令。非瞬时性计算机可读介质的示例包括:磁介质(诸如硬盘、软盘和磁带)、光学介质(诸如CD ROM盘和DVD)、磁光介质(诸如光盘)、被专门配置为存储和执行程序指令的硬件装置(诸如只读存储器(ROM)、随机存取存储器(RAM)、闪存等)。所述介质可以是传输介质,诸如用于传输指定程序指令和数据结构的信号的光学线缆、金属线缆或包括载波的波导。程序指令的示例包括机器代码(诸如由编译器产生)以及包括可由计算机使用解释器执行的更高级代码的文件两者。为了执行上述示例实施例的操作,所描述的硬件装置可被配置为充当一个或多个软件模块,反之亦然。
流程图的每个块可表示单元、模块、片段或部分代码,其中,所述单元、模块、片段或部分代码包括用于实施指定逻辑功能的一个或多个可执行指令。还应注意在一些备选实施中,在所述块中注释的功能可不按顺序发生。例如,连续示出的两个块实际上可基本同时被执行,或者所述块有时可按相反顺序被执行,这取决于涉及的功能性。
尽管示例实施例已经被示出并被描述,但是本领域的技术人员将认识到:在没有脱离本公开的原理和精神的情况下,可在这些示例实施例中进行改变,其中,本公开的范围在权利要求及其等同物中被限定。