一种利用gpu并行加速图像转换的屏幕图像获取方法

文档序号:8946103阅读:599来源:国知局
一种利用gpu并行加速图像转换的屏幕图像获取方法
【技术领域】
[0001]本发明涉及一种利用GPU并行加速图像转换的屏幕图像获取方法,特别涉及一种利用GPU并行加速图像转换的屏幕图像获取方法。
【背景技术】
[0002]DirectShow是针对基于微软Windows平台的流媒体应用的框架,能完美提供高质量的多媒体流的数据采集和回放处理。它能为常见的高性能多媒体应用如文件播放器、TV和DVD播放器、视频编辑软件、格式转换器、音视频采集软件、解码器、编码器、数字信号处理器等提供完美的解决方案。DirectShow支持丰富的流媒体数据格式和压缩格式,包括 ASF、MPEG、AV1、MP3、WAV 音频文件等,和 ACC、DV、H.264、MJPEG-1、MPEG-2 等压缩格式。DirectShow的出现,一方面帮助简化了多媒体应用开发过程中涉及的播放、格式转换、捕获等任务;同时它还提供了可定制的解决方案来访问底层流媒体架构,开发人员甚至还可以通过创建自己的DirectShow组件来支持不同的新格式和定制处理效果。
[0003]图形设备接口(Graphics Device Interface 或 Graphical Device Interface,缩写GDI),是微软公司视窗操作系统(Microsoft Windows)的三大核心部件(也称“子系统”)之一。GDI是微软视窗系统表征图形对象及将其传送给诸如显示器、打印机之类输出设备的标准。图形设备接口的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。GDI最大的好处是它有可以直接访问硬件设备的能力。通过GDI可以非常容易的在不同类型的设备上绘制图形,像显示屏和打印机或类似的显示设备。这些能力是微软Windows系统“所见即所得”程序的核心。
[0004]在Windows SDK 的 Push Source Filters Sample 中,有利用 GDI 接口获取当前屏幕图像的DirectShow Filter参考代码,其功能单一并仅获取了当前屏幕的RGB32图像进行输出。Roger Pack在开源项目screen-capture-recorder中对其进行了改善,并增加了将图像转换为视频编解码适用的YUV420图像数据的功能。但是由于图像转换计算量较大,图像转换的处理速度非常低下,导致对于较大分辨率的屏幕图像无法实现实时获取。

【发明内容】

[0005]本发明的目的在于克服现有技术的缺点与不足,提供一种利用GPU并行加速图像转换的屏幕图像获取方法。
[0006]本发明的目的通过以下的技术方案实现:
[0007]—种利用GPU并行加速图像转换的屏幕图像获取方法,包括以下步骤:
[0008]利用⑶I图形设备接口获取实时系统屏幕图像即RGB32图像,并基于OpenCL异构计算框架,利用GPU并行计算将获得的RGB32图像高效转换为视频编解码适用的YUV420图像,最终将YUV420图像数据推送出去。
[0009]所述的获取实时系统屏幕图像,是通过DirectShow Filter实现的,DirectShowFilter 命名为 Screen Recorder, Screen Recorder 仅具有一个输出 Pin,输出 Pin 的媒体类型为视频流MEDIATYPE_Video/MEDIASUBTYPE_NV12,Screen Recorder 的整体对外功能为按设定的频率获取屏幕区域图像,并将其以YUV 4:2:0图像数据的NV12格式码流输出到下游 Filter 中。
[0010]Screen Recorder 继承自 DirectShow Filter 的基类库中的 CSource,利用其中的DirectShow Source Filter基本功能的实现。Screen Recorder的主要功能实现在于其输出Pin中,Screen Recorder中定自定义了一个输出Pin类作为其输出Pin使用的类,命名为“ScreanRecorderPin”。ScreanRecorderPin 继承自 DirectShow Filter 的基类库中的CSourceStream,利用其中的输出Pin的连接和数据传输等基本功能的实现,数据传输方式属于Push模式。
[0011]Screen Recorder获取屏幕区域图像的工作基于微软的Windows图形设备接口(Graphics Device Interface,⑶I)来进行,获取到的图像数据为RGB颜色空间的位图图像数据格式。Screen Recorder会将获取到的屏幕区域图像根据用户设置的图像处理要求,进行相应的图像处理后,将其从RGB颜色空间的位图图像数据格式转换为YUV 4:2:0图像数据的NV12格式码流进行输出。这部分图像处理和格式转换工作基于OpenCL异构计算框架进行开发实现,利用GPU并行计算实现高性能低功耗的图像处理和格式转换,同时降低CPU计算资源的占用。
[0012]所述的Screen Recorder,其工作流程为:
[0013]Screen Recorder获取到屏幕区域图像后,根据图像大小创建OpenCL Buffer用以存放图像数据,用来和GPU设备进行数据传输;
[0014]将图像数据写入到OpenCL Buffer中后,对OpenCL Buffer中的图像根据用户设置的图像处理要求进行相应的图像处理工作;
[0015]图像处理完成后,将OpenCL Buffer中的图像数据从RGB颜色空间的位图图像数据格式转换为YUV 4:2:0图像数据的NV12格式存放;
[0016]完成图像数据转换后,从OpenCL Buffer中读取NV12格式图像数据回到系统内存中;
[0017]最后跟据输出媒体类型将此图像数据封装成Sample并传递给下游Filter中,进入下一次获取屏幕区域图像的循环中。
[0018]所述的图像处理和图像数据转换,都以OpenCL Buffer作为图像数据的存储载体,即这部分图像处理和图像数据转换工作过程中,图像数据都存放在GPU管理的显存中,和CPU管理的系统内存之间没有额外的数据传输操作;直到图像数据转换成NV12格式图像数据后,才从OpenCL Buffer中取回输出的图像数据到系统内存中。
[0019]所述的图像处理和图像数据转换,都在GPU上进行,并且只进行了两次host端(系统内存)和device端(显存)之间的数据传输,分别是:(I)进行图像处理和图像数据转换前,将图像数据从host端(系统内存)传输到device端(显存);(2)图像处理和图像数据转换完成后,将图像数据从device端(显存)取回到host端(系统内存)中。
[0020]所述的GPU并行计算,包含以下步骤:
[0021]根据OpenCL异构计算框架和NV12图像存储格式的特点,对转换图像的每个2X2像素区域安排一个work-1tem进行颜色空间转换和色度亚采样计算;
[0022]每个work-1tem从输入的RGB32图像中读取对应像素数据,并将计算结果数据按照NV12图像存储格式存放到输出图像中;在这种安排下,每个work-1tem只需要从输入图像中读取其对应的2 X 2像素区域中4个RGB32像素数据,并将转换结果数据写入输出图像中Υ-ρIane对应的2X2像素区域的4个字节数据和UV-plane对应的一个像素的2个字节数据。不同的work-1tem之间不存在数据访问冲突。
[0023]鉴于常用的标准视频尺寸中,图像宽度和高度均为16的倍数,所以对转换图像的每个16X 16像素区域的颜色空间转换和色度亚采样计算工作安排在一个work-group中进行,每个work-group的大小为8X8,其中有64个work-1tem。由于一个work-1tem负责一个2X2像素区域的颜色空间转换和色度亚采样计算工作,所以每个work-group的大小为8X8,其中有 64 个 work-1tem。而且根据 AMD GPU 的设备信息(Kernel Preferred workgroup size multiple),将work-group大小设置为64也较为适宜。
[0024]所述的GPU并行计算,具体包含以下步骤:
[0025]进行滤波计算前,检查当前work -1tem对应像素位置是否超出处理图像范围,若超出则不进行后续计算和操作(由于SIMD计算核心特性,实际执行时仍然进行了计算,但会舍弃计算结果不输出);
[0026]利用GPU高带宽内存访问能力,从输入的RGB32图像读入2 X 2像素区域数据时,使用内置内存访问函数vloadS分别将2对连续存放的2个像素点的4个通道分量一次性读取到寄存器中,减少内存访问请求;对于输入图像共进行了 2次内存读取的访问请求;
[0027]根据输入的4个RGB32像素数据,计算得出4个亮度Y值和I对色度UV值;
[0028]利用GPU高带宽内存访问能力,将4个亮度Y值和I对色度UV值写入输出图像时,使用内置内存访问函数vstore2分别将2对连续存放的2个像素点的亮度Y值和I对色度UV值一次性写入到输出图像的Y - plane和UV - plane中,减少内存访问请求,对于输出图像共进行了 3次内存写入的访问请求。
[0029]本发明与现有技术相比,具有如下优点和有益效果:
[0030]在传统的屏幕图像获取方法中,仅使用CPU完成所有处理工作,包括计算量较大的图像转换过程。与之相比,本发明基于OpenCL异构计算框架,利用GPU并行计算带来的强大并行计算能力,对图像转换过程进行计算加速,大大提高了整体处理速度,支持高分辨率屏幕图像的实时获取。
【附图说明】
[0031]图1为Screen Recorder的工作原理图。
[0032]图2为Screen Recorder的工作流程图。
【具体实施方式】
[0033]下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
[0034]—种利用GPU并行加速图像转换的屏幕图像获取方法,包括以下步骤:
[0035]利用⑶I图形设备接口获取实时系统屏幕图像即RGB32图像,并基于OpenCL异构计算框架,利用GPU并行计算将获得的RGB32图像高效转换为视频编解码适用的YUV420图像,最终将YUV420图像数据推送出去。
[0036]具体如下:
[0037](一 )屏幕图像获取Filter设计
[0038]提供利用GPU并行加速图像转换的屏幕区域图像获取并转换为视频图像序列功能的 DirectShow Filter 命名为 “Screen Recorder”,属于 Source Filter,仅具有一个输出 Pin,输出 Pin 的媒体类型为视频流 MEDIATYPE_Video/MEDIASUBTYPE_NV12。Sc
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1