一种高速JPEG解码的方法转让专利

申请号 : CN200810040402.9

文献号 : CN101626504B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨青青飞苹果

申请人 : 上海飞来飞去多媒体创意有限公司

摘要 :

本发明涉及一种高速JPEG解码的方法,该方法包括:并行哈夫曼解码算法设计与实现,从编码块中提取实际局部编码的数据;根据提取的局部编码数据通过全局检查恢复为原始的编码数据;并行IDCT算法设计与实现,将每个处理单元用到的操作数据复制到共享内存中;每个处理单元计算IDCT两个步骤,中间需要进行一次同步操作,确定所有处理单元完成上一步骤;每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。与现有技术相比,本发明在普通配置有当前主流显卡的PC机上,可以实现分辨率为(1024*768)JPEG图像的实时解码每秒60FPS以上,CPU占有率小于10%,可以经过简单的改造,实现支持高清视频的解码。

权利要求 :

1.一种高速JPEG解码的方法,其特征在于,该方法包括:(1)并行哈夫曼解码算法设计与实现

a.从编码块中提取实际局部编码的数据,来进行哈夫曼解码;

b.根据提取的实际局部编码的数据通过全局检查恢复为原始的编码数据;

(2)并行IDCT算法设计与实现

a.将每个处理单元用到的图像编码块的系数复制到共享内存中;

b.每个处理单元进行IDCT列计算,进行处理器块内的同步操作,保证所有列计算结束,进行IDCT行计算,确定所有处理单元完成步骤b;

c.每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据;

所述的步骤(1)中的从编码块中提取实际局部编码的数据包括:动态检测,直接从JPEG编码数据流中扫描编码块的结束编码符,并行动态检测编码结尾标志,然后开始哈夫曼解码,并通过检查全局一致性,可以最终确定JPEG压缩结构,实现正确的并行化哈夫曼解码;

或者静态索引,在JPEG编码的过程中,保存每个编码块的地址位置,建立整个图像编码块的索引结构,从而在解压过程中消除每个编码块之间的相关性,实现并行化哈夫曼解码。

说明书 :

一种高速JPEG解码的方法

技术领域

[0001] 本发明涉及应用于多媒体领域中对JPEG文件进行快速、高效解码的方法,尤其涉及一种高速JPEG解码的方法。

背景技术

[0002] 为了满足多媒体领域中对JPEG文件进行快速、高效解码的要求,同时满足高清视频的解码计算速度的要求,流畅的支持高清解码,有效利用显卡GPU的计算资源,减少对CPU资源的耗费。JPEG算法瓶颈在完全串行的哈夫曼解码过程和IDCT的计算复杂性高,现有的算法经过长时间的优化已经很难在得到性能上的突破。

发明内容

[0003] 本发明的目的就是为了克服上述现有技术存在的缺陷,提供一种经过简单的改造,实现支持高清视频的解码高速JPEG解码的方法。
[0004] 本发明的目的可以通过以下技术方案来实现:一种高速JPEG解码的方法,其特征在于,该方法包括:
[0005] (1)并行哈夫曼解码算法设计与实现
[0006] a.从编码块中提取实际局部编码的数据;
[0007] b.根据提取的局部编码数据通过全局检查恢复为原始的编码数据;
[0008] (2)并行IDCT算法设计与实现
[0009] a.将每个处理单元用到的操作数据复制到共享内存中;
[0010] b.每个处理单元计算IDCT两个步骤,中间需要进行一次同步操作,确定所有处理单元完成上一步骤;
[0011] c.每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。所述的步骤(1)中的从编码块中提取实际局部编码的数据包括:
[0012] (1)动态检测,直接从JPEG编码数据流中扫描编码块的结束编码符;
[0013] (2)静态索引,在JPEG编码的过程中,保存每个编码块的地址位置,建立整个图像编码块的索引结构。
[0014] 与现有技术相比,本发明在普通配置有当前主流显卡的PC机上,可以实现分辨率为(1024*768)JPEG图像的实时解码每秒60FPS以上,CPU占有率小于10%,可以经过简单的改造,实现支持高清视频的解码。

附图说明

[0015] 图1是本发明一种高速JPEG解码的方法的效果图;
[0016] 图2是原始JPEG解码方法效果图;
[0017] 图3是本发明一种高速JPEG解码的方法的动态检测解码方法示意图;
[0018] 图4是本发明一种高速JPEG解码的方法的静态索引解码方法示意图;
[0019] 图5是本发明一种高速JPEG解码的方法的通用CPU解码计算示意图;
[0020] 图6是本发明一种高速JPEG解码的方法的并行处理器解码计算示意图;
[0021] 图7是本发明一种高速JPEG解码的方法的并行哈夫曼解码过程示意图;
[0022] 图8是本发明一种高速JPEG解码的方法的并行IDCT计算过程示意图。

具体实施方式

[0023] 为了满足多媒体领域中对JPEG文件进行快速、高效解码的要求,同时满足高清视频的解码计算速度的要求,流畅的支持高清解码,有效利用显卡GPU的计算资源,减少对CPU资源的耗费。JPEG算法瓶颈在完全串行的哈夫曼解码过程和IDCT的计算复杂性高,本发明针对哈夫曼解码过程的改进提供两种技术解决方案:一是:在编码过程中记录编码块的地址,建立整个数据流的索引结构;二是:动态进行数据流扫描,检测编码块的位置。通过以上两种方案可以消除JPEG算法解码过程中串行化的问题;本发明对IDCT算法进行并行化改进,完全可以利用并行计算处理器的计算能力,达到50到100倍加速比。
[0024] 并行哈夫曼解码算法。哈夫曼解码算法由于其固有的性质,要求完全串行化地从数据流中提出压缩数据。不利于在并行计算机处理器上进行并行解码。因此本发明需要对哈夫曼解码算法进行并行化改造。有两种改造方法:一是在编码过程中记录每个编码块的位置,建立整个压缩结构的索引,从而在解压过程中消除每个块之间的相关性,实现并行化解码;二是并行动态检测编码结尾标志,并通过检查全局一致性,可以最终确定JPEG压缩结构,实现正确的并行化解码。
[0025] JPEG核心算法的GPU算法实现。现在主流的显卡上都有一个可编程图像处理器,其计算速度相当于普通CPU的50到100倍。将JPEG解码过程在GPU上实现可以达到很高的加速比。但是GPU计算结构不同普通CPU,算法实现受到一定的限制,通过精简优化,本发明最终实现了JPEG核心算法从CPU到GPU的移植。
[0026] 本发明为了满足播放高清以及多媒体信息处理中对JPEG图像解码速度的要求,通过提高本算法的并行性,将算法移植到并行计算机上进行加速。实现了很高的加速比,达到实际应用的需求,本发明还可以为当前多种多媒体应用提供强大的加速支持,比如图形内容的搜索、多媒体信息库、图像处理等应用。
[0027] JPEG解码算法是一个本质上串行的算法,在CPU上实现,整个算法的瓶颈主要存在于以下两个部分:
[0028] 一、哈夫曼编码的整体串行性,哈夫曼编码整体上是一个严格串行的过程,由于前后编码块存在相关性,即使在双核的CPU上也难以实现加速。
[0029] 二、IDCT变换的计算复杂性,IDCT变换是一个二维矩阵乘法计算,具有很高的计算复杂性,在CPU上的实现特别是X86结构的CPU上,占用很大的CPU计算时间,效率比较低下。
[0030] 本发明针对JPEG以上两个解码瓶颈进行优化,实现JPEG解码加速。主要进行哈夫曼解码并行化改进和IDCT并行化改进。
[0031] 哈夫曼解码并行化改进
[0032] 哈夫曼编码压缩算法利用信息的统计规律降低信息的冗余度,由于统计过程利用到全局的信息,因此哈夫曼编码的信息是整体相关的,因此首先要消除整体编码信息的相关性。本发明利用两种办法来消除编码信息之间的相关性:
[0033] 一种方法是动态检测,就是直接从JPEG编码数据流中扫描编码块的结束编码符,由于每个编码块包含图像块的直流和交流系数,只要确定了图像块的直流与交流系数,就可以单独计算恢复本块原始图像。动态检测方法优点是不需要额外的数据结构,也不需要对原始的JPEG文件进行格式转换;缺点是编码块结束符在哈夫曼编码中有二义性,就是有可能出现错误,只有通过全局数据流检查来检测错误编码块结束符。这样出现浪费计算。
[0034] 另一种方式静态索引,就是在JPEG编码的过程中,保存每个编码块的地址位置,建立整个图像编码块的索引结构。在解码是,利用索引数据结构直接定位每块图像的位置,然后同时进行恢复计算。静态索引方法优点是计算效率高,解码速度更快,因为直接可以定位编码块结束符,不需要扫描,无浪费计算。缺点是需要额外的数据结构,增加压缩数据的体积,降低了压缩率。
[0035] IDCT算法并行化改进
[0036] IDCT算法是一个矩阵乘法计算,本身具有很高的并行性,在并行计算机上实现矩阵乘法计算需要计算机本身的数据一致性接口来支持。图形处理器提供大量轻量级的线程来处理相对简单的计算过程,并且提供线程之间的共享内存以及同步工具。这样可以满足IDCT并行计算,达到解码的基本要求。
[0037] 在通用CPU上的实现,整个矩阵计算都是串行计算,对于X86架构的计算机来说,计算型指令并不能充分利用整个计算机的资源,但是占用所有的计算时间,因此计算效率不是很高,不能充分发挥处理器的效能。
[0038] 而在并行处理器上实现,所有的计算单元很适合处理计算型的指令,虽然每个计算单元的计算能力赶不上通用CPU的处理能力,但是大量计算单元产生的总体性能远远大于通用CPU的处理能力,因此在具有并行处理器结构的GPU上实现IDCT算法,可以达到很高计算性能。
[0039] JPEG算法GPU实现
[0040] 解决了JPEG算法主要的计算问题,就可以有效的在并行计算机结构的处理器上实现JPEG算法。主要实现分为并行哈夫曼解码算法和并行IDCT算法。
[0041] 一、并行哈夫曼解码算法设计与实现
[0042] 并行哈夫曼解码算法实现可以分为两个步骤:首先从编码块中提取实际局部编码的数据;然后根据提取的局部编码数据通过全局检查恢复为原始的编码数据。(如图5)[0043] 二、并行IDCT算法设计与实现
[0044] JPEG压缩图像具有分块属性,图像分块之间的无相关性,图像分块内IDCT计算有相关性。每个分块的计算由并行处理器的处理器块来进行计算,处理器块具有共享内存便于块内处理器进行通信,块内处理器可以进行计算同步操作。算法分为三步:首先将每个处理单元用到的操作数据复制到共享内存中;接着每个处理单元计算IDCT两个步骤,中间需要进行一次同步操作,确定所有处理单元完成上一步骤;最后每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。
[0045] 如图1与图2所示,原始JPEG解码方法在哈夫曼解码、数据全局性恢复及量化以及IDCT计算过程中是经典的串行处理方法,计算资源利用率低,速度慢。高速JPEG解码的方法在哈夫曼解码、数据全局性恢复及量化以及IDCT计算过程中是并行处理方法,计算资源利用率高,速度快。
[0046] 如图3所示,动态检测解码过程中,并行处理器从头扫描编码数据,知道检测到对应的编码块结束符,然后开始哈夫曼解码,编码块结束符在哈夫曼编码中有二义性,有可能出现定位错误,最后通过全局数据流检查来检测错误编码块结束符。将正确的解码数据合并起来得到本图像编码块的局部系数矩阵。
[0047] 如图4所示,静态索引解码过程中,并行处理器通过索引直接计算得到对应的编码块结束符,然后进行哈夫曼解码,得到本图像编码块的局部系数矩阵。
[0048] 如图5所示,通用CPU解码计算过程,为了计算结果矩阵,CPU需要依次计算结果矩阵的每个元素,整个计算过程耗费CPU时间多,计算效率低。
[0049] 如图6所示,并行处理器解码计算过程,为了计算结果矩阵,每个处理单元同时计算对应结果矩阵的元素,计算效率高。
[0050] 如图7所示,并行哈夫曼解码过程
[0051] (1)每个处理单元定位对应的编码块。
[0052] (2)每个处理单元进行哈夫曼解码,计算对应图像编码块的DC和AC系数。
[0053] (3)进行整体一致性检查,恢复所有图像编码块实际的DC和AC系数。
[0054] 如图8所示,并行IDCT计算过程
[0055] (1)每个处理器块将对应图像编码块的系数复制到共享内存中;
[0056] (2)进行IDCT列计算;
[0057] (3)进行处理器块内的同步操作,保证所有列计算结束;
[0058] (4)进行IDCT行计算;
[0059] (5)计算对应图像的实际颜色值。