一种基于gpu的hevc并行解码方法

文档序号:7808650阅读:232来源:国知局
一种基于gpu的hevc并行解码方法
【专利摘要】本发明公开了一种基于GPU的HEVC并行解码方法,包括:GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵,同时GPU对获取的码流文件进行解析,从而得到运动矢量以及参考帧;GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差数据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值;GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本自适应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。本发明有效提高了解码速度和解码效率,可广泛应用于视频编解码领域。
【专利说明】-种基于GPU的HEVC并行解码方法

【技术领域】
[0001] 本发明涉及视频编解码领域,尤其是一种基于GPU的HEVC并行解码方法。

【背景技术】
[0002] 随着互联网和移动通信技术的快速发展,数字视频正朝着高清晰度、高帧率、高压 缩率的方向迈进,视频的格式从720P发展到1080P,在某些场合甚至出现了 4Kx2K、8Kx4K 的超高清晰数字视频。在视频应用中,传输带宽和存储空间无疑是最核心的资源,如何在 有限的空间实现高清晰视频的存储,在带宽有瓶颈的网络环境中实现良好传输,是一个大 的难题。高清晰度的视频可以给带来更高的生活质量,但这样一来必然会有庞大的数据 量。举个例子,1080Ρ高清晰视频,像素为1920X1080,4:2:0的格式,其一帧图像的数据量为 24.88Mbit。这样高清晰度的视频产生了一个难题,那就是视频码率大幅度的升高。视频编 码就是要用尽量少的比特数来表征视频信息,而当今广泛应用的H. 264编码标准的压缩效 率仍然无法充分满足超高清视频的应用需求。
[0003] HEVC (High Efficiency Video Coding)高效率视频编码是由 ISO 的 MPEG 和 ITU-T 的VCEG共同制定的下一代新的视频压缩编码方案。HEVC标准是继承了了现有的视频编码 方案H. 264的编码理念,沿用了其中的一些编码技术,并且改进了相关技术,编码单元尺寸 更大、基于块的帧间/帧内预测选择方式更加多样化、更加复杂的内插滤波器等。HEVC对比 之前的视频编码技术,有压缩效率更高、视频质量更好、健壮性更好、错误恢复能力更强、更 适合在IP网络中传输等优点。HEVC对比H. 264/AVC编码标准,在对高清晰度以及高保真的 视频图像进行编码时,压缩效率提高了一倍,这样在解码后得到重建的图像质量相同的情 况下,视频流的码率减少50 %。
[0004] 但是,码率的下降是以编解码软件的复杂度的增加作为前提的,在采用了更复杂、 更灵活的编码技术后,HEVC编解码软件的复杂度也大大增加,使得对高清晰视频进行压缩 和解压缩所花费的时间也随之增加,无法满足视频会议和可视电话等应用领域的高实时解 码播放要求。
[0005] 在高清晰视频成为主流的情况下,单纯地依靠CPU显然不能很好地实现高清晰视 频的实时解码。GPU具有优异的浮点计算能力和强大的并行计算能力,如果将解码算法中 运算量巨大,复杂度较高的模块转移到GPU上实现,则能够有效解决实时解码这个难题。然 而,目前业内还未有基于GPU的HEVC视频编解码方案出现。


【发明内容】

[0006] 为了解决上述技术问题,本发明的目的是:提供一种解码速度快和效率高的,基于 GPU的HEVC并行解码方法。
[0007] 本发明解决其技术问题所采用的技术方案是:一种基于GPU的HEVC并行解码方 法,包括:
[0008] A、GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵, 同时GPU对获取的码流文件进行解析,从而得到运动矢量以及参考帧;
[0009] B、GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差 数据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的 预测像素值;
[0010] C、GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本 自适应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。
[0011] 进一步,所述步骤B中GPU采用HEVC反变换并行算法对变换系数矩阵进行处理这 一步骤,其包括:
[0012] B11、初始化GPU,在GPU上申请用于存储变换系数矩阵和残差数据的设备端全局 内存;
[0013] B12、对线程的网格大小和线程块的大小进行设定,并根据变换单元的大小为每个 变换单元分配相应数量的线程及相应的线程ID号;
[0014] B13、读取设备端全局内存上各个变换单元所对应的变换系数矩阵,然后根据线程 ID号对每个变换系数矩阵依次进行列并行一维IDCT反变换和行并行一维IDCT反变换,从 而得到整个图像块的残差数据;
[0015] B14、将计算的各个图像块的残差数据拷贝回CPU内存,得到整个图像的残差数 据,然后释放设备端全局内存空间。
[0016] 进一步,所述步骤B13,其包括:
[0017] B131、读取设备端全局内存上各个变换单元所对应的变换系数矩阵;
[0018] B132、根据线程ID号对每个变换系数矩阵的各列同时进行一维IDCT反变换,得到 变换后的系数矩阵并将变换的结果暂存在线程块的共享内存中;
[0019] B133、根据线程ID号对共享内存中变换后的系数矩阵的每一行同时进行一维 IDCT反变换,得到残差数据矩阵,并根据残差数据矩阵计算整个图像块的残差数据。
[0020] 进一步,所述步骤B中GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参 考帧位置求取图像的预测像素值这一步骤,其包括:
[0021] S1、初始化GPU,在GPU中申请用来存储帧间预测模式每个像素点对应的运动矢 量、参考帧和预测像素值的存储空间;
[0022] S2、将运动矢量和相应的参考帧图像拷贝到设备端,同时将参考帧绑定到纹理存 储器上;
[0023] S3、进行线程配置,为每个预测像素值的处理分配一个线程ID号,在设备端开辟 用来存储预测像素值的全局内存空间;
[0024] S4、各个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接 纹理读取或插值滤波处理,从而得到各个线程的像素预测值;
[0025] S5、将各个线程的像素预测值拷贝回CPU内存,然后释放设备端的全局内存空间。
[0026] 进一步,所述步骤S4,其具体为:
[0027] 每个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接读取 或插值滤波处理:若该线程的运动矢量指向的是整像素值位置,则直接读取纹理存储器中 该运动矢量所指向的参考帧位置上的像素值,并以读取的像素值作为该线程的像素预测 值;若该线程的运动矢量指向的是分像素位置,则根据分像素点的位置选择相应的亮度或 色度分像素插值滤波公式进行计算,从而得到该线程的像素预测值。
[0028] 进一步,所述亮度分像素插值滤波公式为8点插值滤波公式,所述度分像素插值 滤波公式为4点插值滤波公式。
[0029] 本发明的有益效果是:构建了由CPU和GPU组成的解码架构,将解码复杂度较高的 反变换处理和运动补偿处理转移到GPU上实现,并设计了基于GPU的HEVC反变换并行算法 和HEVC运动补偿并行算法,有效提高了解码速度和解码效率。

【专利附图】

【附图说明】
[0030] 下面结合附图和实施例对本发明作进一步说明。
[0031] 图1为本发明一种基于GPU的HEVC并行解码方法的步骤流程图;
[0032] 图2为本发明步骤B中GPU采用HEVC反变换并行算法对变换系数矩阵进行处理 的流程图;
[0033] 图3为本发明步骤B13的流程图;
[0034] 图4为本发明步骤B中GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参 考帧位置求取图像的预测像素值的流程图;
[0035] 图5为本发明实施例一的HEVC解码框架图;
[0036] 图6为本发明亮度的分像素内插示意图。

【具体实施方式】
[0037] 参照图1,一种基于GPU的HEVC并行解码方法,包括:
[0038] A、GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵, 同时GPU对获取的码流文件进行解析,从而得到运动矢量以及参考帧;
[0039] B、GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差 数据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的 预测像素值;
[0040] C、GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本 自适应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。
[0041] 参照图2,进一步作为优选的实施方式,所述步骤B中GPU采用HEVC反变换并行算 法对变换系数矩阵进行处理这一步骤,其包括:
[0042] B11、初始化GPU,在GPU上申请用于存储变换系数矩阵和残差数据的设备端全局 内存;
[0043] B12、对线程的网格大小和线程块的大小进行设定,并根据变换单元的大小为每个 变换单元分配相应数量的线程及相应的线程ID号;
[0044] B13、读取设备端全局内存上各个变换单元所对应的变换系数矩阵,然后根据线程 ID号对每个变换系数矩阵依次进行列并行一维IDCT反变换和行并行一维IDCT反变换,从 而得到整个图像块的残差数据;
[0045] B14、将计算的各个图像块的残差数据拷贝回CPU内存,得到整个图像的残差数 据,然后释放设备端全局内存空间。
[0046] 其中,线程的网格大小设定为Grid(4, 4, 1),线程块的大小设定为 Block (16, 16, 1),即一个Grid分配16个Block,每个Block分配256个线程。而线程的数 量则根据变换单元的大小相应地进行分配。图像块由至少一个变换单元组成,而图像则由 至少一个图像块组成。
[0047] 参照图3,进一步作为优选的实施方式,所述步骤B13,其包括:
[0048] B131、读取设备端全局内存上各个变换单元所对应的变换系数矩阵;
[0049] B132、根据线程ID号对每个变换系数矩阵的各列同时进行一维IDCT反变换,得到 变换后的系数矩阵并将变换的结果暂存在线程块的共享内存中;
[0050] B133、根据线程ID号对共享内存中变换后的系数矩阵的每一行同时进行一维 IDCT反变换,得到残差数据矩阵,并根据残差数据矩阵计算整个图像块的残差数据。
[0051] 参照图4,进一步作为优选的实施方式,所述步骤B中GPU采用HEVC运动补偿并行 算法,根据运动矢量指向的参考帧位置求取图像的预测像素值这一步骤,其包括:
[0052] S1、初始化GPU,在GPU中申请用来存储帧间预测模式每个像素点对应的运动矢 量、参考帧和预测像素值的存储空间;
[0053] S2、将运动矢量和相应的参考帧图像拷贝到设备端,同时将参考帧绑定到纹理存 储器上;
[0054] S3、进行线程配置,为每个预测像素值的处理分配一个线程ID号,在设备端开辟 用来存储预测像素值的全局内存空间;
[0055] S4、各个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接 纹理读取或插值滤波处理,从而得到各个线程的像素预测值;
[0056] S5、将各个线程的像素预测值拷贝回CPU内存,然后释放设备端的全局内存空间。
[0057] 进一步作为优选的实施方式,所述步骤S4,其具体为:
[0058] 每个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接读取 或插值滤波处理:若该线程的运动矢量指向的是整像素值位置,则直接读取纹理存储器中 该运动矢量所指向的参考帧位置上的像素值,并以读取的像素值作为该线程的像素预测 值;若该线程的运动矢量指向的是分像素位置,则根据分像素点的位置选择相应的亮度或 色度分像素插值滤波公式进行计算,从而得到该线程的像素预测值。
[0059] 其中,读取纹理存储器中该运动矢量所指向的参考帧位置上的像素值,通过调用 纹理提取函数tex2D〇函数来实现。
[0060] 进一步作为优选的实施方式,所述亮度分像素插值滤波公式为8点插值滤波公 式,所述度分像素插值滤波公式为4点插值滤波公式。
[0061] 下面结合具体的实施例对本发明作进一步详细说明。
[0062] 实施例一
[0063] 参照图5,本发明的第一实施例:
[0064] HEVC解码框架如图5所示。HEVC解码过程就是编码过程的逆向化,解码器读取码 流文件,从NAL(网络抽象层)中获得比特流,解码是按一帧一帧顺序进行的,一帧图像划 分成若干个最大编码单元LCU,以光栅扫描的顺序,以LCU为基本单位进行熵解码,然后进 行重排序,从而得到相应编码单元的残差系数;接着对残差系数进行反量化和反变换,从而 得到图像残差数据。与此同时,解码器根据从码流中解码得到的头信息生成预测块:若是帧 间预测模式,则根据运动矢量和参考帧生成相应的一个预测块;若是帧内预测模式,则从相 邻的预测单元生成一个预测块。接着,预测块数据与残差块数据求和得到重构的图像块数 据,最后图像块数据通过去方块滤波和样本自适应补偿处理后得到重建图像并输出。
[0065] 运动补偿描述了编码关系上相邻帧的差别,也就是说描述了前面参考帧的宏块如 何移动到当前帧中的某个位置上去,根据运动矢量指向的参考帧的等大小预测块的值和残 差值相加得到重建值。这种方法经常被视频编解码器用来减少视频序列中的时域冗余。运 动补偿用于图像重建,是视频编编解码中必不可少的关键模块。
[0066] 运动补偿就是一帧图像根据图像纹理划分为大小不等的编码单元,在编码单元的 基础上划分预测单元,预测单元包括一个亮度块和两个色度块,帧间编码宏块的每个宏块 就是从参考图像的某一相同大小的宏块预测得到的。运动补偿精度由运动矢量的精度决 定,其直接关系到重建图像质量以及码流的大小。运动矢量是预测的过程中平移的大小,是 在对编码端运动进行估计而得出的。运动矢量的精度越高,运动补偿的精确度越高。插值 滤波则是运动补偿中是一个非常关键的技术,H. 264标准采用的是六抽头的维纳滤波器,其 运动补偿精度为1/4像素精度。而HEVC采用了更加先进高效的插值滤波器,也就是基于离 散余弦变换的插值滤波器。相比之下,HEVC标准中亚像素的生成更加简洁高效,只需要一个 滤波公式,进行一次滤波处理就可以了。亮度信号使用的是基于DCT离散余弦变换的8点 插值滤波器,而色度信号使用的是基于DCT离散余弦变换的4点插值滤波器,进行像素的内 插。但大量的插值计算导致复杂度相应提高,编码效率会较低。参考帧中分像素位置的亮 度和色度像素实际上是不存在的,因此需要通过插值滤波算法进行像素内插得到分像素位 置的像素值,这种运动补偿属于亚像素精度的运动补偿。
[0067] 实施例二
[0068] 本实施例对本发明的HEVC反变换并行算法过程进行说明。
[0069] 反变换模块是将当前块的变换系数矩阵转换为残差样值矩阵的一个过程,并为后 续的重构做好准备。反变换是在反量化处理后进行的,同样是以TU变换单元为基本单位进 行处理的,其所用的源数据就是反量化的结果。本发明的HEVC解码器进行二维IDCT反变 换时,首先进行水平方向上的一维IDCT反离散余弦变换,然后进行垂直方向上的一维IDCT 反离散余弦变换,最后再通过矩阵相乘,将变换系数矩阵转换成同样大小的残差数据矩阵, 从而完成频域到时域的变换。
[0070] -帧图像中不同变换块的IDCT运算是相互独立的,而同一变换单元上的变换系 数矩阵进行水平方向上的一维IDCT变换时,各列是相互独立的,因此可以实现各列的并行 计算。同样地,进行垂直方向上的一维IDCT反变换时,各行之间并不存在数据的相关性,因 此能够实现并行计算。本发明根据变换系数矩阵的大小分配相应的线程数进行处理,每一 列分配一个线程同时进行处理,各列同时进行一维IDCT反变换,处理完毕后,每一行分配 一个线程同时进行一维IDCT反变换计算,完成后即实现了对变换系数矩阵的二维IDCT反 变换并行处理。
[0071] 由于HEVC变换单元的大小为4x4, 8x8, 16x16或32x32。变换单元越大,则并行程 度越高,加速效果越明显。例如,对32x32变换单元对应的变换系数矩阵,首先可以同时进 行32列的一维IDCT反变换,完成后调用syncthreads ()函数进行同步,然后再同时进行32 行的一维IDCT反变换。此外,还可以对各个变换单元对应的变换系数矩阵同时进行IDCT 反变换。为了得到更好的加速效果,本发明直接利用反量化并行处理后得到的在全局内存 空间的变换系数。变换单元包括一个亮度变换块和两个色度变换块,因此,需要分别进行亮 度和色度的反变换,二者的步骤是相同的。
[0072] 本发明基于GPU的反变换算法包括:
[0073] (1)解码开始阶段,初始化GPU,在GPU上申请用于存储经过反变换后得到的残差数 据的全局内存空间,同时直接从全局内存空间读取在GTO上进行反量化后得到的变换系数。
[0074] (2)进行线程数量的配置,配置线程网格大小为Grid(4, 4, 1),线程块大小为 Block (16, 16, 1),即一个Grid分配16个Block,每个Block分配256个线程,接着根据变 换单元的大小相应分配线程数量。
[0075] (3)为一个变换单元对应的变换系数矩阵分配给一个线程块进行反变换处理:首 先每个线程依据自身的线程ID号对变换系数矩阵的每一列对应进行一维IDCT反变换,各 列同时进行,并且调用syncthreads ()函数进行同步,所得到的结果暂存在线程块中的共 享内存中;然后对共享内存中系数矩阵中的每一行同时进行一维IDCT反变换,为一行分配 一个线程进行处理,从而完成了对变换系数的二维IDCT反变换,并得到残差数据矩阵。对 各个变换单元对应的变换系数矩阵同时进行反变换处理,得到的就是整个图像块的残差数 据。
[0076] (4)将计算得到的各个图像块的残差数据从GPU全局内存空间复制到CPU的内存 中,从而得到整个图像的残差数据。
[0077] (5)释放解码过程中分配的全局内存空间。
[0078] 实施例三
[0079] 本实施例对本发明的HEVC运动补偿并行算法过程进行说明。
[0080] 帧间运动补偿的实现原理,简单地说,就是通过码流解析得到的运动矢量,根据在 参考帧上指向的位置求得预测值,指向的是参考帧的整像素点位置则直接读取,若是分像 素点位置则需要经过像素内插得到分像素预测值,然后将预测值和经过反量化、反变换得 到的图像残差值相加即得到图像重建值。运动补偿模块中,对像素插值滤波的计算大概占 据了 70%的运算量。所以本发明的运动补偿在GPU上的实现主要是进行像素内插。运动矢 量本来是连续的,但进行帧间预测运动补偿时,为了提高编码过程中视频图像帧间预测的 准确度,在搜索匹配块时,运动矢量是分像素精度的,亮度运动矢量的精度为1/4像素,而 色度运动矢量则为1/8像素精度。因此,当运动矢量指向为参考帧的分像素位置时,需要根 据周边像素值进行内插得到对应位置的像素值。
[0081] 其中,亮度分像素进行插值滤波所用到的系数如表1所示。
[0082] 表1亮度像素插值滤波所用到的系数
[0083]

【权利要求】
1. 一种基于GPU的HEVC并行解码方法,其特征在于:包括: A、 GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵,同时 对获取的码流文件进行解析,从而得到运动矢量以及参考帧; B、 GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差数 据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预 测像素值; C、 GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本自适 应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。
2. 根据权利要求1所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述步骤 B中GPU采用HEVC反变换并行算法对变换系数矩阵进行处理这一步骤,其包括: B11、初始化GPU,在GPU上申请用于存储变换系数矩阵和残差数据的设备端全局内存; B12、对线程的网格大小和线程块的大小进行设定,并根据变换单元的大小为每个变换 单元分配相应数量的线程及相应的线程ID号; B13、读取设备端全局内存上各个变换单元所对应的变换系数矩阵,然后根据线程ID 号对每个变换系数矩阵依次进行列并行一维IDCT反变换和行并行一维IDCT反变换,从而 得到整个图像块的残差数据; B14、将计算的各个图像块的残差数据拷贝回CPU内存,得到整个图像的残差数据,然 后释放设备端全局内存空间。
3. 根据权利要求2所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述步骤 B13,其包括: B131、读取设备端全局内存上各个变换单元所对应的变换系数矩阵; B132、根据线程ID号对每个变换系数矩阵的各列同时进行一维IDCT反变换,得到变换 后的系数矩阵并将变换的结果暂存在线程块的共享内存中; B133、根据线程ID号对共享内存中变换后的系数矩阵的每一行同时进行一维IDCT反 变换,得到残差数据矩阵,并根据残差数据矩阵计算整个图像块的残差数据。
4. 根据权利要求1所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述步骤 B中GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像 素值这一步骤,其包括: 51、 初始化GPU,在GPU中申请用来存储帧间预测模式每个像素点对应的运动矢量、参 考帧和预测像素值的存储空间; 52、 将运动矢量和相应的参考帧图像拷贝到设备端,同时将参考帧绑定到纹理存储器 上; 53、 进行线程配置,为每个预测像素值的处理分配一个线程ID号,在设备端开辟用来 存储预测像素值的全局内存空间; 54、 各个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接纹理 读取或插值滤波处理,从而得到各个线程的像素预测值; 55、 将各个线程的像素预测值拷贝回CPU内存,然后释放设备端的全局内存空间。
5. 根据权利要求4所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述步骤 S4,其具体为: 每个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接读取或插 值滤波处理:若该线程的运动矢量指向的是整像素值位置,则直接读取纹理存储器中该运 动矢量所指向的参考帧位置上的像素值,并以读取的像素值作为该线程的像素预测值;若 该线程的运动矢量指向的是分像素位置,则根据分像素点的位置选择相应的亮度或色度分 像素插值滤波公式进行计算,从而得到该线程的像素预测值。
6.根据权利要求5所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述亮度 分像素插值滤波公式为8点插值滤波公式,所述度分像素插值滤波公式为4点插值滤波公 式。
【文档编号】H04N19/44GK104125466SQ201410328646
【公开日】2014年10月29日 申请日期:2014年7月10日 优先权日:2014年7月10日
【发明者】梁凡, 罗林 申请人:中山大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1