CN104125466A - 一种基于gpu的hevc并行解码方法 - Google Patents
一种基于gpu的hevc并行解码方法 Download PDFInfo
- Publication number
- CN104125466A CN104125466A CN201410328646.2A CN201410328646A CN104125466A CN 104125466 A CN104125466 A CN 104125466A CN 201410328646 A CN201410328646 A CN 201410328646A CN 104125466 A CN104125466 A CN 104125466A
- Authority
- CN
- China
- Prior art keywords
- gpu
- thread
- pixel
- hevc
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000012545 processing Methods 0.000 title claims abstract description 17
- 230000033001 locomotion Effects 0.000 claims abstract description 81
- 230000009466 transformation Effects 0.000 claims abstract description 60
- 239000011159 matrix material Substances 0.000 claims abstract description 54
- 239000013598 vector Substances 0.000 claims abstract description 52
- 238000001914 filtration Methods 0.000 claims abstract description 34
- 230000003044 adaptive effect Effects 0.000 claims abstract description 5
- 238000003860 storage Methods 0.000 claims description 11
- 238000013139 quantization Methods 0.000 abstract description 9
- 238000006243 chemical reaction Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000004513 sizing Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种基于GPU的HEVC并行解码方法,包括:GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵,同时GPU对获取的码流文件进行解析,从而得到运动矢量以及参考帧;GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差数据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值;GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本自适应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。本发明有效提高了解码速度和解码效率,可广泛应用于视频编解码领域。
Description
技术领域
本发明涉及视频编解码领域,尤其是一种基于GPU的HEVC并行解码方法。
背景技术
随着互联网和移动通信技术的快速发展,数字视频正朝着高清晰度、高帧率、高压缩率的方向迈进,视频的格式从720P发展到1080P,在某些场合甚至出现了4Kx2K、8Kx4K的超高清晰数字视频。在视频应用中,传输带宽和存储空间无疑是最核心的资源,如何在有限的空间实现高清晰视频的存储,在带宽有瓶颈的网络环境中实现良好传输,是一个大的难题。高清晰度的视频可以给带来更高的生活质量,但这样一来必然会有庞大的数据量。举个例子,1080P高清晰视频,像素为1920X1080,4:2:0的格式,其一帧图像的数据量为24.88Mbit。这样高清晰度的视频产生了一个难题,那就是视频码率大幅度的升高。视频编码就是要用尽量少的比特数来表征视频信息,而当今广泛应用的H.264编码标准的压缩效率仍然无法充分满足超高清视频的应用需求。
HEVC(High Efficiency Video Coding)高效率视频编码是由ISO的MPEG和ITU-T的VCEG共同制定的下一代新的视频压缩编码方案。HEVC标准是继承了了现有的视频编码方案H.264的编码理念,沿用了其中的一些编码技术,并且改进了相关技术,编码单元尺寸更大、基于块的帧间/帧内预测选择方式更加多样化、更加复杂的内插滤波器等。HEVC对比之前的视频编码技术,有压缩效率更高、视频质量更好、健壮性更好、错误恢复能力更强、更适合在IP网络中传输等优点。HEVC对比H.264/AVC编码标准,在对高清晰度以及高保真的视频图像进行编码时,压缩效率提高了一倍,这样在解码后得到重建的图像质量相同的情况下,视频流的码率减少50%。
但是,码率的下降是以编解码软件的复杂度的增加作为前提的,在采用了更复杂、更灵活的编码技术后,HEVC编解码软件的复杂度也大大增加,使得对高清晰视频进行压缩和解压缩所花费的时间也随之增加,无法满足视频会议和可视电话等应用领域的高实时解码播放要求。
在高清晰视频成为主流的情况下,单纯地依靠CPU显然不能很好地实现高清晰视频的实时解码。GPU具有优异的浮点计算能力和强大的并行计算能力,如果将解码算法中运算量巨大,复杂度较高的模块转移到GPU上实现,则能够有效解决实时解码这个难题。然而,目前业内还未有基于GPU的HEVC视频编解码方案出现。
发明内容
为了解决上述技术问题,本发明的目的是:提供一种解码速度快和效率高的,基于GPU的HEVC并行解码方法。
本发明解决其技术问题所采用的技术方案是:一种基于GPU的HEVC并行解码方法,包括:
A、GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵,同时GPU对获取的码流文件进行解析,从而得到运动矢量以及参考帧;
B、GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差数据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值;
C、GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本自适应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。
进一步,所述步骤B中GPU采用HEVC反变换并行算法对变换系数矩阵进行处理这一步骤,其包括:
B11、初始化GPU,在GPU上申请用于存储变换系数矩阵和残差数据的设备端全局内存;
B12、对线程的网格大小和线程块的大小进行设定,并根据变换单元的大小为每个变换单元分配相应数量的线程及相应的线程ID号;
B13、读取设备端全局内存上各个变换单元所对应的变换系数矩阵,然后根据线程ID号对每个变换系数矩阵依次进行列并行一维IDCT反变换和行并行一维IDCT反变换,从而得到整个图像块的残差数据;
B14、将计算的各个图像块的残差数据拷贝回CPU内存,得到整个图像的残差数据,然后释放设备端全局内存空间。
进一步,所述步骤B13,其包括:
B131、读取设备端全局内存上各个变换单元所对应的变换系数矩阵;
B132、根据线程ID号对每个变换系数矩阵的各列同时进行一维IDCT反变换,得到变换后的系数矩阵并将变换的结果暂存在线程块的共享内存中;
B133、根据线程ID号对共享内存中变换后的系数矩阵的每一行同时进行一维IDCT反变换,得到残差数据矩阵,并根据残差数据矩阵计算整个图像块的残差数据。
进一步,所述步骤B中GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值这一步骤,其包括:
S1、初始化GPU,在GPU中申请用来存储帧间预测模式每个像素点对应的运动矢量、参考帧和预测像素值的存储空间;
S2、将运动矢量和相应的参考帧图像拷贝到设备端,同时将参考帧绑定到纹理存储器上;
S3、进行线程配置,为每个预测像素值的处理分配一个线程ID号,在设备端开辟用来存储预测像素值的全局内存空间;
S4、各个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接纹理读取或插值滤波处理,从而得到各个线程的像素预测值;
S5、将各个线程的像素预测值拷贝回CPU内存,然后释放设备端的全局内存空间。
进一步,所述步骤S4,其具体为:
每个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接读取或插值滤波处理:若该线程的运动矢量指向的是整像素值位置,则直接读取纹理存储器中该运动矢量所指向的参考帧位置上的像素值,并以读取的像素值作为该线程的像素预测值;若该线程的运动矢量指向的是分像素位置,则根据分像素点的位置选择相应的亮度或色度分像素插值滤波公式进行计算,从而得到该线程的像素预测值。
进一步,所述亮度分像素插值滤波公式为8点插值滤波公式,所述度分像素插值滤波公式为4点插值滤波公式。
本发明的有益效果是:构建了由CPU和GPU组成的解码架构,将解码复杂度较高的反变换处理和运动补偿处理转移到GPU上实现,并设计了基于GPU的HEVC反变换并行算法和HEVC运动补偿并行算法,有效提高了解码速度和解码效率。
附图说明
下面结合附图和实施例对本发明作进一步说明。
图1为本发明一种基于GPU的HEVC并行解码方法的步骤流程图;
图2为本发明步骤B中GPU采用HEVC反变换并行算法对变换系数矩阵进行处理的流程图;
图3为本发明步骤B13的流程图;
图4为本发明步骤B中GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值的流程图;
图5为本发明实施例一的HEVC解码框架图;
图6为本发明亮度的分像素内插示意图。
具体实施方式
参照图1,一种基于GPU的HEVC并行解码方法,包括:
A、GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵,同时GPU对获取的码流文件进行解析,从而得到运动矢量以及参考帧;
B、GPU采用HEVC反变换并行算法对变换系数矩阵进行处理,从而得到图像的残差数据,同时GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值;
C、GPU将图像的残差数据与图像的预测像素值依次进行求和、去方块滤波和样本自适应补偿处理,从而得到重建图像,并将重建图像的像素值拷贝到CPU的内存中。
参照图2,进一步作为优选的实施方式,所述步骤B中GPU采用HEVC反变换并行算法对变换系数矩阵进行处理这一步骤,其包括:
B11、初始化GPU,在GPU上申请用于存储变换系数矩阵和残差数据的设备端全局内存;
B12、对线程的网格大小和线程块的大小进行设定,并根据变换单元的大小为每个变换单元分配相应数量的线程及相应的线程ID号;
B13、读取设备端全局内存上各个变换单元所对应的变换系数矩阵,然后根据线程ID号对每个变换系数矩阵依次进行列并行一维IDCT反变换和行并行一维IDCT反变换,从而得到整个图像块的残差数据;
B14、将计算的各个图像块的残差数据拷贝回CPU内存,得到整个图像的残差数据,然后释放设备端全局内存空间。
其中,线程的网格大小设定为Grid(4,4,1),线程块的大小设定为Block(16,16,1),即一个Grid分配16个Block,每个Block分配256个线程。而线程的数量则根据变换单元的大小相应地进行分配。图像块由至少一个变换单元组成,而图像则由至少一个图像块组成。
参照图3,进一步作为优选的实施方式,所述步骤B13,其包括:
B131、读取设备端全局内存上各个变换单元所对应的变换系数矩阵;
B132、根据线程ID号对每个变换系数矩阵的各列同时进行一维IDCT反变换,得到变换后的系数矩阵并将变换的结果暂存在线程块的共享内存中;
B133、根据线程ID号对共享内存中变换后的系数矩阵的每一行同时进行一维IDCT反变换,得到残差数据矩阵,并根据残差数据矩阵计算整个图像块的残差数据。
参照图4,进一步作为优选的实施方式,所述步骤B中GPU采用HEVC运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值这一步骤,其包括:
S1、初始化GPU,在GPU中申请用来存储帧间预测模式每个像素点对应的运动矢量、参考帧和预测像素值的存储空间;
S2、将运动矢量和相应的参考帧图像拷贝到设备端,同时将参考帧绑定到纹理存储器上;
S3、进行线程配置,为每个预测像素值的处理分配一个线程ID号,在设备端开辟用来存储预测像素值的全局内存空间;
S4、各个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接纹理读取或插值滤波处理,从而得到各个线程的像素预测值;
S5、将各个线程的像素预测值拷贝回CPU内存,然后释放设备端的全局内存空间。
进一步作为优选的实施方式,所述步骤S4,其具体为:
每个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接读取或插值滤波处理:若该线程的运动矢量指向的是整像素值位置,则直接读取纹理存储器中该运动矢量所指向的参考帧位置上的像素值,并以读取的像素值作为该线程的像素预测值;若该线程的运动矢量指向的是分像素位置,则根据分像素点的位置选择相应的亮度或色度分像素插值滤波公式进行计算,从而得到该线程的像素预测值。
其中,读取纹理存储器中该运动矢量所指向的参考帧位置上的像素值,通过调用纹理提取函数tex2D()函数来实现。
进一步作为优选的实施方式,所述亮度分像素插值滤波公式为8点插值滤波公式,所述度分像素插值滤波公式为4点插值滤波公式。
下面结合具体的实施例对本发明作进一步详细说明。
实施例一
参照图5,本发明的第一实施例:
HEVC解码框架如图5所示。HEVC解码过程就是编码过程的逆向化,解码器读取码流文件,从NAL(网络抽象层)中获得比特流,解码是按一帧一帧顺序进行的,一帧图像划分成若干个最大编码单元LCU,以光栅扫描的顺序,以LCU为基本单位进行熵解码,然后进行重排序,从而得到相应编码单元的残差系数;接着对残差系数进行反量化和反变换,从而得到图像残差数据。与此同时,解码器根据从码流中解码得到的头信息生成预测块:若是帧间预测模式,则根据运动矢量和参考帧生成相应的一个预测块;若是帧内预测模式,则从相邻的预测单元生成一个预测块。接着,预测块数据与残差块数据求和得到重构的图像块数据,最后图像块数据通过去方块滤波和样本自适应补偿处理后得到重建图像并输出。
运动补偿描述了编码关系上相邻帧的差别,也就是说描述了前面参考帧的宏块如何移动到当前帧中的某个位置上去,根据运动矢量指向的参考帧的等大小预测块的值和残差值相加得到重建值。这种方法经常被视频编解码器用来减少视频序列中的时域冗余。运动补偿用于图像重建,是视频编编解码中必不可少的关键模块。
运动补偿就是一帧图像根据图像纹理划分为大小不等的编码单元,在编码单元的基础上划分预测单元,预测单元包括一个亮度块和两个色度块,帧间编码宏块的每个宏块就是从参考图像的某一相同大小的宏块预测得到的。运动补偿精度由运动矢量的精度决定,其直接关系到重建图像质量以及码流的大小。运动矢量是预测的过程中平移的大小,是在对编码端运动进行估计而得出的。运动矢量的精度越高,运动补偿的精确度越高。插值滤波则是运动补偿中是一个非常关键的技术,H.264标准采用的是六抽头的维纳滤波器,其运动补偿精度为1/4像素精度。而HEVC采用了更加先进高效的插值滤波器,也就是基于离散余弦变换的插值滤波器。相比之下,HEVC标准中亚像素的生成更加简洁高效,只需要一个滤波公式,进行一次滤波处理就可以了。亮度信号使用的是基于DCT离散余弦变换的8点插值滤波器,而色度信号使用的是基于DCT离散余弦变换的4点插值滤波器,进行像素的内插。但大量的插值计算导致复杂度相应提高,编码效率会较低。参考帧中分像素位置的亮度和色度像素实际上是不存在的,因此需要通过插值滤波算法进行像素内插得到分像素位置的像素值,这种运动补偿属于亚像素精度的运动补偿。
实施例二
本实施例对本发明的HEVC反变换并行算法过程进行说明。
反变换模块是将当前块的变换系数矩阵转换为残差样值矩阵的一个过程,并为后续的重构做好准备。反变换是在反量化处理后进行的,同样是以TU变换单元为基本单位进行处理的,其所用的源数据就是反量化的结果。本发明的HEVC解码器进行二维IDCT反变换时,首先进行水平方向上的一维IDCT反离散余弦变换,然后进行垂直方向上的一维IDCT反离散余弦变换,最后再通过矩阵相乘,将变换系数矩阵转换成同样大小的残差数据矩阵,从而完成频域到时域的变换。
一帧图像中不同变换块的IDCT运算是相互独立的,而同一变换单元上的变换系数矩阵进行水平方向上的一维IDCT变换时,各列是相互独立的,因此可以实现各列的并行计算。同样地,进行垂直方向上的一维IDCT反变换时,各行之间并不存在数据的相关性,因此能够实现并行计算。本发明根据变换系数矩阵的大小分配相应的线程数进行处理,每一列分配一个线程同时进行处理,各列同时进行一维IDCT反变换,处理完毕后,每一行分配一个线程同时进行一维IDCT反变换计算,完成后即实现了对变换系数矩阵的二维IDCT反变换并行处理。
由于HEVC变换单元的大小为4x4,8x8,16x16或32x32。变换单元越大,则并行程度越高,加速效果越明显。例如,对32x32变换单元对应的变换系数矩阵,首先可以同时进行32列的一维IDCT反变换,完成后调用syncthreads()函数进行同步,然后再同时进行32行的一维IDCT反变换。此外,还可以对各个变换单元对应的变换系数矩阵同时进行IDCT反变换。为了得到更好的加速效果,本发明直接利用反量化并行处理后得到的在全局内存空间的变换系数。变换单元包括一个亮度变换块和两个色度变换块,因此,需要分别进行亮度和色度的反变换,二者的步骤是相同的。
本发明基于GPU的反变换算法包括:
(1)解码开始阶段,初始化GPU,在GPU上申请用于存储经过反变换后得到的残差数据的全局内存空间,同时直接从全局内存空间读取在GPU上进行反量化后得到的变换系数。
(2)进行线程数量的配置,配置线程网格大小为Grid(4,4,1),线程块大小为Block(16,16,1),即一个Grid分配16个Block,每个Block分配256个线程,接着根据变换单元的大小相应分配线程数量。
(3)为一个变换单元对应的变换系数矩阵分配给一个线程块进行反变换处理:首先每个线程依据自身的线程ID号对变换系数矩阵的每一列对应进行一维IDCT反变换,各列同时进行,并且调用syncthreads()函数进行同步,所得到的结果暂存在线程块中的共享内存中;然后对共享内存中系数矩阵中的每一行同时进行一维IDCT反变换,为一行分配一个线程进行处理,从而完成了对变换系数的二维IDCT反变换,并得到残差数据矩阵。对各个变换单元对应的变换系数矩阵同时进行反变换处理,得到的就是整个图像块的残差数据。
(4)将计算得到的各个图像块的残差数据从GPU全局内存空间复制到CPU的内存中,从而得到整个图像的残差数据。
(5)释放解码过程中分配的全局内存空间。
实施例三
本实施例对本发明的HEVC运动补偿并行算法过程进行说明。
帧间运动补偿的实现原理,简单地说,就是通过码流解析得到的运动矢量,根据在参考帧上指向的位置求得预测值,指向的是参考帧的整像素点位置则直接读取,若是分像素点位置则需要经过像素内插得到分像素预测值,然后将预测值和经过反量化、反变换得到的图像残差值相加即得到图像重建值。运动补偿模块中,对像素插值滤波的计算大概占据了70%的运算量。所以本发明的运动补偿在GPU上的实现主要是进行像素内插。运动矢量本来是连续的,但进行帧间预测运动补偿时,为了提高编码过程中视频图像帧间预测的准确度,在搜索匹配块时,运动矢量是分像素精度的,亮度运动矢量的精度为1/4像素,而色度运动矢量则为1/8像素精度。因此,当运动矢量指向为参考帧的分像素位置时,需要根据周边像素值进行内插得到对应位置的像素值。
其中,亮度分像素进行插值滤波所用到的系数如表1所示。
表1 亮度像素插值滤波所用到的系数
分像素位置 | 插值滤波系数 |
1/4像素 | {-1,4,-10,58,17,-5,1,0} |
2/4像素 | {-1,4,-11,40,40,-11,4,-1} |
3/4像素 | {0,1,-5,17,58,-10,4,-1} |
图6中所示为亮度整像素点位置和通过插值出来的分像素点位置,大写字母代表的位置是整像素点,小写字母代表的是亚像素点。
HEVC标准软件中,通过参数表中xFracL和yFracL确定像素点的位置,xFracL实际意义上表示运动矢量的水平分量的小数部分,yFracL实际代表运动矢量的垂直分量上的小数部分,两者结合在一起在HEVC标准中代表着像素的位置,xFracL和yFracL都为0代表指的位置为整像素点位置,其余则为分像素位置。通过确定位置选择相应的插值系数和参考帧中的邻近像素进行内插得到对应位置的像素值。xFracL和yFracL与图6中像素点的位置对应如表2所示。
表2 亮度像素点位置映射关系
亮度像素内插需要根据分像素点的位置的值来选择相应的插值系数进行求解,与整像素点处于同一水平位置的a0,0,b0,0,c0,0对应处于1/4,2/4,3/4像素点位置,根据表1中的系数以及A-3,0,A-2,0,A-1,0,A0,0,A1,0,A2,0,A3,0,A4,O这几个整像素点进行计算得出。其中,变量shift1等于(BitDepthY-8),shift2设置为6和shift3设置成(14-BitDepthY)。具体计算公式为:
a0,0=(-A-3,0+4*A-2,0-10*A-1,0+58*A0,0+17*A1,0-5*A2,0+A3,0)>>shift1
b0,0=(-A-3,0+4*A-2,0-11*A-1,0+40*A0,0+40*A1,0-11*A2,0+4*A3,0-A4,0)>>shift1
c0,0=(A-2,0-5*A-1,0+17*A0,0+58*A1,0-10*A2,0+4*A3,0-A4,0)>>shift1
而d0,0,h0,0以及n0,0对应垂直方向上的1/4,2/4,3/4位置上的像素点,进行像素内插时还需要知道处于同一垂直位置的整像素点,其插值计算为:
d0,0=(-A0,-3+4*A0,-2-10*A0,-1+58*A0,0+17*A0,1-5*A0,2+A0,3)>>shift1
h0,0=(-A0,-3+4*A0,-2-11*A0,-1+40*A0,0+40*A0,1-11*A0,2+4*A0,3-A0,-4)>>shift1
n0,0=(A0,-2-5*A0,-1+17*A0,0+58*A0,1-10*A0,2+4*A0,3-A0,-4)>>shift1
a0,0,b0,0,c0,0,d0,0,h0,0以及n0,0像素值可以直接由整像素点和插值滤波系数一步推出,当运动矢量指向这些位置的像素点,根据上面的算法可求得对应的像素值。
而处于其它位置的分像素点的值则需要分两步进行才能求得。
e0,0,i0,0,p0,0的像素值的计算。首先按照前面求与整像素处于同一水平或同一垂直位置的分像素点位置的值求得a0,-3,a0,-2,a0,-1,a0,0,a0,1,a0,2,a0,3,a0,4的值,然后再进行如下计算可得出:
e0,0=(-a0,-3+4*a0,-2-10*a0,-1+58*a0,0+17*a0,1-5*a0,2+a0,3)>>shift2
i0,0=(-a0,-3+4*a0,-2-11*a0,-1+40*a0,0+40*a0,1-11*a0,2+4*a0,3-a0,4)>>shift2
p0,0=(a0,-2-5*a0,-1+17*a0,0+58*a0,1-10*a0,2+4*a0,3-a0,4)>>shift2
f0,0,j0,0,q0,0像素值的计算,同样需要先求得b0,-3,b0,-2,b0,-1,b0,0,b0,1,b0,2,b0,3,b0,4的值,然后再利用插值滤波参数进行如下处理:
f0,0=(-b0,-3+4*b0,-2-10*b0,-1+58*b0,0+17*b0,1-5*b0,2+b0,3)>>shift2
j0,0=(-b0,-3+4*b0,-2-11*b0,-1+40*b0,0+40*b0,1-11*b0,2+4*b0,3-b0,4)>>shift2
q0,0=(b0,-2-5*b0,-1+17*b0,0+58*b0,1-10*b0,2+4*b0,3-b0,4)>>shift2
g0,0,k0,0,r0,0的计算则需要先求得c0,-3,c0,-2,c0,-1,c0,0,c0,1,c0,2,c0,3,c0,4的值,然后进行如下计算得出:
g0,0=(-c0,-3+4*c0,-2-10*c0,-1+58*c0,0+17*c0,1-5*c0,2+c0,3)>>shift2
k0,0=(-c0,-3+4*c0,-2-11*c0,-1+40*c0,0+40*c0,1-11*c0,2+4*c0,3-c0,4)>>shift2
r0,0=(c0,-2-5*c0,-1+17*c0,0+58*c0,1-10*c0,2+4*c0,3-c0,4)>>shift2
当运动矢量MV指向的位置恰好为参考帧上的整像素点时,指向的像素点的值就是预测像素值。这样整个帧间预测块的预测像素值都可以根据相应的MV和参考帧,在GPU上通过每个线程进行计算得到。
色度的分像素插值的过程与亮度原理相同,不过色度采用的是4抽头的插值滤波器,在这里不再作进行详细说明。其插值时所用到的系数如表3所示。
表3 色度像素插值滤波所用到的系数
分像素位置 | 插值滤波系数 |
1/8像素 | {-2,58,10,-2} |
2/8像素 | {-4,54,16,-2} |
3/8像素 | {-6,46,28,-4} |
4/8像素 | {-4,36,36,-4} |
5/8像素 | {-4,28,46,-6} |
6/8像素 | {-2,16,54,-4} |
7/8像素 | {-2,10,58,-2} |
HEVC编解码标准中运动补偿以图像块为单位进行的,而实际上处理的基本单位是像素点,各像素点进行运动补偿时不存在相互依赖关系,只需要根据MV指向参考帧的位置计算得到相应的预测像素值再和残差像素值相加得到重建的像素值就可以了。每个线程处理的基本单位都是由PU预测块转换成的像素点,一个线程进行一个预测像素值的计算,这样,在整个图像块上的帧间预测像素值就可以同时计算得出。
本发明的HEVC运动补偿并行算法包括:
(1)首先,在解码开始阶段,对GPU进行初始化,在GPU中申请用来存储帧间预测模式的每个像素点对应的运动矢量、参考帧和生成的预测像素值的存储空间。
(2)然后通过cudaMemcpy函数将运动矢量和相应的参考帧图像拷贝到设备端,同时调用cudaBindTexteure函数将参考帧绑定到纹理存储器上。纹理存储器读取数据时速度快,可忽略不计,进一步提高了操作的效率。
(3)进行线程配置,为每个预测像素值的处理分配一个线程ID号,并在设备端开辟用来存储相应生成的预测像素值的全局内存空间。设置线程网格大小为Grid(4,4,1),线程块大小为Block(16,16,1)。即一个Grid分配16个Block,每个Block分配256个线程。
(4)根据运动矢量指向参考帧的位置求取预测像素值:如果指向的是整像素值位置,则直接读取对应运动矢量指向的参考帧位置上的值就是预测像素值;如果是分像素位置,则根据像素点的位置选择相应的分像素插值滤波公式进行求值,得到对应的分像素值就是预测像素值。每个线程依据自己的线程ID号执行相同的执行步骤得到对应的像素预测值。
(5)将得到的像素值预测和对应的像素残差值相加得到像素重建值,并进行数据裁剪的安全性验证。
(6)将结果拷贝回主机端内存,释放设备端的存储空间。
与现有技术相比,本发明构建了由CPU和GPU组成的解码架构,将解码复杂度较高的反变换处理和运动补偿处理转移到GPU上实现,并设计了基于GPU的HEVC反变换并行算法和HEVC运动补偿并行算法,有效提高了解码速度和解码效率。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (6)
1.一种基于GPU的HEVC并行解码方法,其特征在于:包括:
A、GPU对读取的码流文件进行熵解码、重排序和反量化,从而得到变换系数矩阵,同时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运动补偿并行算法,根据运动矢量指向的参考帧位置求取图像的预测像素值这一步骤,其包括:
S1、初始化GPU,在GPU中申请用来存储帧间预测模式每个像素点对应的运动矢量、参考帧和预测像素值的存储空间;
S2、将运动矢量和相应的参考帧图像拷贝到设备端,同时将参考帧绑定到纹理存储器上;
S3、进行线程配置,为每个预测像素值的处理分配一个线程ID号,在设备端开辟用来存储预测像素值的全局内存空间;
S4、各个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接纹理读取或插值滤波处理,从而得到各个线程的像素预测值;
S5、将各个线程的像素预测值拷贝回CPU内存,然后释放设备端的全局内存空间。
5.根据权利要求4所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述步骤S4,其具体为:
每个线程根据自身的线程ID号和运动矢量指向参考帧的位置同时进行直接读取或插值滤波处理:若该线程的运动矢量指向的是整像素值位置,则直接读取纹理存储器中该运动矢量所指向的参考帧位置上的像素值,并以读取的像素值作为该线程的像素预测值;若该线程的运动矢量指向的是分像素位置,则根据分像素点的位置选择相应的亮度或色度分像素插值滤波公式进行计算,从而得到该线程的像素预测值。
6.根据权利要求5所述的一种基于GPU的HEVC并行解码方法,其特征在于:所述亮度分像素插值滤波公式为8点插值滤波公式,所述度分像素插值滤波公式为4点插值滤波公式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410328646.2A CN104125466B (zh) | 2014-07-10 | 2014-07-10 | 一种基于gpu的hevc并行解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410328646.2A CN104125466B (zh) | 2014-07-10 | 2014-07-10 | 一种基于gpu的hevc并行解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104125466A true CN104125466A (zh) | 2014-10-29 |
CN104125466B CN104125466B (zh) | 2017-10-10 |
Family
ID=51770711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410328646.2A Expired - Fee Related CN104125466B (zh) | 2014-07-10 | 2014-07-10 | 一种基于gpu的hevc并行解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104125466B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104469488A (zh) * | 2014-12-29 | 2015-03-25 | 北京奇艺世纪科技有限公司 | 视频解码方法及系统 |
CN104506867A (zh) * | 2014-12-01 | 2015-04-08 | 北京大学 | 采样点自适应偏移参数估计方法及装置 |
CN104780377A (zh) * | 2015-03-18 | 2015-07-15 | 同济大学 | 一种基于分布式计算机系统的并行hevc编码系统及方法 |
CN105245896A (zh) * | 2015-10-09 | 2016-01-13 | 传线网络科技(上海)有限公司 | Hevc并行运动补偿方法及装置 |
CN106658012A (zh) * | 2017-01-06 | 2017-05-10 | 华南理工大学 | 一种vp9解码器并行流水线任务划分方法 |
CN109451322A (zh) * | 2018-09-14 | 2019-03-08 | 北京航天控制仪器研究所 | 用于图像压缩的基于cuda架构的dct算法和dwt算法的加速实现方法 |
WO2019076201A1 (en) * | 2017-10-16 | 2019-04-25 | Huawei Technologies Co., Ltd. | METHOD AND APPARATUS FOR ENCODING |
CN111541901A (zh) * | 2020-05-11 | 2020-08-14 | 网易(杭州)网络有限公司 | 图片解码的方法和装置 |
CN113068049A (zh) * | 2021-03-16 | 2021-07-02 | 上海富瀚微电子股份有限公司 | 分数像素运动估计装置 |
CN113965761A (zh) * | 2021-10-22 | 2022-01-21 | 长安大学 | 基于gpu实现的htj2k图像压缩方法、装置及设备 |
US11252426B2 (en) | 2018-05-31 | 2022-02-15 | Huawei Technologies Co., Ltd. | Spatially varying transform with adaptive transform type |
US11388402B2 (en) | 2018-02-23 | 2022-07-12 | Huawei Technologies Co., Ltd. | Position dependent spatial varying transform for video coding |
CN118037870A (zh) * | 2024-04-08 | 2024-05-14 | 中国矿业大学 | 一种兼容Zdepth的并行化深度图像压缩算法、装置及终端设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102932003A (zh) * | 2012-09-07 | 2013-02-13 | 上海交通大学 | 基于gpu架构的qc-ldpc码的加速译码方法 |
CN102984522A (zh) * | 2012-12-14 | 2013-03-20 | 深圳百科信息技术有限公司 | 一种亮度变换域帧内预测编解码方法和系统 |
CN103297777A (zh) * | 2013-05-23 | 2013-09-11 | 广州高清视信数码科技股份有限公司 | 一种用于加速视频编码速度的方法及装置 |
US20130287114A1 (en) * | 2007-06-30 | 2013-10-31 | Microsoft Corporation | Fractional interpolation for hardware-accelerated video decoding |
US20140043347A1 (en) * | 2012-08-10 | 2014-02-13 | Electronics And Telecommunications Research Institute | Methods for jpeg2000 encoding and decoding based on gpu |
CN103747262A (zh) * | 2014-01-08 | 2014-04-23 | 中山大学 | 一种基于gpu的运动估计方法 |
CN103763569A (zh) * | 2014-01-06 | 2014-04-30 | 上海交通大学 | 一种基于先入先出队列的hevc细粒度并行预测方法 |
CN103888771A (zh) * | 2013-12-30 | 2014-06-25 | 中山大学深圳研究院 | 基于gpgpu技术的并行视频图像处理方法 |
-
2014
- 2014-07-10 CN CN201410328646.2A patent/CN104125466B/zh not_active Expired - Fee Related
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130287114A1 (en) * | 2007-06-30 | 2013-10-31 | Microsoft Corporation | Fractional interpolation for hardware-accelerated video decoding |
US20140098887A1 (en) * | 2007-06-30 | 2014-04-10 | Microsoft Corporation | Reducing memory consumption during video decoding |
US20140043347A1 (en) * | 2012-08-10 | 2014-02-13 | Electronics And Telecommunications Research Institute | Methods for jpeg2000 encoding and decoding based on gpu |
CN102932003A (zh) * | 2012-09-07 | 2013-02-13 | 上海交通大学 | 基于gpu架构的qc-ldpc码的加速译码方法 |
CN102984522A (zh) * | 2012-12-14 | 2013-03-20 | 深圳百科信息技术有限公司 | 一种亮度变换域帧内预测编解码方法和系统 |
CN103297777A (zh) * | 2013-05-23 | 2013-09-11 | 广州高清视信数码科技股份有限公司 | 一种用于加速视频编码速度的方法及装置 |
CN103888771A (zh) * | 2013-12-30 | 2014-06-25 | 中山大学深圳研究院 | 基于gpgpu技术的并行视频图像处理方法 |
CN103763569A (zh) * | 2014-01-06 | 2014-04-30 | 上海交通大学 | 一种基于先入先出队列的hevc细粒度并行预测方法 |
CN103747262A (zh) * | 2014-01-08 | 2014-04-23 | 中山大学 | 一种基于gpu的运动估计方法 |
Non-Patent Citations (3)
Title |
---|
DIEGO F. DE SOUZA: "COOPERATIVE CPU+GPU DEBLOCKING FILTER PARALLELIZATION FOR HIGH PERFORMANCE HEVC VIDEO CODECS", 《ACOUSTICS, SPEECH AND SIGNAL PROCESSING (ICASSP)》 * |
JIAJIA LU, FAN LIANG: "A Fast Block Partition Algorithm For HEVC", 《INFORMATION, COMMUNICATIONS AND SIGNAL PROCESSING (ICICS)》 * |
邹彬彬,梁凡: "一种基于CPU+GPU的AVS视频并行编码方法", 《上海大学学报》 * |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104506867A (zh) * | 2014-12-01 | 2015-04-08 | 北京大学 | 采样点自适应偏移参数估计方法及装置 |
CN104506867B (zh) * | 2014-12-01 | 2017-07-21 | 北京大学 | 采样点自适应偏移参数估计方法及装置 |
CN104469488A (zh) * | 2014-12-29 | 2015-03-25 | 北京奇艺世纪科技有限公司 | 视频解码方法及系统 |
CN104469488B (zh) * | 2014-12-29 | 2018-02-09 | 北京奇艺世纪科技有限公司 | 视频解码方法及系统 |
CN104780377A (zh) * | 2015-03-18 | 2015-07-15 | 同济大学 | 一种基于分布式计算机系统的并行hevc编码系统及方法 |
CN104780377B (zh) * | 2015-03-18 | 2017-12-15 | 同济大学 | 一种基于分布式计算机系统的并行hevc编码系统及方法 |
CN105245896A (zh) * | 2015-10-09 | 2016-01-13 | 传线网络科技(上海)有限公司 | Hevc并行运动补偿方法及装置 |
CN106658012A (zh) * | 2017-01-06 | 2017-05-10 | 华南理工大学 | 一种vp9解码器并行流水线任务划分方法 |
US11006139B2 (en) | 2017-10-16 | 2021-05-11 | Huawei Technologies Co., Ltd. | Encoding method and apparatus |
US11343523B2 (en) | 2017-10-16 | 2022-05-24 | Huawei Technologies Co., Ltd. | Coding method and apparatus |
US12167009B2 (en) | 2017-10-16 | 2024-12-10 | Huawei Technologies Co., Ltd. | Encoding method and apparatus |
US11956455B2 (en) | 2017-10-16 | 2024-04-09 | Huawei Technologies Co., Ltd. | Coding method and apparatus |
WO2019076201A1 (en) * | 2017-10-16 | 2019-04-25 | Huawei Technologies Co., Ltd. | METHOD AND APPARATUS FOR ENCODING |
US11523129B2 (en) | 2017-10-16 | 2022-12-06 | Huawei Technologies Co., Ltd. | Encoding method and apparatus |
US11917152B2 (en) | 2018-02-23 | 2024-02-27 | Huawei Technologies Co., Ltd. | Position dependent spatial varying transform for video coding |
US11388402B2 (en) | 2018-02-23 | 2022-07-12 | Huawei Technologies Co., Ltd. | Position dependent spatial varying transform for video coding |
US11252426B2 (en) | 2018-05-31 | 2022-02-15 | Huawei Technologies Co., Ltd. | Spatially varying transform with adaptive transform type |
US11601663B2 (en) | 2018-05-31 | 2023-03-07 | Huawei Technologies Co., Ltd. | Spatially varying transform with adaptive transform type |
US12022100B2 (en) | 2018-05-31 | 2024-06-25 | Huawei Technologies Co., Ltd. | Spatially varying transform with adaptive transform type |
CN109451322A (zh) * | 2018-09-14 | 2019-03-08 | 北京航天控制仪器研究所 | 用于图像压缩的基于cuda架构的dct算法和dwt算法的加速实现方法 |
CN109451322B (zh) * | 2018-09-14 | 2021-02-02 | 北京航天控制仪器研究所 | 用于图像压缩的基于cuda架构的dct算法和dwt算法的加速实现方法 |
CN111541901A (zh) * | 2020-05-11 | 2020-08-14 | 网易(杭州)网络有限公司 | 图片解码的方法和装置 |
CN113068049A (zh) * | 2021-03-16 | 2021-07-02 | 上海富瀚微电子股份有限公司 | 分数像素运动估计装置 |
CN113965761A (zh) * | 2021-10-22 | 2022-01-21 | 长安大学 | 基于gpu实现的htj2k图像压缩方法、装置及设备 |
CN113965761B (zh) * | 2021-10-22 | 2023-06-02 | 长安大学 | 基于gpu实现的htj2k图像压缩方法、装置及设备 |
CN118037870A (zh) * | 2024-04-08 | 2024-05-14 | 中国矿业大学 | 一种兼容Zdepth的并行化深度图像压缩算法、装置及终端设备 |
CN118037870B (zh) * | 2024-04-08 | 2024-06-07 | 中国矿业大学 | 一种兼容Zdepth的并行化深度图像压缩算法、装置及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104125466B (zh) | 2017-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104125466A (zh) | 一种基于gpu的hevc并行解码方法 | |
WO2022022297A1 (zh) | 视频解码方法、视频编码方法、装置、设备及存储介质 | |
CN104539966B (zh) | 图像预测方法及相关装置 | |
US11838541B2 (en) | Matrix weighted intra prediction of video signals | |
CN111819852A (zh) | 用于变换域中残差符号预测的方法及装置 | |
KR102587638B1 (ko) | 비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정 방법 및 시스템 | |
JP6761033B2 (ja) | 前フレーム残差を用いた動きベクトル予測 | |
WO2018052552A1 (en) | Dual filter type for motion compensated prediction in video coding | |
US12170757B2 (en) | Hardware codec accelerators for high-performance video encoding | |
GB2498550A (en) | A method of processing image components for coding using image sample subsets comprising samples selected from neighbouring borders of first and second image | |
KR20230117570A (ko) | 비디오 코딩을 위한 루마 예측으로부터의 크로마 | |
WO2020103800A1 (zh) | 视频解码方法和视频解码器 | |
WO2018169571A1 (en) | Segmentation-based parameterized motion models | |
KR20230145063A (ko) | 비디오 코딩에서의 인트라-예측을 위한 레퍼런스 픽셀들의업샘플링 | |
TW202234883A (zh) | 塊內複製暫用視框緩衝器 | |
JP2017537491A (ja) | 改善された転置バッファを有するスケーラブルな変換ハードウェアアーキテクチャ | |
WO2023005830A1 (zh) | 预测编码方法、装置和电子设备 | |
CN115280770B (zh) | 用于对视频进行编码或解码的方法和装置 | |
KR20230149295A (ko) | 팔레트 모드에서 비디오 코딩을 위한 버퍼들 | |
CN117692633A (zh) | 用于从多个交叉分量进行预测的视频编码、解码方法和设备 | |
US20240267529A1 (en) | Context-aware quantization for high-performance video encoding | |
CN116114246B (zh) | 帧内预测平滑滤波器系统及方法 | |
CN116723328A (zh) | 一种视频编码方法、装置、设备及存储介质 | |
KR101691380B1 (ko) | 시프팅 매트릭스를 이용한 dct 기반의 부화소 단위 움직임 예측 방법 | |
CN105338365B (zh) | 视频编码方法和视频编码装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171010 Termination date: 20210710 |