首页> 中国专利> 一种利用GPU并行加速图像转换的屏幕图像获取方法

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

摘要

本发明公开的一种利用GPU并行加速图像转换的屏幕图像获取方法,包括以下步骤:利用GDI图形设备接口获取实时系统屏幕图像即RGB32图像,并基于OpenCL异构计算框架,利用GPU并行计算将获得的RGB32图像转换为视频编解码适用的YUV420图像,最终将YUV420图像数据推送出去。本发明的屏幕图像获取方法,对图像转换过程进行计算加速,大大提高了整体处理速度,支持高分辨率屏幕图像的实时获取。

著录项

  • 公开/公告号CN105163128A

    专利类型发明专利

  • 公开/公告日2015-12-16

    原文格式PDF

  • 申请/专利权人 华南理工大学;

    申请/专利号CN201510551426.0

  • 发明设计人 陆璐;古伟楷;

    申请日2015-08-31

  • 分类号H04N19/436;H04N19/40;H04N19/186;

  • 代理机构广州市华学知识产权代理有限公司;

  • 代理人陈宏升

  • 地址 510006 广东省广州市番禺区广州大学城华南理工大学

  • 入库时间 2023-12-18 12:50:07

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-08-09

    未缴年费专利权终止 IPC(主分类):H04N19/436 专利号:ZL2015105514260 申请日:20150831 授权公告日:20180413

    专利权的终止

  • 2018-04-13

    授权

    授权

  • 2016-01-13

    实质审查的生效 IPC(主分类):H04N19/436 申请日:20150831

    实质审查的生效

  • 2015-12-16

    公开

    公开

说明书

技术领域

本发明涉及一种利用GPU并行加速图像转换的屏幕图像获取方法,特别涉 及一种利用GPU并行加速图像转换的屏幕图像获取方法。

背景技术

DirectShow是针对基于微软Windows平台的流媒体应用的框架,能完美提 供高质量的多媒体流的数据采集和回放处理。它能为常见的高性能多媒体应用 如文件播放器、TV和DVD播放器、视频编辑软件、格式转换器、音视频采集 软件、解码器、编码器、数字信号处理器等提供完美的解决方案。DirectShow 支持丰富的流媒体数据格式和压缩格式,包括ASF、MPEG、AVI、MP3、WAV 音频文件等,和ACC、DV、H.264、MJPEG-1、MPEG-2等压缩格式。DirectShow 的出现,一方面帮助简化了多媒体应用开发过程中涉及的播放、格式转换、捕 获等任务;同时它还提供了可定制的解决方案来访问底层流媒体架构,开发人 员甚至还可以通过创建自己的DirectShow组件来支持不同的新格式和定制处理 效果。

图形设备接口(GraphicsDeviceInterface或GraphicalDeviceInterface,缩写 GDI),是微软公司视窗操作系统(MicrosoftWindows)的三大核心部件(也称 “子系统”)之一。GDI是微软视窗系统表征图形对象及将其传送给诸如显示器、 打印机之类输出设备的标准。图形设备接口的出现使程序员无需要关心硬件设 备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程 序开发者与硬件设备的隔离,大大方便了开发工作。GDI最大的好处是它有可 以直接访问硬件设备的能力。通过GDI可以非常容易的在不同类型的设备上绘 制图形,像显示屏和打印机或类似的显示设备。这些能力是微软Windows系统 “所见即所得”程序的核心。

在WindowsSDK的PushSourceFiltersSample中,有利用GDI接口获取当 前屏幕图像的DirectShowFilter参考代码,其功能单一并仅获取了当前屏幕的 RGB32图像进行输出。RogerPack在开源项目screen-capture-recorder中对其进 行了改善,并增加了将图像转换为视频编解码适用的YUV420图像数据的功能。 但是由于图像转换计算量较大,图像转换的处理速度非常低下,导致对于较大 分辨率的屏幕图像无法实现实时获取。

发明内容

本发明的目的在于克服现有技术的缺点与不足,提供一种利用GPU并行加 速图像转换的屏幕图像获取方法。

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

一种利用GPU并行加速图像转换的屏幕图像获取方法,包括以下步骤:

利用GDI图形设备接口获取实时系统屏幕图像即RGB32图像,并基于OpenCL 异构计算框架,利用GPU并行计算将获得的RGB32图像高效转换为视频编解码 适用的YUV420图像,最终将YUV420图像数据推送出去。

所述的获取实时系统屏幕图像,是通过DirectShowFilter实现的,DirectShow Filter命名为ScreenRecorder,ScreenRecorder仅具有一个输出Pin,输出Pin的 媒体类型为视频流MEDIATYPE_Video/MEDIASUBTYPE_NV12,Screen Recorder的整体对外功能为按设定的频率获取屏幕区域图像,并将其以YUV 4:2:0图像数据的NV12格式码流输出到下游Filter中。

ScreenRecorder继承自DirectShowFilter的基类库中的CSource,利用其中 的DirectShowSourceFilter基本功能的实现。ScreenRecorder的主要功能实现在 于其输出Pin中,ScreenRecorder中定自定义了一个输出Pin类作为其输出Pin 使用的类,命名为“ScreanRecorderPin”。ScreanRecorderPin继承自DirectShow Filter的基类库中的CSourceStream,利用其中的输出Pin的连接和数据传输等基 本功能的实现,数据传输方式属于Push模式。

ScreenRecorder获取屏幕区域图像的工作基于微软的Windows图形设备接 口(GraphicsDeviceInterface,GDI)来进行,获取到的图像数据为RGB颜色空间 的位图图像数据格式。ScreenRecorder会将获取到的屏幕区域图像根据用户设置 的图像处理要求,进行相应的图像处理后,将其从RGB颜色空间的位图图像数 据格式转换为YUV4:2:0图像数据的NV12格式码流进行输出。这部分图像处理 和格式转换工作基于OpenCL异构计算框架进行开发实现,利用GPU并行计算 实现高性能低功耗的图像处理和格式转换,同时降低CPU计算资源的占用。

所述的ScreenRecorder,其工作流程为:

ScreenRecorder获取到屏幕区域图像后,根据图像大小创建OpenCLBuffer 用以存放图像数据,用来和GPU设备进行数据传输;

将图像数据写入到OpenCLBuffer中后,对OpenCLBuffer中的图像根据用 户设置的图像处理要求进行相应的图像处理工作;

图像处理完成后,将OpenCLBuffer中的图像数据从RGB颜色空间的位图 图像数据格式转换为YUV4:2:0图像数据的NV12格式存放;

完成图像数据转换后,从OpenCLBuffer中读取NV12格式图像数据回到系 统内存中;

最后跟据输出媒体类型将此图像数据封装成Sample并传递给下游Filter中, 进入下一次获取屏幕区域图像的循环中。

所述的图像处理和图像数据转换,都以OpenCLBuffer作为图像数据的存储 载体,即这部分图像处理和图像数据转换工作过程中,图像数据都存放在GPU 管理的显存中,和CPU管理的系统内存之间没有额外的数据传输操作;直到图 像数据转换成NV12格式图像数据后,才从OpenCLBuffer中取回输出的图像数 据到系统内存中。

所述的图像处理和图像数据转换,都在GPU上进行,并且只进行了两次host 端(系统内存)和device端(显存)之间的数据传输,分别是:(1)进行图像处 理和图像数据转换前,将图像数据从host端(系统内存)传输到device端(显 存);(2)图像处理和图像数据转换完成后,将图像数据从device端(显存)取 回到host端(系统内存)中。

所述的GPU并行计算,包含以下步骤:

根据OpenCL异构计算框架和NV12图像存储格式的特点,对转换图像的每 个2×2像素区域安排一个work-item进行颜色空间转换和色度亚采样计算;

每个work-item从输入的RGB32图像中读取对应像素数据,并将计算结果 数据按照NV12图像存储格式存放到输出图像中;在这种安排下,每个work-item 只需要从输入图像中读取其对应的2×2像素区域中4个RGB32像素数据,并 将转换结果数据写入输出图像中Y-plane对应的2×2像素区域的4个字节数据 和UV-plane对应的一个像素的2个字节数据。不同的work-item之间不存在数 据访问冲突。

鉴于常用的标准视频尺寸中,图像宽度和高度均为16的倍数,所以对转换 图像的每个16×16像素区域的颜色空间转换和色度亚采样计算工作安排在一个 work-group中进行,每个work-group的大小为8×8,其中有64个work-item。 由于一个work-item负责一个2×2像素区域的颜色空间转换和色度亚采样计算 工作,所以每个work-group的大小为8×8,其中有64个work-item。而且根据 AMDGPU的设备信息(KernelPreferredworkgroupsizemultiple),将work-group 大小设置为64也较为适宜。

所述的GPU并行计算,具体包含以下步骤:

进行滤波计算前,检查当前work‐item对应像素位置是否超出处理图像范围, 若超出则不进行后续计算和操作(由于SIMD计算核心特性,实际执行时仍然进 行了计算,但会舍弃计算结果不输出);

利用GPU高带宽内存访问能力,从输入的RGB32图像读入2×2像素区域 数据时,使用内置内存访问函数vload8分别将2对连续存放的2个像素点的4 个通道分量一次性读取到寄存器中,减少内存访问请求;对于输入图像共进行 了2次内存读取的访问请求;

根据输入的4个RGB32像素数据,计算得出4个亮度Y值和1对色度UV 值;

利用GPU高带宽内存访问能力,将4个亮度Y值和1对色度UV值写入输 出图像时,使用内置内存访问函数vstore2分别将2对连续存放的2个像素点的 亮度Y值和1对色度UV值一次性写入到输出图像的Y‐plane和UV‐plane中,减 少内存访问请求,对于输出图像共进行了3次内存写入的访问请求。

本发明与现有技术相比,具有如下优点和有益效果:

在传统的屏幕图像获取方法中,仅使用CPU完成所有处理工作,包括计算 量较大的图像转换过程。与之相比,本发明基于OpenCL异构计算框架,利用 GPU并行计算带来的强大并行计算能力,对图像转换过程进行计算加速,大大 提高了整体处理速度,支持高分辨率屏幕图像的实时获取。

附图说明

图1为ScreenRecorder的工作原理图。

图2为ScreenRecorder的工作流程图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方 式不限于此。

一种利用GPU并行加速图像转换的屏幕图像获取方法,包括以下步骤:

利用GDI图形设备接口获取实时系统屏幕图像即RGB32图像,并基于OpenCL 异构计算框架,利用GPU并行计算将获得的RGB32图像高效转换为视频编解码 适用的YUV420图像,最终将YUV420图像数据推送出去。

具体如下:

(一)屏幕图像获取Filter设计

提供利用GPU并行加速图像转换的屏幕区域图像获取并转换为视频图像序 列功能的DirectShowFilter命名为“ScreenRecorder”,属于SourceFilter,仅具 有一个输出Pin,输出Pin的媒体类型为视频流MEDIATYPE_Video/ MEDIASUBTYPE_NV12。ScreenRecorder的整体对外功能为按设定的频率获取 屏幕区域图像,并将其以YUV4:2:0图像数据的NV12格式码流输出到下游Filter 中。

ScreenRecorder继承自DirectShowFilter的基类库中的CSource,利用其中 的DirectShowSourceFilter基本功能的实现。如图1,ScreenRecorder的主要功 能实现在于其输出Pin中,ScreenRecorder中定自定义了一个输出Pin类作为其 输出Pin使用的类,命名为“ScreanRecorderPin”。ScreanRecorderPin继承自 DirectShowFilter的基类库中的CSourceStream,利用其中的输出Pin的连接和数 据传输等基本功能的实现,数据传输方式属于Push模式。

ScreenRecorder获取屏幕区域图像的工作基于微软的Windows图形设备接 口(GraphicsDeviceInterface,GDI)来进行,获取到的图像数据为RGB颜色空间 的位图图像数据格式。ScreenRecorder会将获取到的屏幕区域图像根据用户设置 的图像处理要求,进行相应的图像处理后,将其从RGB颜色空间的位图图像数 据格式转换为YUV4:2:0图像数据的NV12格式码流进行输出。这部分图像处理 和格式转换工作基于OpenCL异构计算框架进行开发实现,利用GPU并行计算 实现高性能低功耗的图像处理和格式转换,同时降低CPU计算资源的占用。

ScreenRecorder的主要工作流程如图2所示。ScreenRecorder获取到屏幕区 域图像后,根据图像大小创建OpenCLBuffer用以存放图像数据,用来和GPU 设备进行数据传输。将图像数据写入到OpenCLBuffer中后,对OpenCLBuffer 中的图像根据用户设置的图像处理要求进行相应的图像处理工作。图像处理完 成后,将OpenCLBuffer中的图像数据从RGB颜色空间的位图图像数据格式转 换为YUV4:2:0图像数据的NV12格式存放。完成图像数据转换后,从OpenCL Buffer中读取NV12格式图像数据回到系统内存中。图像处理和图像数据转换工 作都以OpenCLBuffer作为图像数据的存储载体,即这部分图像处理和图像数据 转换工作过程中,图像数据都存放在GPU管理的显存中,和CPU管理的系统 内存之间没有额外的数据传输操作。直到图像数据转换成NV12格式图像数据 后,才从OpenCLBuffer中取回输出的图像数据到系统内存中。所有图像处理和 图像数据转换工作都在GPU上进行,并且只进行了两次host端(系统内存)和 device端(显存)之间的数据传输,分别是:(1)进行图像处理和图像数据转换 前,将图像数据从host端(系统内存)传输到device端(显存);(2)图像处理 和图像数据转换完成后,将图像数据从device端(显存)取回到host端(系统 内存)中。最后跟据输出媒体类型将此图像数据封装成Sample并传递给下游 Filter中,进入下一次获取屏幕区域图像的循环中。

(二)GPU并行加速图像转换

根据OpenCL异构计算框架和NV12图像存储格式的特点,对转换图像的每 个2×2像素区域安排一个work-item进行颜色空间转换和色度亚采样计算。每 个work-item从输入的RGB32图像中读取对应像素数据,并将计算结果数据按 照NV12图像存储格式存放到输出图像中。在这种安排下,每个work-item只需 要从输入图像中读取其对应的2×2像素区域中4个RGB32像素数据,并将转 换结果数据写入输出图像中Y-plane对应的2×2像素区域的4个字节数据和 UV-plane对应的一个像素的2个字节数据。不同的work-item之间不存在数据访 问冲突。

鉴于常用的标准视频尺寸中,图像宽度和高度均为16的倍数,所以对转换 图像的每个16×16像素区域的颜色空间转换和色度亚采样计算工作安排在一个 work-group中进行。由于一个work-item负责一个2×2像素区域的颜色空间转 换和色度亚采样计算工作,所以每个work-group的大小为8×8,其中有64个 work-item。而且根据AMDGPU的设备信息(KernelPreferredworkgroupsize multiple),将work-group大小设置为64也较为适宜。

在kernel实现中有以下计算逻辑:

1、进行滤波计算前,检查当前work‐item对应像素位置是否超出处理图像 范围,若超出则不进行后续计算和操作。(由于SIMD计算核心特性,实际执行 时仍然进行了计算,但会舍弃计算结果不输出。)

2、利用GPU高带宽内存访问能力,从输入的RGB32图像读入2×2像素区 域数据时,使用内置内存访问函数vload8分别将2对连续存放的2个像素点的 4个通道分量一次性读取到寄存器中,减少内存访问请求。对于输入图像共进行 了2次内存读取的访问请求。

3、根据输入的4个RGB32像素数据,通过4.2.1中所述公式进行计算得出 4个亮度Y值和1对色度UV值。

4、利用GPU高带宽内存访问能力,将计算结果4个亮度Y值和1对色度 UV值写入输出图像时,使用内置内存访问函数vstore2分别将2对连续存放的2 个像素点的亮度Y值和1对色度UV值一次性写入到输出图像的Y‐plane和 UV‐plane中,减少内存访问请求。对于输出图像共进行了3次内存写入的访问 请求。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实 施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、 替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号