System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于opencl的jpeg2000中t1并行解码方法和装置制造方法及图纸_技高网

一种基于opencl的jpeg2000中t1并行解码方法和装置制造方法及图纸

技术编号:40138193 阅读:5 留言:0更新日期:2024-01-23 23:12
本发明专利技术涉及一种基于opencl的jpeg2000中t1并行解码方法和装置。其方法部分主要包括:建立八个opencl文件,分别与八种类型的t1解码相关的代码块相对应;依次将对应的代码块拷贝至对应的opencl文件中,将openjpeg定义的数据类型转换为opencl支持的数据类型,并对opencl文件中的代码块进行优化;创建主解码程序,所述主解码程序包含kernel函数,用于根据opencl文件中优化的代码块实现t1并行解码的过程。本发明专利技术以openjpeg中jpeg2000的t1解码源码部分为基础,将其优化为可支持opencl设备进行t1并行解码,在一定条件下,能够加快解码速度。本发明专利技术针对jpeg2000解码中,最为复杂的熵解码中的t1解码过程,提出了一种基于opencl的t1并行解码方案,从而实现利用GPU快速解码jpeg2000码流的目的。

【技术实现步骤摘要】

本专利技术涉及jpeg2000解码过程中的熵解码中的t1解码,特别是涉及一种基于opencl的jpeg2000中t1并行解码方法和装置


技术介绍

1、图像压缩标准jpeg2000是一种压缩效率极高的编解码方法,由于其压缩比高且失真率低,在医疗图像、卫星图像以及数字影院等领域都有广泛的应用,但是其编解码过程繁琐复杂,这阻碍了其在市场上大规模推广和使用。其主要的编码过程为:预处理、小波变换、量化、熵编码,解码过程则依次为熵解码、反量化、小波反变换、后处理,其中最为复杂的是熵编码和解码过程,其中熵编解码又分为t1编解码、t2编解码,t1占比最重。当前技术背景下,jpeg2000大多是采用cpu来完成编解码运算的,市场上仅有英伟达公司采用了cuda开发了自家的nvjpeg库,在显卡gpu上用于jpeg2000快速编解码,且并未开源。

2、openjpeg是一个用c语言编写的开源jpeg2000编解码库,其源码可以任意修改、使用及用于商业用途,也是目前使用较为广泛的jpeg2000编解码库,但是目前只能用于cpu串行解码,无法进行并行解码。

3、有鉴于此,如何克服现有技术所存在的缺陷,解决上述技术问题,是本
待解决的难题。


技术实现思路

1、针对现有技术中的缺陷或改进需求,为了解决现有jpeg2000编解码库只能用于cpu串行解码,无法进行并行解码的问题。本专利技术提出了一种基于opencl的jpeg2000中t1并行解码方法和装置,本专利技术以openjpeg中jpeg2000的t1解码源码部分为基础,将其优化为可支持opencl设备进行t1并行解码,在一定条件下,能够加快解码速度。本专利技术针对jpeg2000解码中,最为复杂的熵解码中的t1解码过程,提出了一种基于opencl的t1并行解码方案,从而实现利用gpu快速解码jpeg2000码流的目的。

2、本专利技术采用如下技术方案:

3、第一方面,本专利技术提供了一种基于opencl的jpeg2000中t1并行解码方法,包括:

4、建立八个opencl文件,分别与八种类型的t1解码相关的代码块相对应;

5、依次将对应的代码块拷贝至对应的opencl文件中,将openjpeg定义的数据类型转换为opencl支持的数据类型,并对opencl文件中的代码块进行优化;

6、创建主解码程序,所述主解码程序包含kernel函数,用于根据opencl文件中优化的代码块实现t1并行解码的过程。

7、在一个可选的实施方式中,所述八种类型的t1解码相关的代码块具体包括:预定义类型的代码块、结构体定义类型的代码块、数组或者常量类型的代码块、t1整体解码相关类型的代码块、mqc上下文解码器类型的代码块、重要性传播解码类型的代码块、幅值细化解码类型的代码块以及标志清除解码类型的代码块。

8、在一个可选的实施方式中,所述建立八个opencl文件,分别与八种类型的t1解码相关的代码块相对应具体包括:

9、建立八个.cl文件,分别命名为:a1.cl、a2.cl、a3.cl、a4.cl、a5.cl、a6.cl、a7.cl以及a8.cl;其中,a1.cl与预定义类型的代码块相对应;a2.cl与结构体定义类型的代码块相对应;a3.cl与数组或者常量类型的代码块相对应;a4.cl与t1整体解码相关类型的代码块相对应;a5.cl与mqc上下文解码器类型的代码块相对应;a6.cl与重要性传播解码类型的代码块相对应;a7.cl与幅值细化解码类型的代码块相对应;a8.cl标志清除解码类型的代码块相对应。

10、在一个可选的实施方式中,所述将openjpeg定义的数据类型转换为opencl支持的数据类型具体包括:

11、对八个opencl文件内的文本内容进行全文字符串检索,若检索到opj_char则替换为char;若检索到opj_char*则替换为char*;若检索到opj_float32则替换为float;若检索到opj_floa32*则替换为float32*;若检索到opj_float64则替换为double;若检索到opj_floa64*则替换为float64*;若检索到opj_byte则替换为unsigned char;若检索到opj_byte*则替换为unsigned char*;若检索到opj_int32则替换为int;若检索到opj_int32*则替换为int*;若检索到opj_uint32则替换为uint;若检索到opj_uint32*则替换为uint*;若检索到opj_flag_t则替换为uint;若检索到opj_flag_t*则替换为uint*;若检索到opj_bool则替换为bool;若检索到opj_bool*则替换为bool*。

12、在一个可选的实施方式中,所述对opencl文件中的代码块进行优化具体包括:

13、对opj_mqc_state结构体进行优化,将其中指向opj_mqc_state结构体的指针修改为两个uint型成员;

14、对opj_mqc结构体进行优化,将其中指向opj_mqc_state的指针数组ctxs优化修改为一个uint型的数组,长度和原始相同;将其中指向opj_mqc_states的指针的二级指针curctx修改为一个uint型的数据;将其中char型指针lut_ctx_ctxno_zc_orient修改为一个uint型数据;

15、对结构体数组mqc_states进行优化,将结构体中的指针修改为uint数字后,其值只用为索引即可;

16、对mqc上下文解码器类型的代码块进行修改和优化。

17、在一个可选的实施方式中,所述对mqc上下文解码器类型的代码块进行修改和优化具体包括:

18、检索文档中的所有字符串,若出现了*curctx->则替换为mqc_state[curctx];若出现了opj_mqc_state_t**curctx则替换为uint curctx;

19、对函数opj_mqc_resetstates进行修改,将mqc的ctxs均初始化为0;

20、对opj_mqc_setstate进行修改,对mqc的ctxs的第ctxno赋值为mbs+prob*2。

21、在一个可选的实施方式中,所述主解码程序包含kernel函数,用于根据opencl文件中优化的代码块实现t1并行解码的过程具体包括:

22、所述kernel函数接收解码块的global参数,并根据解码块的global参数进行各项初始化;

23、初始化passno为0,passtype执行循环;

24、设需要进行的t1解码块为n个,配置kernel函数运算的global size为(n),localsize为(1,1),执行编译好的代码进行并行解码。

25、在一个可选的实施方式中,所述kernel函数接本文档来自技高网...

【技术保护点】

1.一种基于opencl的jpeg2000中t1并行解码方法,其特征在于,包括:

2.根据权利要求1所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述八种类型的t1解码相关的代码块包括:预定义类型的代码块、结构体定义类型的代码块、数组或者常量类型的代码块、t1整体解码相关类型的代码块、mqc上下文解码器类型的代码块、重要性传播解码类型的代码块、幅值细化解码类型的代码块以及标志清除解码类型的代码块。

3.根据权利要求2所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述建立八个opencl文件,分别与八种类型的t1解码相关的代码块相对应包括:

4.根据权利要求1所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述将openjpeg定义的数据类型转换为opencl支持的数据类型包括:

5.根据权利要求1所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述对opencl文件中的代码块进行优化包括:

6.根据权利要求5所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述对mqc上下文解码器类型的代码块进行修改和优化包括:

7.根据权利要求1至6中任一项所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述主解码程序包含kernel函数,用于根据opencl文件中优化的代码块实现t1并行解码的过程包括:

8.根据权利要求7所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述kernel函数接收解码块的global参数,并根据解码块的global参数进行各项初始化包括:

9.根据权利要求8所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述passtype执行循环包括:

10.一种基于opencl的jpeg2000中t1并行解码装置,其特征在于:

...

【技术特征摘要】

1.一种基于opencl的jpeg2000中t1并行解码方法,其特征在于,包括:

2.根据权利要求1所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述八种类型的t1解码相关的代码块包括:预定义类型的代码块、结构体定义类型的代码块、数组或者常量类型的代码块、t1整体解码相关类型的代码块、mqc上下文解码器类型的代码块、重要性传播解码类型的代码块、幅值细化解码类型的代码块以及标志清除解码类型的代码块。

3.根据权利要求2所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述建立八个opencl文件,分别与八种类型的t1解码相关的代码块相对应包括:

4.根据权利要求1所述的基于opencl的jpeg2000中t1并行解码方法,其特征在于,所述将openjpeg定义的数据类型转换为opencl支持的数据类型包括:

5.根据权利要求1所述的基于opencl的jpeg2000中t1并行...

【专利技术属性】
技术研发人员:谌竟成董礼冯雨汤汉兵
申请(专利权)人:芯动微电子科技武汉有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1