专利名称:一种高速jpeg解码的方法
技术领域:
本发明涉及应用于多媒体领域中对JPEG文件进行快速、高效解码的方法,尤 其涉及一种高速JPEG解码的方法。
背景技术:
为了满足多媒体领域中对JPEG文件进行快速、高效解码的要求,同时满足高 清视频的解码计算速度的要求,流畅的支持高清解码,有效利用显卡GPU的计算 资源,减少对CPU资源的耗费。JPEG算法瓶颈在完全串行的哈夫曼解码过程和 IDCT的计算复杂性高,现有的算法经过长时间的优化已经很难在得到性能上的突 破。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷,提供一种经过简单的改 造,实现支持高清视频的解码高速JPEG解码的方法。
本发明的目的可以通过以下技术方案来实现 一种高速JPEG解码的方法,其 特征在于,该方法包括
(1) 并行哈夫曼解码算法设计与实现
a. 从编码块中提取实际局部编码的数据;
b. 根据提取的局部编码数据通过全局检查恢复为原始的编码数据;
(2) 并行IDCT算法设计与实现
a. 将每个处理单元用到的操作数据复制到共享内存中;
b. 每个处理单元计算IDCT两个步骤,中间需要进行一次同步操作,确定 所有处理单元完成上一步骤;
c. 每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。
所述的步骤(1)中的从编码块中提取实际局部编码的数据包括-(1) 动态检测,直接从JPEG编码数据流中扫描编码块的结束编码符;
(2) 静态索引,在JPEG编码的过程中,保存每个编码块的地址位置,建立 整个图像编码块的索引结构。
与现有技术相比,本发明在普通配置有当前主流显卡的PC机上,可以实现分 辨率为(1024*768) JPEG图像的实时解码每秒60FPS以上,CPU占有率小于10%, 可以经过简单的改造,实现支持高清视频的解码。
图1是本发明一种高速JPEG解码的方法的效果图; 图2是原始JPEG解码方法效果图3是本发明一种高速JPEG解码的方法的动态检测解码方法示意图; 图4是本发明 一种高速JPEG解码的方法的静态索引解码方法示意图; 图5是本发明一种高速JPEG解码的方法的通用CPU解码计算示意图; 图6是本发明一种高速JPEG解码的方法的并行处理器解码计算示意图; 图7是本发明一种高速JPEG解码的方法的并行哈夫曼解码过程示意图; 图8是本发明一种高速JPEG解码的方法的并行IDCT计算过程示意图。
具体实施例方式
为了满足多媒体领域中对JPEG文件进行快速、高效解码的要求,同时满足高 清视频的解码计算速度的要求,流畅的支持高清解码,有效利用显卡GPU的计算 资源,减少对CPU资源的耗费。JPEG算法瓶颈在完全串行的哈夫曼解码过程和 IDCT的计算复杂性高,本发明针对哈夫曼解码过程的改进提供两种技术解决方案 一是在编码过程中记录编码块的地址,建立整个数据流的索引结构;二是动态 进行数据流扫描,检测编码块的位置。通过以上两种方案可以消除JPEG算法解码 过程中串行化的问题;本发明对IDCT算法进行并行化改进,完全可以利用并行计 算处理器的计算能力,达到50到100倍加速比。
并行哈夫曼解码算法。哈夫曼解码算法由于其固有的性质,要求完全串行化地 从数据流中提出压縮数据。不利于在并行计算机处理器上进行并行解码。因此本发 明需要对哈夫曼解码算法进行并行化改造。有两种改造方法 一是在编码过程中记 录每个编码块的位置,建立整个压縮结构的索引,从而在解压过程中消除每个块之间的相关性,实现并行化解码;二是并行动态检测编码结尾标志,并通过检査全局 一致性,可以最终确定JPEG压縮结构,实现正确的并行化解码。
JPEG核心算法的GPU算法实现。现在主流的显卡上都有一个可编程图像处理 器,其计算速度相当于普通CPU的50到100倍。将JPEG解码过程在GPU上实 现可以达到很高的加速比。但是GPU计算结构不同普通CPU,算法实现受到一定 的限制,通过精简优化,本发明最终实现了 JPEG核心算法从CPU到GPU的移植。
本发明为了满足播放高清以及多媒体信息处理中对JPEG图像解码速度的要 求,通过提高本算法的并行性,将算法移植到并行计算机上进行加速。实现了很高 的加速比,达到实际应用的需求,本发明还可以为当前多种多媒体应用提供强大的 加速支持,比如图形内容的搜索、多媒体信息库、图像处理等应用。
JPEG解码算法是一个本质上串行的算法,在CPU上实现,整个算法的瓶颈主 要存在于以下两个部分
一、 哈夫曼编码的整体串行性,哈夫曼编码整体上是一个严格串行的过程,由 于前后编码块存在相关性,即使在双核的CPU上也难以实现加速。
二、 IDCT变换的计算复杂性,IDCT变换是一个二维矩阵乘法计算,具有很 高的计算复杂性,在CPU上的实现特别是X86结构的CPU上,占用很大的CPU 计算时间,效率比较低下。
本发明针对JPEG以上两个解码瓶颈进行优化,实现JPEG解码加速。主要进 行哈夫曼解码并行化改进和IDCT并行化改进。 哈夫曼解码并行化改进
哈夫曼编码压縮算法利用信息的统计规律降低信息的冗余度,由于统计过程利 用到全局的信息,因此哈夫曼编码的信息是整体相关的,因此首先要消除整体编码 信息的相关性。本发明利用两种办法来消除编码信息之间的相关性
一种方法是动态检测,就是直接从JPEG编码数据流中扫描编码块的结束编码 符,由于每个编码块包含图像块的直流和交流系数,只要确定了图像块的直流与交 流系数,就可以单独计算恢复本块原始图像。动态检测方法优点是不需要额外的数 据结构,也不需要对原始的JPEG文件进行格式转换;缺点是编码块结束符在哈夫 曼编码中有二义性,就是有可能出现错误,只有通过全局数据流检查来检测错误编 码块结束符。这样出现浪费计算。
另一种方式静态索引,就是在JPEG编码的过程中,保存每个编码块的地址位置,建立整个图像编码块的索引结构。在解码是,利用索引数据结构直接定位每块 图像的位置,然后同时进行恢复计算。静态索引方法优点是计算效率高,解码速度 更快,因为直接可以定位编码块结束符,不需要扫描,无浪费计算。缺点是需要额 外的数据结构,增加压縮数据的体积,降低了压縮率。
IDCT算法并行化改进
IDCT算法是一个矩阵乘法计算,本身具有很高的并行性,在并行计算机上实 现矩阵乘法计算需要计算机本身的数据一致性接口来支持。图形处理器提供大量轻 量级的线程来处理相对简单的计算过程,并且提供线程之间的共享内存以及同步工 具。这样可以满足IDCT并行计算,达到解码的基本要求。
在通用CPU上的实现,整个矩阵计算都是串行计算,对于X86架构的计算机 来说,计算型指令并不能充分利用整个计算机的资源,但是占用所有的计算时间, 因此计算效率不是很高,不能充分发挥处理器的效能。
而在并行处理器上实现,所有的计算单元很适合处理计算型的指令,虽然每个 计算单元的计算能力赶不上通用CPU的处理能力,但是大量计算单元产生的总体 性能远远大于通用CPU的处理能力,因此在具有并行处理器结构的GPU上实现 IDCT算法,可以达到很高计算性能。
JPEG算法GPU实现
解决了 JPEG算法主要的计算问题,就可以有效的在并行计算机结构的处理器 上实现JPEG算法。主要实现分为并行哈夫曼解码算法和并行IDCT算法。
一、 并行哈夫曼解码算法设计与实现
并行哈夫曼解码算法实现可以分为两个步骤首先从编码块中提取实际局部编 码的数据;然后根据提取的局部编码数据通过全局检査恢复为原始的编码数据。(如 图5)
二、 并行IDCT算法设计与实现
JPEG压縮图像具有分块属性,图像分块之间的无相关性,图像分块内IDCT 计算有相关性。每个分块的计算由并行处理器的处理器块来进行计算,处理器块具 有共享内存便于块内处理器进行通信,块内处理器可以进行计算同步操作。算法分 为三步首先将每个处理单元用到的操作数据复制到共享内存中;接着每个处理单 元计算IDCT两个步骤,中间需要进行一次同步操作,确定所有处理单元完成上一 步骤;最后每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。如图1与图2所示,原始JPEG解码方法在哈夫曼解码、数据全局性恢复及量 化以及IDCT计算过程中是经典的串行处理方法,计算资源利用率低,速度慢。高 速JPEG解码的方法在哈夫曼解码、数据全局性恢复及量化以及IDCT计算过程中 是并行处理方法,计算资源利用率高,速度快。
如图3所示,动态检测解码过程中,并行处理器从头扫描编码数据,知道检测 到对应的编码块结束符,然后开始哈夫曼解码,编码块结束符在哈夫曼编码中有二 义性,有可能出现定位错误,最后通过全局数据流检査来检测错误编码块结束符。 将正确的解码数据合并起来得到本图像编码块的局部系数矩阵。
如图4所示,静态索引解码过程中,并行处理器通过索引直接计算得到对应的 编码块结束符,然后进行哈夫曼解码,得到本图像编码块的局部系数矩阵。
如图5所示,通用CPU解码计算过程,为了计算结果矩阵,CPU需要依次计 算结果矩阵的每个元素,整个计算过程耗费CPU时间多,计算效率低。
如图6所示,并行处理器解码计算过程,为了计算结果矩阵,每个处理单元同 时计算对应结果矩阵的元素,计算效率高。
如图7所示,并行哈夫曼解码过程
(1) 每个处理单元定位对应的编码块。
(2) 每个处理单元进行哈夫曼解码,计算对应图像编码块的DC和AC系数。
(3) 进行整体一致性检查,恢复所有图像编码块实际的DC和AC系数。 如图8所示,并行IDCT计算过程
(1) 每个处理器块将对应图像编码块的系数复制到共享内存中;
(2) 进行IDCT列计算;
(3) 进行处理器块内的同步操作,保证所有列计算结束;
(4) 进行IDCT行计算;
(5) 计算对应图像的实际颜色值。
权利要求
1.一种高速JPEG解码的方法,其特征在于,该方法包括(1)并行哈夫曼解码算法设计与实现a.从编码块中提取实际局部编码的数据;b.根据提取的局部编码数据通过全局检查恢复为原始的编码数据;(2)并行IDCT算法设计与实现a.将每个处理单元用到的操作数据复制到共享内存中;b.每个处理单元计算IDCT两个步骤,中间需要进行一次同步操作,确定所有处理单元完成上一步骤;c.每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。
2. 根据权利要求1所述的一种高速JPEG解码的方法,其特征在于,所述的步 骤(1)中的从编码块中提取实际局部编码的数据包括(1) 动态检测,直接从JPEG编码数据流中扫描编码块的结束编码符;(2) 静态索引,在JPEG编码的过程中,保存每个编码块的地址位置,建立 整个图像编码块的索引结构。
全文摘要
本发明涉及一种高速JPEG解码的方法,该方法包括并行哈夫曼解码算法设计与实现,从编码块中提取实际局部编码的数据;根据提取的局部编码数据通过全局检查恢复为原始的编码数据;并行IDCT算法设计与实现,将每个处理单元用到的操作数据复制到共享内存中;每个处理单元计算IDCT两个步骤,中间需要进行一次同步操作,确定所有处理单元完成上一步骤;每个处理单元将计算完成后的结果经过量化恢复为实际的图像数据。与现有技术相比,本发明在普通配置有当前主流显卡的PC机上,可以实现分辨率为(1024*768)JPEG图像的实时解码每秒60FPS以上,CPU占有率小于10%,可以经过简单的改造,实现支持高清视频的解码。
文档编号H04N7/26GK101626504SQ20081004040
公开日2010年1月13日 申请日期2008年7月9日 优先权日2008年7月9日
发明者秦永进, 飞苹果 申请人:上海飞来飞去多媒体创意有限公司