一种利用部分幅面数据实现快速处理大幅面视频图像的方法与流程

文档序号:14880745发布日期:2018-07-07 09:43阅读:140来源:国知局

本发明涉及媒体技术领域,具体涉及一种利用部分幅面数据实现快速处理大幅面视频图像的方法。



背景技术:

随着时代的发展和经济水平的提高,人们对休闲娱乐行业的要求也越来越高,人们要求优秀的影视作品不仅要立意深刻,而且必须制作精良、画面清晰,给人带来真正的身临其境,从而实现足不出户看天下。超高清(指视频图像的像素分辨率为4096×2160,以下简称4k)时代应运而生,4k视频将迅速占领人们的日常生活,甚至已成为视频制作方向的核心和重点。渲染效率是4k面临最大的问题,往往会通过提高cpu和gpu的性能来提高渲染效率。

在图形学领域中,渲染指把图形定义数字化成一组像素强度值。在非编软件中,常需要将多层时间线上的素材合成为一个视频文件,那么渲染处理过程就涉及到多层素材的数据,数据量很大;同时随着4k的普及,渲染过程需要处理的数据量就更大了,因此渲染所等待的时间也相应变长,特别是在素材层数较高时,这将直接影响用户的体验。

现有技术中常用的渲染方法主要有以下两种:

1.配置单块gpu

为系统配置单块gpu,在cpu的控制下,将渲染影像所需的所有原始数据全部传入gpu进行处理,以串行方式顺序渲染每一幅画面帧,这种方式的缺陷很明显,即渲染过程的速度很慢而且效率也很低:单块gpu在同一时间内只能渲染一帧画面;上行传输大量数据造成对cpu资源的长时间占用,因此对cpu和gpu的性能要求都很高。

2.配置多块gpu

此方法主要是以分布式处理的思想渲染视频流:将视频流数据按画面帧数交叉分组(通常与gpu数量一致,如1、3、5、7...一组,配置2块gpu;或1、4、6、9...为一组,配置3块gpu;...),接着将画面帧依次传入对应gpu渲染,达到同时渲染多个画面帧的目的,最后将帧序列组成完整视频。这种方法对比单块gpu已有所改进,但是仍然存在代价高和预览慢的缺陷:

(1)代价高

这种高效渲染的方法完全是建立在多块gpu的硬件基础上,而gpu比较昂贵,只有一些较为大型的公司、组织才能配置得起数量众多的gpu;而小型用户能够负担的硬件条件是有限的,不断地通过增加gpu数量提升渲染速度的做法的性价比不高。

(2)预览慢

在编辑过程中预览视频效果是很常见的操作,预览过程中不需要完美的画面质量,即使采用多gpu渲染操作,但预览的响应速度仍然无法保证,其一是因为预览算法优化不足;其二因为渲染的瓶颈在于数据上行至gpu的数据通信速度。



技术实现要素:

本发明的目的在于:一种利用部分幅面数据实现快速处理大幅面视频图像的方法,解决了目前在对大幅面视频图像进行渲染处理过程中,采用多块gpu提高处理效率导致成本高和预览慢的技术问题。

本发明采用的技术方案如下:

一种利用部分幅面数据实现快速处理大幅面视频图像的方法,包括以下步骤:

步骤1:cpu将对全幅面影像数据进行筛选,得到部分幅面影像数据;

步骤2:cpu将所述部分幅面影像数据上行至gpu;

步骤3:gpu将所述部分幅面数据重构为全幅面影像数据;

步骤4:gpu输出重构后的全幅面影像实现预览。

进一步的,所述步骤1具体为:

s100:cpu从内存中取出全幅面影像数据,共i行,使用解码器解码所述全幅面影像数据:

s101:cpu计算解码后全幅面影像数据中每一行数据占用的储存量u;

s102:设置行号的筛选步长为s,所述筛选步长s跨越的数据量为su,s为正整数;设置筛选函数adri=ui+adr0,其中,i表示全幅面影像数据的行号,adri表示第i行数据的储存地址,adr0表示第0行数据的储存地址;

s103:利用所述筛选函数筛选出需要上行至gpu的部分幅面影像数据,并计算所述部分幅面影像数据的总数据量;所述部分幅面影像数据中数据的行号i取0,s,2s,...,ks,其中k为整数且ks为小于i的最大正整数。

进一步的,所述步骤2具体为:

s201:gpu在显存中分配纹理缓存a和纹理缓存b,所述纹理缓存a用于储存cpu上行的部分幅面影像数据,所述纹理缓存b用于储存重构的全幅面影像数据;

s202:cpu将所述部分影像数据上行至所述纹理缓存a中。

进一步的,所述步骤3中重构的方法为:gpu利用插值算法对纹理缓存a中的部分幅面数据进行处理,并将处理结果储存在纹理缓存b中。

进一步的,重构的具体步骤如下:

s301:针对所述部分幅面数据中的第0行至第ks行,将纹理缓存a中的数据复制到所述纹理缓存b中;

s302:利用第i行的数据和第i+s行的数据计算纹理缓存b中第i+1行到第i+s-1行的数据,计算公式如下:

其中当i不是s的倍数时,纹理缓存b中第ks+1行至第i行的数据均为第ks行中的数据。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

1.本发明根据视频图像在特定场景下无需完美成像,同时对实时性要求很高的特性,通过仅上行部分的帧数据从而巧妙地绕过cpu上行数据的瓶颈,而后将只有部分图像数据的画面帧还原,很好地兼顾了实时性和画面质量,将整幅图像帧数据的还原交由gpu处理,克服了以往技术的在实时性能上的缺陷,整个处理过程清晰明确。

2.本发明实时性强。处理复杂影像的时间长度主要由两部分决定:其一是cpu控制的上行(数据传输)数据至gpu缓存这个过程,传输速度确定的;其二是gpu处理数据的过程,此过程速度由gpu性能和数量确定。由于实际过程中大幅面影像含有的数据量很大,且实际应用中常用多线程同时传输多幅影像数据,cpu上行数据总时长较长,会拉低流程的整体速度。使用本方法,渲染处理速度将显著提升。

3.本发明配置代价低。本方法可基于单一gpu完成工作内容,降低了硬件配置要求,随时而来的是降低了行业门槛,使普通用户也能享受复杂影像的快速渲染操作,满足了对画质要求不高的影像制作用户的需求,填补了原技术方法在此方向上的空白。

4.本发明灵活性强。本方法提供灵活的以画面质量换取时间的能力,可按照用户需求划分实时性能等级。实时性能等级越高,画面质量的衰减就越强;反之亦反。在可分辨的画面质量阀值范围内,依据实时性能要求调节上行数据占原始数据的比例和插值算法类型(还可使用双线性插值和8点法插值),便可订制用户对视频质量和处理速度的不同需求。

附图说明

本发明将通过例子并参照附图的方式说明,其中:

图1是本发明的整体流程图;

图2是本发明中将全幅面影像数据筛选为部分幅面影像数据及上行示意图;

图3是本发明中利用插值算法重构全幅面影像数据的示意图。

具体实施方式

本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。

下面结合图1-3对本发明作详细说明。

一种利用部分幅面数据实现快速处理大幅面视频图像的方法,包括以下步骤:

步骤1:cpu将对全幅面影像数据进行筛选,得到部分幅面影像数据;

步骤2:cpu将所述部分幅面影像数据上行至gpu;

步骤3:gpu将所述部分幅面数据重构为全幅面影像数据;

步骤4:gpu输出重构后的全幅面影像数据。

所述步骤1具体为:

s100:cpu从内存中取出全幅面影像数据,共i行,使用解码器解码所述全幅面影像数据;

s101:cpu计算解码后全幅面影像数据中每一行数据占用的储存量u;

s102:设置行号的筛选步长为s,所述筛选步长s跨越的数据量为su,s为正整数;设置筛选函数adri=ui+adr0,其中,i表示全幅面影像数据的行号,adri表示第i行数据的储存地址,adr0表示第0行数据的储存地址;

s103:利用所述筛选函数筛选出需要上行至gpu的部分幅面影像数据,并计算所述部分幅面影像数据的总数据量;所述部分幅面影像数据中数据的行号i取0,s,2s,...,ks,其中k为整数且ks为小于i的最大正整数。

所述步骤2具体为:

s201:gpu在显存中分配纹理缓存a和纹理缓存b,所述纹理缓存a用于储存cpu上行的部分幅面影像数据,所述纹理缓存b用于储存重构的全幅面影像数据;

s202:cpu将所述部分影像数据上行至所述纹理缓存a中。

所述步骤3中重构的方法为:gpu利用插值算法对纹理缓存a中的部分幅面数据进行处理,并将处理结果储存在纹理缓存b中。

重构的具体步骤如下:

s301:针对所述部分幅面数据中的第0行至第ks行,将纹理缓存a中的数据复制到所述纹理缓存b中;

s302:利用第i行的数据和第i+s行的数据计算纹理缓存b中第i+1行到第i+s-1行的数据,计算公式如下:

其中当i不是s的倍数时,纹理缓存b中第ks+1行至第i行的数据均为第ks行中的数据。

具体实施例1

一种利用部分幅面数据实现快速处理大幅面视频图像的方法,包括以下步骤:

步骤1:cpu将对全幅面影像数据进行筛选,得到部分幅面影像数据;

步骤2:cpu将所述部分幅面影像数据上行至gpu;

步骤3:gpu将所述部分幅面数据重构为全幅面影像数据:

步骤4:gpu输出重构后的全幅面影像数据。

部分幅面影像数据可采用半幅面影像数据、三分之一影像数据等,数据量越少,虽然画面质量衰减较高,但传输速率提高,加快了预览的速度。

具体实施例2

本实施例以将全幅面影像数据筛选为半幅面影像数据为例进行说明:

s100:cpu从内存中取出全幅面影像数据,4k全幅面影像数据共有2160行,使用解码器解码所述全幅面影像数据,解码器可采用dnxhd编解码器;

s101:cpu计算解码后全幅面影像数据中每一行数据占用的储存量u,数据量u为2kb;

s102:设置行号的筛选步长为s=2,所述筛选步长2跨越的数据量为4kb;设置筛选函数adri=2i+adr0,其中,i表示全幅面影像数据的行号,adri表示第i行数据的储存地址,adr0表示第0行数据的储存地址;

s103:利用所述筛选函数筛选出需要上行至gpu的部分幅面影像数据,并计算所述部分幅面影像数据的总数据量d,d=2160kb;所述部分幅面影像数据中数据的行号i取0,

2,4,...,2160。

s201:gpu在显存中分配纹理缓存a和纹理缓存b,所述纹理缓存a用于储存cpu上行的部分幅面影像数据,即所述纹理缓存a的容量至少为2160kb,所述纹理缓存b用于储存重构的全幅面影像数据,即纹理缓存b的容量至少为4320kb;

s202:cpu将所述部分影像数据上行至所述纹理缓存a中。

s301:将纹理缓存a中行号为0,2,4,...,2160的数据复制到所述纹理缓存b中,即将纹理缓存a中第0行的数据复制到纹理缓存b第0行的数据中,将纹理缓存a中第2行的数据复制到纹理缓存b第2行的数据中,以此类推,得到所述纹理缓存b中第0,2,4,...,2160中具有数据,而第1,3,5,...,2159行数据缺失;

s302:利用第i行的数据和第i+2行的数据计算纹理缓存b中第i+1行的数据,计算公式如下:

纹理缓存b中第1行的数据为第0行与第2行数据的均值,第3行的数据为第2行与第4行数据的均值,以此类推,将纹理缓存b中第1,3,5,...,2159行的数据进行填充,得到重构后的全幅面影像数据。

s4:将重构后的数据输出至内存以便传输和储存,或者输出至视频控制器完成图像的预览显示。

具体实施例3

本实施例以将全幅面影像数据筛选为三分之一幅面影像数据为例进行说明:

s100:cpu从内存中取出全幅面影像数据,4k全幅面影像数据共有2160行,使用解码器解码所述全幅面影像数据,解码器可采用dnxhd编解码器;

s101:cpu计算解码后全幅面影像数据中每一行数据占用的储存量u,数据量u为2kb;

s102:设置行号的筛选步长为s=3,所述筛选步长3跨越的数据量为6kb;设置筛选函数adri=2i+adr0,其中,i表示全幅面影像数据的行号,adri表示第i行数据的储存地址,adr0表示第0行数据的储存地址;

s103:利用所述筛选函数筛选出需要上行至gpu的部分幅面影像数据,并计算所述部分幅面影像数据的总数据量d,d=2160kb;所述部分幅面影像数据中数据的行号i取0,3,6,...,2160。

s201:gpu在显存中分配纹理缓存a和纹理缓存b,所述纹理缓存a用于储存cpu上行的部分幅面影像数据,即所述纹理缓存a的容量至少为1440kb,所述纹理缓存b用于储存重构的全幅面影像数据,即纹理缓存b的容量至少为4320kb;

s202:cpu将所述部分影像数据上行至所述纹理缓存a中。

s301:将纹理缓存a中行号为0,3,6,...,2160的数据复制到所述纹理缓存b中,即将纹理缓存a中第0行的数据复制到纹理缓存b第0行的数据中,将纹理缓存a中第3行的数据复制到纹理缓存b第3行的数据中,以此类推,得到所述纹理缓存b中第0,3,6,...,2160中具有数据,而第1,2,4,5,7,...,2158,2159行数据缺失;

s302:利用第i行的数据和第i+3行的数据计算纹理缓存b中第i+1行到第i+2行的数据,计算公式如下:

纹理缓存b中第1行的数据为第2行的数据为以此类推,将纹理缓存b中第1,2,4,5,7,...,2158,2159行的数据进行填充,得到重构后的全幅面影像数据。

s4:将重构后的数据输出至内存以便传输和储存,或者输出至视频控制器完成图像的预览显示。

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