一种游戏引擎采集卡视频采集方法与流程

文档序号:12748183阅读:383来源:国知局
一种游戏引擎采集卡视频采集方法与流程

本发明涉及视频处理技术领域,特别是一种游戏引擎采集卡视频采集方法。



背景技术:

现有主流游戏引擎内部的视频采集功能只包含针对USB摄像头的采集,无法通过普通的USB摄像头来实时采集高端摄像机的拍摄内容,首先它是在三维引擎内部创建用于存放采集素材的Texture容器,此Texuter的usage只能为DEFAULT类型,无法被GPU直接访问。在引擎内部提供创建的Texture指针给插件;插件内部运行采集卡SDK采集图片序列储存到内存中;使用显卡底层Directx的UpdateSubresource()方法把内存中的采集图像数据复制到显存中,同时把数据通过接收的Texture指针赋予在三维引擎内创建的Texture。但是,UpdateSubresource()的更新方式并不是恒定CPU开销的,因为该函数的执行分两种情况:

一种是资源处于contention状态,即紧急状态,则该函数会执行两部复制,第一步是CPU端会复制这段内存到一段GPU可访问的临时内存中,然后函数返回。当command buffer被flush时,再进行第二次异步copy,会从刚才那段临时内存copy到需要的资源。

另外一种情况是资源并未处于contention状态,非紧急的状态,则该函数是直接复制到目标资源中去,执行两次copy,取决于硬件的架构。

因此说明此函数执行时间并不是一个明确的可以追踪的值,而是取决于具体设备的render情况。由于Texture类型为DEFAULT,无法被GPU访问,所以都需要进行两次copy。

在使用UpdateSubresource()更新texture,应为本身储存采集数据的内存无法被GPU访问,需要在内存中开辟一个临时内存空间,用于GPU访问,再由GPU访问此内存更新textrue。导致整体更新texture时间加长,如果采集1920*1080像素30fps,需要至少每秒更新30张texture,即每张更新时间需要少于33.33毫秒,而使用此方法更新的时间会浮动大于33.33毫秒,导致更新速度小于播放速度,在播放的时候就会随机出现卡顿现象。影响观看者的体验。

因此,需要一种在游戏引擎中能实时流畅采集视频拍摄画面的采集方法。



技术实现要素:

本发明的目的是提出一种在游戏引擎中能实时流畅采集视频拍摄画面的采集方法;该方法解决了在游戏引擎中无法通过采集卡实时流畅的采集摄像机拍摄画面的问题。

本发明的目的是通过以下技术方案来实现的:

本发明提供的游戏引擎采集卡视频采集方法,包括以下步骤:

S1:采集图像数据;

S2:通过采集卡获取图像数据;

S3:将图像数据传输到内存;

S4:在显存中创建图像数据保存容器;

S5:设置图像数据保存容器的图像读取类型为动态读取类型;

S6:开启显存中图像数据保存容器的CPU修改权限;

S7:将内存中的图像数据复制到显存中的图像数据保存容器;

S8:关闭显存中图像数据保存容器的CPU修改权限;

S9:更新显存中图像数据至屏幕显示。

进一步,所述图像数据保存容器是通过Directx在显存中创建贴图数据存储区。

进一步,所述开启显存中图像数据保存容器的CPU修改权限是通过调用Directx中的函数map()来实现的。

进一步,所述关闭显存中图像数据保存容器的CPU修改权限是通过调用Directx中的函数unmap()来实现的。

进一步,所述图像数据通过摄像机获取,并通过SDI输出端口将图像数据传输至视频采集卡的SDI输入端口。

进一步,所述图像数据通过摄像机获取,并通过HDMI输出端口将图像数据传输至视频采集卡的HDMI输入端口。

由于采用了上述技术方案,本发明具有如下的优点:

本发明提供的游戏引擎采集卡视频采集方法,通过设置能被GPU访问的DYNAMIC类型的Texture,无需创建中间的临时内存转换,可直接复制内存中的采集数据到Texture中,节省了大量时间,实际测试中,复制采集数据到Texture,如果使用采集到内存中的texture,还需要进行中间转换,导致延迟增加,Texture直接创建在显存中,在用Map()Unmap()方法打开CPU读取修改权限后直接修改,修改后可以直接使用GPU访问,降低的中间复制资源的时间开销,中时间小于1毫秒每张,比之前的速度有极大的提高,在引擎中播放采集素材的时候不会有任何卡顿现象。

本发明提供的游戏引擎采集卡视频采集方法,可以实时的采集高端摄像机的拍摄内容,达到影视级别的图像效果,通过设置能直接被显卡访问的动态更新类型的容器,无需创建中间的临时内存转换,可直接复制内存中的采集数据到容器中,节省了大量时间,实际测试中,中间复制资源的时间开销,中时间每张在1毫秒左右,比之前的速度有极大的提高,在引擎中播放采集素材的时候不会有任何卡顿现象。

本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。

附图说明

本发明的附图说明如下。

图1为游戏引擎采集卡结构示意图。

图2为游戏引擎采集卡视频采集方法流程图。

图3为游戏引擎采集卡视频采集启动阶段流程图。

图4为内存图像数据采集循环流程图。

图5为显存图像数据更新循环流程图。

具体实施方式

下面结合附图和实施例对本发明作进一步说明。

实施例1

如图1所示,图1为游戏引擎采集卡结构示意图;摄像机采集外部图像数据,然后由视频采集卡获取并传送到计算机中,进行处理;如图2所示,本实施例提供的游戏引擎采集卡视频采集方法,包括以下步骤:

S1:采集图像数据;所述图像数据通过摄像机获取,并通过SDI输出端口将图像数据传输至视频采集卡的SDI输入端口。所述图像数据通过摄像机获取,并通过HDMI输出端口将图像数据传输至视频采集卡的HDMI输入端口。

S2:通过采集卡获取图像数据;

S3:将图像数据传输到内存;

S4:在显存中创建图像数据保存容器;所述图像数据保存容器是通过Directx在显存中创建贴图数据存储区。

S5:设置图像数据保存容器的图像读取类型为动态读取类型;

S6:开启显存中图像数据保存容器的CPU修改权限;所述开启显存中图像数据保存容器的CPU修改权限是通过调用Directx中的函数map()来实现的。

S7:将内存中的图像数据复制到显存中的图像数据保存容器;

S8:关闭显存中图像数据保存容器的CPU修改权限;所述关闭显存中图像数据保存容器的CPU修改权限是通过调用Directx中的函数unmap()来实现的。

S9:更新显存中图像数据至屏幕显示。

实施例2

如图3-5所示,本实施例提供的游戏引擎采集卡视频采集方法,包括以下步骤:

S1:通过视频采集卡采集图像数据并传输到内存中;启动时,检查是否安装采集卡,如果没有,则停止采集流程;如果有,则检查是否安装驱动;如果否,则停止采集流程;如果安装了驱动,则检查是否可启动视频采集接口,如果否,则停止采集流程;如果是,则设置采集视频帧率尺寸和色彩空间;然后进行视频采集;

S2:通过显卡中的Directx创建Texture,设置Texture的usage类型为DYNAMIC;具体设置如下:采集时,检查显存中是否创建图书数据保存容器,如果没有创建,则停止更新循环;如果创建了,则进行下一步;

ID3D11Texture2D*renderTargetTexture=nullptr;

初始化创建ID3D11Texture2D类型的指针,用于指定图像数据的内存地址;

D3D11_TEXTURE2D_DESC textureDesc;//初始化数据块D3D11_TEXTURE2D_DESC

textureDesc.Width=960;//设置图像宽度

textureDesc.Height=1080;//设置图像高度

textureDesc.MipLevels=1;//设置不使用多级渐进纹理过滤

textureDesc.ArraySize=1;//图像列队中图像的数量

textureDesc.Format=DXGI_FORMAT_R8G8B8A8_UNORM;//图像的格式

textureDesc.Usage=D3D11_USAGE_DYNAMIC;//定义图像怎样被读取和写入

textureDesc.BindFlags=D3D11_BIND_SHADER_RESOURCE;//定义如何将资源绑定到渲染管线中

textureDesc.CPUAccessFlags=D3D11_CPU_ACCESS_WRITE;//定义CPU访问权限

textureDesc.MiscFlags=0;//定义其他不常见的资源选项

textureDesc.SampleDesc.Count=1;//定义图像每个像素采样次数

textureDesc.SampleDesc.Quality=0;//定义图像精度

创建图像数据的描述信息,用于设置图像数据的信息,在Directx11中textureDesc.Usage必须是D3D11_USAGE_DYNAMIC,只有这个参数是特征点,其他参数是可以修改的;D3D11_USAGE_DYNAMIC类型设置此资源可以被CPU写入,GPU读取,图像每帧都由cpu修改;CreateTexture2D(&textureDesc,NULL,&renderTargetTexture;使用之前创建的textureDesc图像描述信息和renderTargetTexture指针创建资源填充renderTargetTexture指针;

S3:通过调用map()函数打开CPU读取与修改的权限;

D3D11_MAPPED_SUBRESOURCE mappedResource;

创建D3D11_MAPPED_SUBRESOURCE类型资源,用于map函数读取写入数据;

Map(renderTargetTexture,0,D3D11_MAP_WRITE_DISCARD,0,&mappedResource);

Map函数介绍:获取数据指针,设置相应权限;

第1个参数为需要设置的资源,及之前创建的renderTargetTexture

第2个参数设置是否包含子资源,0为无子资源

第3个参数cpu访问权限D3D11_MAP_WRITE_DISCARD为写入权限

第4个参数设置当GPU繁忙时cpu如何处理,0为不处理

第5个参数为输出参数,定义了将资源复制到的位置,及mappedResource

S4:将内存中图像数据复制到Texture中;memcpy(mappedResource.pData,buffer,1920*1080*2);第一个参数mappedResource.pData为需要复制到的资源;第二个参数Buffer为采集的图像数据,及原始数据;1920*1080*2为复制数据的大小;当mappedResource.pData被采集图像数据填充后,创建renderTargetTexture会被自动填充上采集图像数据。

S5:通过调用unmap()函数关闭cpu读取与修改权限;Unmap(renderTargetTexture,0);使目标资源重新获得GPU访问权限;第一个参数renderTargetTexture为目标资源;第二个参数设置是否包含子资源,0为不包含;

S6:返回显存图像数据;

S7:根据游戏引擎中的图像数据和显存图像数据进行更新图像数据。所述图像数据通过摄像机获取,并通过SDI输出端口将图像数据传输至视频采集卡的SDI输入端口。所述图像数据通过摄像机获取,并通过HDMI输出端口将图像数据传输至视频采集卡的HDMI输入端口。

本实施例提供的采集方法是通过游戏引擎视频采集系统来采集摄像机拍摄画面的,该采集系统包括电脑(计算机)、视频采集卡和摄像机;摄像机通过输出端口SDI输出端口或HDMI输出端口,把视频数据传输至电脑采集卡SDI输入端口或HDMI输入端口,电脑通过端口接受数据后把数据储存至内存中。

本实施例提供的CPU表示计算机中的中央处理器;通过采集卡采集摄像机的图像拍摄数据流,应用到游戏引擎中来,分三个步骤:一是启动时候的初始化,二是图像数据的采集,三是图像数据的更新。

如图所示,通过显卡中的Directx创建Texture,设置Texture的usage类型为DYNAMIC,以便能够被GPU实时访问;

本实施例提供的texture表示在游戏制作里面的贴图或纹理。

usage类型定义图像怎样被读取和写入;

map()表示获取数据指针,设置相应权限;

unmap()表示使目标资源重新获得GPU访问权限;

CPU表示中央处理器;

GPU表示图形处理器;

DirectX表示是由微软公司创建的多媒体编程接口。

通过游戏引擎中的插件在内部运行采集卡SDK,并采集图片序列,将图片序列储存到内存中;在插件内部运行Directx的map()和unmap()方法,以更新采集数据,并将采集数据存储到Texture中。此方法能够快速复制内存资源到GPU中,无需中间转换。

本实施例提供的map()方法用于指定相应的资源,并且拒绝GPU访问,而使用CPU访问。在开放CPU访问权限后设置改资源,用于复制图像采集数据;unmap()方法用于关闭CPU访问,使用GPU访问该资源。

本实施例提供的在引擎中直接读取插件内部创建的Texture是基于Microsoft DirectX技术,所述的Windows的计算机是运行和显示应用程序的理想平台,该平台具有丰富的多媒体元素,如全色图形、视频、3D动画和丰富音频;DirectX包括安全和性能更新程序,以及许多涵盖所有技术的新功能。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的保护范围当中。

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