CN104378642A - 一种基于cuda的h.264分数像素快速插值方法 - Google Patents
一种基于cuda的h.264分数像素快速插值方法 Download PDFInfo
- Publication number
- CN104378642A CN104378642A CN201410593730.7A CN201410593730A CN104378642A CN 104378642 A CN104378642 A CN 104378642A CN 201410593730 A CN201410593730 A CN 201410593730A CN 104378642 A CN104378642 A CN 104378642A
- Authority
- CN
- China
- Prior art keywords
- pixel
- point
- value
- cuda
- pix
- 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.)
- Pending
Links
Abstract
一种基于CUDA的H.264分数像素快速插值方法,包括以下步骤:(1)将每一帧的H.264图像分为4×4的子块;(2)判断预测点在4×4子块的预测区域;(3)根据预测点在子块中的区域,基于CUDA架构并且利用双线性插值算法得出在当前情况下的子块中半像素点的像素值;(4)根据子块整像素点与半像素点的值,基于CUDA架构并且利用线性插值算法得出子块中1/4像素点的像素值。本发明实现了分数像素的快速插值计算,加快了分数像素的快速定位,有效的提高了H.264编码器的编码速率。
Description
技术领域
本发明属于视频图像处理技术领域,特别涉及H.264视频编解码技术。
背景技术
H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。与其它视频编码标准如MPEG-2、H.263相比,由于H.264标准的高效压缩比和对网络的高适应性,使其可广泛应用于数字电视、无线视频通信和IP视频会议及其它多媒体业务。
虽然H.264有着精确的运动向量和优秀的数据压缩比,但是其编解码复杂度相比以往的视频标准,均有成倍的增长。Ravssi等对H.264与MPEG-4作了分析比较,指出H.264编码的计算复杂度是MPEG-4的5-10倍,解码复杂度也是后者的2-4倍。Chenzhibo等指出H.264解码时所进行的计算量大约为H.263的2倍,而编码更甚,是H.263的3倍。
为了增加H.264编解码速度,国内外一些学者在充分使用处理器资源上进行了研究,针对不同的处理器使用相应的多媒体扩展指令集来加速编解码,如Intel针对Pentium系列处理器提供的MMX/SSE指令集,为CPU提供了SIMD处理机制,将其用于视频编解码,能在一定程度上提高编码效率,但CPU的高负荷运作仍没得到解决。一些研究者转向使用DSP芯片、FPGA、ARM等硬件电路来加速编解码,也获得较好的效果,但尚存在灵活性不够、不易升级等缺点。
此外,国内外学者针对H.264中核心模块如运动估计、运动补偿、整数DCT变换、环路滤波等环节也作了大量的研究。2003年CHEN等人提出的UMHexagonS搜索算法在运动估计中做了改量。2007年LOU等通过分析残差数据DCT系数的分布,判断当前子块是属于平坦区还是复杂区,从而进行不同强度的滤波,这两种方法都有效了提了编码速度,但是其算法比较复杂,移植性与通用性不强。
GPU(Graphic Processing Unit,图形处理单元)具有很好的并行处理能力,经过2001年与2002年的两次重大变革,程序员能够灵活地编程控制GPU的顶点着色器与像素着色器,使得GPU不再局限于最初的图形渲染加速。2006年NVIDIA公司为GPU引入统一的渲染架构,自此,GPU能更加灵活方便地运用于通用计算领域。2007年6月,NVIDIA推出了CUDA(Compute Unified Device Architecture,统一计算设备架构),研究人员不用借助图形学API,采用容易掌握的C语言开发,缩短了研发周期。至今,CUDA技术正处于飞速发展,其发布的版本也由最初的1.0发展的现在的6.x系列。同时,基于CUDA的H.264并行算法研究多集中在编码的运动估计上,Pieters等在GPU在实现了H.264解码器中的MC、重建、CSC、可视化处理等模块。Momcilovic等充分利用CUDA的存储器资源和计算资源等,在GPU并行实现了运动估计。钱悦等实现了H.264环路滤波的实例,并揭示了CUDA架构在H.264编解码时并行运算的优势,为利用CUDA应用于H.264编解码器做了很好的铺垫。
虽然国内外学者已经对于H.264进行了大量的研究并取得了一定的成果。但是,对于H.264帧间预测过程中1/4像素精度运动补偿以往学者都没有进行大量的研究与优化。因此,针对这一种情况,实现1/4像素精度快速定位可以作为一个突破口,达到提高了H.264编码器的编码速率的目的。
由此,业界对能够实现分数像素的快速插值计算、加快分数像素的快速定位、提高H.264编码器的编码速率的方法有所期冀。
发明内容
本发明的目的是提出一种基于CUDA(Compute Unified Device Architecture,统一计算设备架构)的H.264分数像素快速插值方法。
为了达成上述目的,本发明提供了一种基于CUDA的H.264分数像素快速内插方法。所述方法基于CUDA架构,将H.264分数像素的内插过程利用GPU并行计算得出,实现了分数像素的快速插值计算并且提高了H.264编码器的编码速率。
本发明包括以下步骤:
(1)将每一帧的H.264图像分为4×4的子块;
(2)判断预测点在4×4子块的预测区域;
(3)根据预测点在子块中的区域,基于CUDA架构利用双线性插值算法得出在当前情况下的子块中半像素点的像素值;
(4)根据子块整像素点与半像素点的值,基于CUDA架构利用线性插值算法得出子块中1/4像素点的像素值。
本发明能实现分数像素的快速插值计算,从而提高H.264编码器的编码速率。
附图说明
图1是本发明方法之步骤的流程图。
图2是半像素插值示意图。
图3是1/4像素插值示意图。
图4是4×4子块中预测点6种可能的预测区域。
图5是半像素插值计算时,CUDA架构实现流程。
图6是CPU与GPU编码速度比较结果。
具体实施方式
结合附图,通过下文的述详细说明,可更清楚地理解本发明的上述及其他特征和优点。
参见示出本发明实施例的附图,下文将更详细地描述本发明。然而,本发明可以以许多不同形式实现,并且不应解释为受在此提出之实施例的限制。相反,提出这些实施例是为了达成充分及完整公开,并且使本技术领域的技术人员完全了解本发明的范围。
由于本发明的方法实现H.264分数像素快速插值计算可以达到令人满意的效果,因此可以实现数像素的快速定位,有效的提高了H.264编码器的编码速率。
现参考图1,我们以预测点正好落在区域中只有1/4像素点的情况来进行具体的实施方式。如图4所示,预测点正好落在区域中只有1/4像素点为图4中的5_7_13_15区域,此情况下的1/4像素点必须通过对角线上的半像素点内插得到。
本实施例中,实现的具体步骤如下所示:
(1)如图2中半像素点b,通过b点对角线上的四个整像素点(C,D,M,N)求得,且待求b点为Fxy(x,y),整数像素点{C:F00(0,0),D:F01(0,1),M:F10(1,0),N:F11(1,1)}的值为(f00,f01,f10,f11)。则半像素点的值可以通过公式(1-1)得到;
(2)计算计算一帧图像所需的线程块数,对于分辨率为W×H的视频序列可以分割成n个4×4的子块,线程块数计算如公式(1-2)可以得出;
在一个子块中需要计算的半像素点个数为33个,每一个线程块里分配有33个线程,每一个线程负责计算一个半像素点的值。程序流程示意图如图5所示。
(3)1/4像素点是通过半像素点和整像素点线性内插(如图3中的a点)或者通过对角线上两个半像素点内插(如图3中e点)得到。这两种情况下的1/4像素点可以通过线性插值得到。
线程块数如式(1-2)中计算所得。在一个子块中存在120个1/4像素点。因此,定义一个线程块中分配120线程,每个线程负责计算一个1/4像素点的值。
本实施例中,按照如下步骤实现基于CUDA架构并行计算出H.264分数像素快速插值过程:
(1)在GPU上分配显存空间并且将数据从内存拷贝到显存;
(2)计算线程块数,分配一维线程块;
(3)计算每个线程块分配的线程数,并且调用双线插值算法实现半像素点的像素值的并行计算,将计算得到的半像素值放入全局储存器中;
(4)计算1/4像素点值所需要的线程块数,为每一个线程块分配对应的线程数;
(5)从全局储存器中读取半像素点值,利用线性插值算法并行计算出1/4像素点的值;
(6)将数据从显存拷贝到内存,释放GPU上的空间。
本实施例中分别选取了QCIF(176×144)、CIF(352x288)和1080p三种分辨率下不同帧数的视频序列,采样格式均采用YUV 4:2:0。我们测试了以上视频序列下的编码速度情况,并将CPU中运行算法的编码速度与本文中CUDA加速算法进行对比。
图6中Carphone,Bus,Blus_sky与Akiyo,Foreman,Riverbed两组是相同帧数不同分辨率的视频序列的加速效果对比,从中我们可以发现:对于低分率的视频序列加速效果并不明显,但随着视频分辨率的增加,视频序列在对一帧图像编码时需要分割出的4×4子块数目越多,编码时需要计算的分数像素点数目增加,从而增大了编码的计算量,编码速率也随之降低。但是,从加速比中我们可以看出,随着分辨率的增加,GPU对于CPU的加速比越高,这也反应了在计算量越大的情况下,本文所描述的基于CUDA的插值算法并行运算的优势越明显,可以有效的提高H.264的编码速率。
图6中Carphone与Akiyo,Bus与Foreman,Blus_sky与Riverbed三组序列为相同分辨率下,不同帧数的视频序列的加速效果,从中我们可以发现:在同种分辨率下,视频序列帧数少时,编码计算量不是很大,在用GPU处理时,编码器大部分耗时在数据拷贝中,因而加速效果不是很明显。但随着视频帧数的增加,计量大时,在GPU处理并行优势就可以体现出来,加速比也随之增大。
因本技术领域的技术人员应理解,本发明可以以许多其他具体形式实现而不脱离本发明的精神或范围。尽管业已描述了本发明的实施例,应理解本发明不应限制为这些实施例,本技术领域的技术人员可如所附权利要求书界定的本发明精神和范围之内做出变化和修改。
Claims (5)
1.一种基于CUDA的H.264分数像素快速插值方法,其特征是包括以下步骤:
(1)将每一帧的H.264图像分为4×4的子块;
(2)预测整像素点在每一个4×4子块的位置;
(3)根据整像素点在子块中的预测位置,基于CUDA架构并且利用双线性插值算法得出在当前情况下的子块中半像素点的像素值;
(4)根据子块整像素点与半像素点的值,基于CUDA架构并且利用线性插值算法得出子块中1/4像素点的像素值。
2.根据权利要求1所述的基于CUDA的H.264分数像素快速插值方法,其特征是根据JM8.6规范中定义有get_block()方法中定义的dx与dy两个变量的值来判断预测点的位置,其中dx变量是指表示预测点距离自己最近的左上整像素点的横坐标,dy表示预测点距离自己最近的左上整像素点的纵坐标;主要包括以下几种情况:
(1)预测点正好落在整像素点上,此情况下不需要计算其他分数像素点;
(2)预测点正好落在区域中即有半像素点又有1/4像素点但半像素点与1/4像素点的值只需要用相邻的像素点通过插值计算得到;
(3)预测点正好落在区域中即有半像素点又有1/4像素点但其中这个区域的一些半像素点的值要通过先得出其他相关的半像素点值后再通过插值得出,然后再将所有的半像素点的值计算相邻半像素点间的1/4像素点的值;
(4)预测点正好落在区域中只有1/4像素点,此情况下的1/4像素点必须通过对角线上的半像素点内插得到。
3.根据权利要求1所述的基于CUDA的H.264分数像素快速插值方法,其特征是按如下步骤得到半像素点的值:
(1)半像素点b通过b点对角线上的四个整像素点(C,D,M,N)求得,且待求b点为Fxy(x,y),整数像素点{C:F00(0,0),D:F01(0,1),M:F10(1,0),N:F11(1,1)}的值为(f00,f01,f10,f11),则半像素点的值可以通过公式(1-1)得到:
(2)计算计算一帧图像所需的线程块数,对于分辨率为W×H的视频序列可以分割成n个4×4的子块,线程块数计算如公式(1-2)可以得出;
。
4.根据权利要求1所述的基于CUDA的H.264分数像素快速插值方法,其特征是1/4像素点是通过半像素点和整像素点线性内插或者通过对角线上两个半像素点内插得到。
5.根据权利要求1所述的基于CUDA的H.264分数像素快速插值方法,其特征 是按照如下步骤实现基于CUDA架构并行计算出H.264分数像素快速插值过程:
(1)在GPU上分配显存空间并且将数据从内存拷贝到显存;
(2)计算线程块数,分配一维线程块;
(3)计算每个线程块分配的线程数,并且调用双线插值算法实现半像素点的像素值的并行计算,将计算得到的半像素值放入全局储存器中;
(4)计算1/4像素点值所需要的线程块数,为每一个线程块分配对应的线程数;
(5)从全局储存器中读取半像素点值,利用线性插值算法并行计算出1/4像素点的值;
(6)将数据从显存中拷贝到内存,释放GPU上的空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410593730.7A CN104378642A (zh) | 2014-10-29 | 2014-10-29 | 一种基于cuda的h.264分数像素快速插值方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410593730.7A CN104378642A (zh) | 2014-10-29 | 2014-10-29 | 一种基于cuda的h.264分数像素快速插值方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104378642A true CN104378642A (zh) | 2015-02-25 |
Family
ID=52557247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410593730.7A Pending CN104378642A (zh) | 2014-10-29 | 2014-10-29 | 一种基于cuda的h.264分数像素快速插值方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104378642A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105872553A (zh) * | 2016-04-28 | 2016-08-17 | 中山大学 | 一种基于并行计算的自适应环路滤波方法 |
CN107527320A (zh) * | 2016-06-22 | 2017-12-29 | 南京视察者图像识别科技有限公司 | 一种加速双线性插值计算的方法 |
WO2019085636A1 (zh) * | 2017-10-31 | 2019-05-09 | 腾讯科技(深圳)有限公司 | 一种视频图像的处理方法和装置 |
CN110769256A (zh) * | 2019-11-01 | 2020-02-07 | 西安邮电大学 | 一种基于可重构阵列处理器的分数像素插值方法 |
US11647555B2 (en) | 2016-07-29 | 2023-05-09 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method and apparatus for establishing secondary connection |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101247523A (zh) * | 2008-03-18 | 2008-08-20 | 上海华平信息技术股份有限公司 | 用于h.264编码器的半像素运动估计方法 |
CN102497550A (zh) * | 2011-12-05 | 2012-06-13 | 南京大学 | H.264编码中运动补偿插值的并行加速方法及装置 |
-
2014
- 2014-10-29 CN CN201410593730.7A patent/CN104378642A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101247523A (zh) * | 2008-03-18 | 2008-08-20 | 上海华平信息技术股份有限公司 | 用于h.264编码器的半像素运动估计方法 |
CN102497550A (zh) * | 2011-12-05 | 2012-06-13 | 南京大学 | H.264编码中运动补偿插值的并行加速方法及装置 |
Non-Patent Citations (2)
Title |
---|
INGE LILLE-LANGOY .ETC: "image.c", 《JVT REFERENCE SOFTWARE VERSION JM8.6》 * |
文秀春: "面向多核处理器的H.264并行编码研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105872553A (zh) * | 2016-04-28 | 2016-08-17 | 中山大学 | 一种基于并行计算的自适应环路滤波方法 |
CN105872553B (zh) * | 2016-04-28 | 2018-08-28 | 中山大学 | 一种基于并行计算的自适应环路滤波方法 |
CN107527320A (zh) * | 2016-06-22 | 2017-12-29 | 南京视察者图像识别科技有限公司 | 一种加速双线性插值计算的方法 |
CN107527320B (zh) * | 2016-06-22 | 2020-06-02 | 南京视察者图像识别科技有限公司 | 一种加速双线性插值计算的方法 |
US11647555B2 (en) | 2016-07-29 | 2023-05-09 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method and apparatus for establishing secondary connection |
WO2019085636A1 (zh) * | 2017-10-31 | 2019-05-09 | 腾讯科技(深圳)有限公司 | 一种视频图像的处理方法和装置 |
US10944985B2 (en) | 2017-10-31 | 2021-03-09 | Tencent Technology (Shenzhen) Company Limited | Method and device for processing video image |
US11589073B2 (en) | 2017-10-31 | 2023-02-21 | Tencent Technology (Shenzhen) Company Limited | Method and device for processing video image |
CN110769256A (zh) * | 2019-11-01 | 2020-02-07 | 西安邮电大学 | 一种基于可重构阵列处理器的分数像素插值方法 |
CN110769256B (zh) * | 2019-11-01 | 2021-10-01 | 西安邮电大学 | 一种基于可重构阵列处理器的分数像素插值方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Cheung et al. | Video coding on multicore graphics processors | |
Chen et al. | H. 264/AVC motion estimation implmentation on compute unified device architecture (CUDA) | |
CN104378642A (zh) | 一种基于cuda的h.264分数像素快速插值方法 | |
Momcilovic et al. | Dynamic load balancing for real-time video encoding on heterogeneous CPU+ GPU systems | |
JP2008541663A (ja) | マルチスレッドsimd処理を利用したメディア符号化の並列実行 | |
Akramullah et al. | Optimization of H. 263 video encoding using a single processor computer: performance tradeoffs and benchmarking | |
CN104125466A (zh) | 一种基于gpu的hevc并行解码方法 | |
CN107646194A (zh) | 用于视频运动补偿的装置和方法 | |
de Souza et al. | HEVC in-loop filters GPU parallelization in embedded systems | |
CN101188761A (zh) | Avs标准中基于并行处理来优化dct快速算法的方法 | |
JP5187062B2 (ja) | 動画像符号化装置および動画像符号化方法 | |
Cheung et al. | Highly parallel rate-distortion optimized intra-mode decision on multicore graphics processors | |
Lee et al. | Multi-pass and frame parallel algorithms of motion estimation in H. 264/AVC for generic GPU | |
CN101256668B (zh) | 一种计算均衡的多核进行视频滤波的方法 | |
Momcilovic et al. | Multi-level parallelization of advanced video coding on hybrid CPU+ GPU platforms | |
Jiang et al. | Highly paralleled low-cost embedded HEVC video encoder on TI KeyStone multicore DSP | |
Han et al. | HEVC decoder acceleration on multi-core X86 platform | |
Zhang et al. | SIMD acceleration for HEVC encoding on DSP | |
Doan et al. | Multi-asip based parallel and scalable implementation of motion estimation kernel for high definition videos | |
CN106063268A (zh) | 将视频数据从h.264转码成h.265的方法和设备 | |
Wang et al. | High definition IEEE AVS decoder on ARM NEON platform | |
Asif et al. | Optimized implementation of motion compensation for H. 264 decoder | |
Dong et al. | Real-time UHD video super-resolution and transcoding on heterogeneous hardware | |
Lee et al. | Algorithmic complexity analysis on data transfer rate and data storage for multidimensional signal processing | |
Chen et al. | VLSI architecture design of fractional motion estimation for H. 264/AVC |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150225 |
|
WD01 | Invention patent application deemed withdrawn after publication |