买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种基于opencl的jpeg2000中t1并行解码方法和装置_芯动微电子科技(武汉)有限公司_202311684975.6 

申请/专利权人:芯动微电子科技(武汉)有限公司

申请日:2023-12-11

公开(公告)日:2024-04-12

公开(公告)号:CN117389571B

主分类号:G06F8/41

分类号:G06F8/41;G06F9/50

优先权:

专利状态码:有效-授权

法律状态:2024.04.12#授权;2024.01.30#实质审查的生效;2024.01.12#公开

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

主权项:1.一种基于opencl的jpeg2000中t1并行解码方法,其特征在于,包括:建立八个opencl文件,分别与八种类型的t1解码相关的代码块相对应;依次将对应的代码块拷贝至对应的opencl文件中,将openjpeg定义的数据类型转换为opencl支持的数据类型,并对opencl文件中的代码块进行优化;所述对opencl文件中的代码块进行优化包括:对opj_mqc_state结构体进行优化,将其中指向opj_mqc_state结构体的指针修改为两个uint型成员;对opj_mqc结构体进行优化,将其中指向opj_mqc_state的指针数组ctxs优化修改为一个uint型的数组,长度和原始相同;将其中指向opj_mqc_states的指针的二级指针curctx修改为一个uint型的数据;将其中char型指针lut_ctx_ctxno_zc_orient修改为一个uint型数据;对结构体数组mqc_states进行优化,将结构体中的指针修改为uint数字后,其值只用为索引即可;对mqc上下文解码器类型的代码块进行修改和优化;所述对mqc上下文解码器类型的代码块进行修改和优化包括:检索文档中的所有字符串,若出现了*curctx-则替换为mqc_state[curctx];若出现了opj_mqc_state_t**curctx则替换为uintcurctx;对函数opj_mqc_resetstates进行修改,将mqc的ctxs均初始化为0;对opj_mqc_setstate进行修改,对mqc的ctxs的第ctxno赋值为mbs+prob*2;创建主解码程序,所述主解码程序包含kernel函数,用于根据opencl文件中优化的代码块实现t1并行解码的过程;所述kernel函数接收解码块的global参数,并根据解码块的global参数进行各项初始化;初始化passno为0,passtype执行循环;设需要进行的t1解码块为N个,配置kernel函数运算的globalsize为N,localsize为(1,1),执行编译好的代码进行并行解码;所述kernel函数接收解码块的global参数,并根据解码块的global参数进行各项初始化包括:kernel函数接收global参数:unsignedchar*cblk_data_buffer表示每个解码块的原始图像压缩数据;int*t1_data_buffer表示解码后的数据存放空间;uint*len_buffer表示每个解码块的长度;uint*real_num_passes_buffer、uint*orient_buffer、int*bpno_plus_one_buffer表示每个解码块解码过程中用到的中间参数;uint*w_buffer、uint*h_buffer表示每个解码块的解码后图像块的宽和高;uint*idx1_buffer表示每个解码块解码后数据存放位置地址相对于t1_data_buffer地址偏移量;uint*idx2_buffer表示每个解码块原始数据相对于cblk_data_buffer的地址偏移量;获取当前解码块的global_id,所述global_id对应每个解码块的global参数的索引,依据global_id依次获取每个解码块的对应global参数的值;初始化一个uint数组,用于存放解码过程中的标志位;初始化一个opj_mqc_t结构体mqc,将该mqc的lut_ctxno_zc_orient值初始化为global参数中的orient值的左移9位的值;初始化一个opj_t1_t结构体t1,其中t1的data值初始化为idx1_buffer的第global_id个值的指针,表示该解码块的解码值的存放起始位置,t1的flags值初始化为uint数组,t1的mqc值初始化为指向opj_mqc_t结构体mqc的指针;调用opj_t1_allocate_buffers函数进行二次初始化,其中,opj_t1_allocate_buffers传入的参数依次为指向t1的指针、w值和h值;调用opj_mqc_resetstates函数,该函数传入t1的mqc值;调用opj_mqc_setstate函数三次,该函数接收4个参数;第一次该函数传入4个参数依次为t1的mqc值、t1_CTXNO_UNI、0、46;第二次该函数传入4个参数依次为t1的mqc值、t1_CTXNO_AGG、0、3;第三次该函数传入4个参数依次为t1的mqc值、t1_CTXNO_ZC、0、4;其中t1_CTXNO_UNI、t1_CTXNO_AGG、t1_CTXNO_ZC为预定义值;调用函数opj_mqc_init_dec初始化t1的mqc,该函数接收5个参数,依次为t1的mqc、cblk_data_buffer、idx2_buffer数组中的第globa_id个值、len、OPJ_COMMON_CBLK_DATA_EXTRA;其中,OPJ_COMMON_CBLK_DATA_EXTRA为预定义值;当openjpeg解码至t1,用表示八个参数类型中每个参数类型所占的空间类型大小,在CPU的内存空间中提前申请8个大小为1000*字节相对应的buffer大小;openjpeg只串行的获取每个解码块的len、real_num_passes、orient、bpno_plus_one、w、h的值,将每个解码块的这6个参数值依次送入对应的buffer之中;将len_buffer中的所有值累加,累加值用total_len表示,将w_buffer、h_buffer中相同位置的值先相乘在累加,值用total_size表示;申请一块大小为total_len*4+2*4*1000字节的cblk_data_buffer内存空间大小,按顺序先存放每个解码块数据cblk_data,再存放2个空字符;申请一块大小为total_size*4字节的t1_data内存空间,用于存放每个解码块解码后数据;申请一块大小为1000*4字节的内存空间idx1_buffer,idx1_buffer用于表示每个解码块数据在cblk_data_buffer的起始位置,则其第1个值为0,后面的第i个值依次为,其中表示第i-1个解码块的长度;申请一块大小为1000*4字节的内存空间idx2_buffer,idx2_buffer用于表示每个解码块解码后数据存储位置,则其第一个值为0,后面的第i个值依次为;在支持opencl并行计算的设备device上申请大小相同的内存空间,将上述buffer数据依次从CPU搬运至支持opencl并行计算的设备device的内存空间中,采用opencl接口调用main_t1.cl中的kernel函数即可进行并行解码。

全文数据:

权利要求:

百度查询: 芯动微电子科技(武汉)有限公司 一种基于opencl的jpeg2000中t1并行解码方法和装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。

相关技术
相关技术
相关技术
相关技术