一种基于GPU的视频处理方法与流程

文档序号:14197502阅读:1444来源:国知局
一种基于GPU的视频处理方法与流程

本发明涉及音视频处理技术领域,具体为一种基于gpu的视频处理方法。



背景技术:

近年来,随着视频编解码技术的快速发展,以h.264为代表的新一代视频编码标准渐渐成为了主流,该视频编码标准采用了最新的视频编码技术,获得了很好的效果,但是其压缩效率的提高是以压缩算法复杂度的提高为代价的。这使得单纯用软件来实现解码,难以达到实时、高效的效果,尤其是高清晰度视频,必须通过硬件电路加速解码才能实现视频的高速解码和实时播放。

随着高清视频的广泛应用,视频数据量的剧增对计算机中央处理器(cpu)造成了巨大的计算压力,仅通过提高cpu的时钟频率来解决这个问题效果已经不明显或不可能。因此充分利用计算机的图形处理器(gpu,graphicsprocessingunit)来加速视频处理过程,减轻cpu的计算负担已成为趋势。相对于cpu,gpu拥有更大的数据传输带宽,更多的计算单元,更强的浮点运算能力,非常适合用于那些具有高度并行特征的计算领域,而高清视频处理正好符合这一特点。

图形处理器gpu是专门用于图像运算工作的微处理器。随着gpu的不断推广,利用gpu和cpu协同处理复杂计算的方法也发展起来。利用gpu强大的并行运算能力,能够大幅度提高系统协作的计算性能,从而将cpu从不擅长的并行运算中解放出来,更好地完成系统的管理控制工作。



技术实现要素:

本发明针对上述情况,采用一种基于gpu的视频处理方法,能够支持h.264格式视频的高效解码,以及视频数据的并行处理,提升了视频处理的效率,有效降低cpu占用率。

所述的基于gpu的视频处理方法,具体步骤如下:

步骤一、从视频数据源端接收视频数据并存储在缓存队列中;

步骤二、从缓存队列中依次读取视频数据,并使用视频预处理模块进行解封装处理;

视频预处理模块对视频进行解封装处理,并对非h.264格式的视频进行过滤处理。

步骤三、判断解封装处理后的视频格式是否为h.264,如果是,跳转步骤四;否则,视频处理流程结束。

步骤四、从解封装的视频数据中,按顺序读取一帧数据,并判断是否读取成功;如果成功,进入步骤五,否则,视频处理流程结束。

判断读取成功的过程如下:

读取到某帧视频数据,读取数据帧算法返回的值是1,则表明该帧视频数据读取成功,当读取不到视频数据或者读到视频数据的结尾时,读取数据帧算法返回的值是非1,则表明该帧视频数据读取失败。

步骤五、判断解码器是否进行了初始化,如果是,利用视频解码模块将读取成功的该帧视频数据解码为yuv格式数据;否则,初始化解码器后再将该帧视频数据解码为yuv格式数据;

步骤六、判断对该帧视频数据的解码是否成功,如果是,跳转步骤七;否则,跳转步骤四,继续读下一帧数据。

根据解码算法返回的解码结果参数来判断,若返回的参数值是1则解码成功,若返回的参数值是非1则解码失败。

步骤七、将解码出来的yuv数据进行内存映射,并将yuv数据从image形式转化为nv12格式;

内存映射具体是指:将解码出来的yuv数据存储在显卡的内存空间,将yuv数据地址映射到opencl的地址空间,以便对yuv数据的视频转码和视频特征计算。

步骤八、利用视频转码模块对nv12格式的视频数据进行格式转换,将nv12格式转换为yuv420p格式;

步骤九、针对yuv420p格式的视频数据的y分量和uv分量,利用视频特征计算模块分别计算特征值;

步骤十、利用视频关键帧提取模块将y分量的特征值和uv分量的特征值,拷贝到cpu侧的系统内存中,并进行关键帧的筛选。

步骤十一、判断筛选结果是否为关键帧,如果是,跳转步骤十二,否则,跳转步骤四,继续读下一帧数据;

判断是否为关键帧的过程如下:

根据关键帧筛选算法返回的筛选结果参数来判断,若返回的结果参数值是1,则表明该帧视频数据是关键帧,若返回的结果参数值是非1,则表明该帧视频数据是非关键帧。

步骤十二、利用基于opencl的cpu和gpu之间的内存拷贝技术,将关键帧的yuv数据拷贝到cpu侧的系统内存中。

步骤十三、将关键帧的yuv数据保存到缓存队列,由存储专用线程将关键帧的yuv数据存储到文件;跳转步骤四,继续读下一帧数据。

本发明的优点在于:

1)、一种基于gpu的视频处理方法,总体框架结构包括视频预处理模块、视频解码模块、视频转码模块、视频特征计算模块及视频关键帧提取模块,所有模块在cpu和gpu之间进行数据传输,都是利用基于opencl的cpu和gpu之间的内存拷贝技术来实现。

2)、一种基于gpu的视频处理方法,实现了视频处理的加速,提升了视频处理的效率,并有效降低了cpu的资源消耗。

附图说明

图1为本发明基于gpu的视频处理方法的总体框架结构示意图;

图2为本发明基于gpu的视频处理方法的流程图。

具体实施方式

下面结合附图和具体实施例对本发明的技术方案进行详细说明。

本发明基于gpu的视频处理方法,如图1所示,是基于由视频预处理模块、视频解码模块、视频转码模块、视频特征计算模块及视频关键帧提取模块构成的总体框架结构实现的。

所述的视频预处理模块负责对从视频数据源端接收的视频数据进行解封装处理,对非h.264格式的视频进行过滤处理;

视频解码模块是利用硬件加速解码,将h.264格式的视频数据解码为yuv格式数据;

视频转码模块是利用gpu的并行计算能力,将nv12格式的视频数据转换成yuv420p格式的视频数据;

视频特征计算模块是利用gpu的并行计算能力,在gpu中对yuv420p格式的视频数据利用视频特征提取算法进行特征值的计算;

视频关键帧提取模块是利用基于opencl的cpu和gpu之间的内存拷贝技术,从显卡内存将视频特征值拷贝到系统内存,利用视频关键帧提取算法筛选关键帧,然后从显卡内存将筛选出的关键帧的yuv420p格式的数据拷贝到系统内存。

如图2所示,为本发明利用基于gpu的视频处理方法进行视频处理的流程,具体步骤如下:

步骤一、从视频数据源端接收视频数据并存储在系统内存的缓存队列中;

步骤二、从缓存队列中依次读取视频数据,并使用视频预处理模块进行解封装处理;

视频预处理模块对视频进行解封装处理,并对非h.264格式的视频进行过滤处理。

步骤三、判断解封装处理后的视频格式是否为h.264,如果是,跳转步骤四;否则,视频处理流程结束。

步骤四、从解封装的视频数据中,按顺序读取一帧数据,并判断是否读取成功;如果成功,进入步骤五,否则,视频处理流程结束。

判断读取成功的过程如下:

读取到某帧视频数据,读取数据帧算法返回的值是1,则表明该帧视频数据读取成功,当读取不到视频数据或者读到视频数据的结尾时,读取数据帧算法返回的值是非1,则表明该帧视频数据读取失败。

步骤五、判断解码器是否进行了初始化,如果是,利用视频解码模块将读取成功的该帧视频数据解码为yuv格式数据;否则,初始化解码器后再将该帧视频数据解码为yuv格式数据;

步骤六、判断对该帧视频数据的解码是否成功,如果是,跳转步骤七;否则,跳转步骤四,继续读下一帧数据。

根据解码算法返回的解码结果参数来判断,若返回的参数值是1则解码成功,若返回的参数值是非1则解码失败。

步骤七、将解码出来的yuv数据进行内存映射,并将yuv数据从image形式转化为nv12格式;

内存映射具体是指:将解码出来的yuv数据存储在显卡的内存空间,将yuv数据地址映射到opencl的地址空间,以便对yuv数据的视频转码和视频特征计算。

步骤八、利用视频转码模块对视频数据进行格式转换,将nv12格式的视频数据转换为yuv420p格式的视频数据;

根据视频的宽度和高度,对视频转换进行并行处理。

步骤九、针对yuv420p格式的视频数据的y分量和uv分量,利用视频特征计算模块分别计算特征值;

对yuv420p格式的视频数据的y分量按照视频特征提取算法进行特征值的计算,按照16*16(受限于显卡的gpu的内核数256)的并发数,对特征值的计算进行并行处理。

对yuv420p格式的视频数据的uv分量按照视频特征提取算法进行特征值的计算,按照16*16(受限于显卡的gpu的内核数256)的并发数,对特征值的计算进行并行处理。

步骤十、利用视频关键帧提取模块将y分量的特征值和uv分量的特征值,拷贝到cpu侧的系统内存中,并进行关键帧的筛选。

利用基于opencl的cpu和gpu之间的内存拷贝技术,将y分量的特征值和uv分量的特征值拷贝到cpu侧的系统内存中;并利用视频关键帧提取算法进行关键帧的筛选。

步骤十一、判断筛选结果是否为关键帧,如果是,跳转步骤十二,否则,跳转步骤四,继续读下一帧数据;

判断是否为关键帧的过程如下:

根据关键帧筛选算法返回的筛选结果参数来判断,若返回的结果参数值是1,则表明该帧视频数据是关键帧,若返回的结果参数值是非1,则表明该帧视频数据是非关键帧。

步骤十二、利用基于opencl的cpu和gpu之间的内存拷贝技术,将关键帧的yuv数据拷贝到cpu侧的系统内存中。

步骤十三、将关键帧的yuv数据保存到缓存队列,由存储专用线程将关键帧的yuv数据存储到文件;跳转步骤四,继续读下一帧数据。

综上所述,本发明提供的一种基于gpu的视频处理方法,在对视频的处理过程中,将视频解码采用硬件电路加速解码和gpu的并行计算来实现相关功能,大大提升了视频解码的性能;将视频转码、视频特征计算等计算量很大的功能模块采用了gpu的并行计算框架,充分发挥gpu的并行计算能力,同时有效降低了cpu的资源消耗;把视频特征视频计算放到gpu执行,大大减少数据在cpu和gpu之间的内存拷贝;利用基于opencl的cpu和gpu之间的内存拷贝技术,大大提升了cpu和gpu之间的内存拷贝性能;总体实现了高效的视频处理。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1