CN114579255A - 虚拟机的图像处理方法、装置、系统以及电子设备 - Google Patents
虚拟机的图像处理方法、装置、系统以及电子设备 Download PDFInfo
- Publication number
- CN114579255A CN114579255A CN202210217444.5A CN202210217444A CN114579255A CN 114579255 A CN114579255 A CN 114579255A CN 202210217444 A CN202210217444 A CN 202210217444A CN 114579255 A CN114579255 A CN 114579255A
- Authority
- CN
- China
- Prior art keywords
- image
- virtual machine
- module
- host
- host computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- General Engineering & Computer Science (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明提供了一种虚拟机的图像处理方法、装置、系统以及电子设备,应用于虚拟机对应的图像编码模块,虚拟机还对应有虚拟机的虚拟机运行模块以及虚拟机的宿主机,宿主机包含宿主机显卡;方法包括:利用宿主机显卡驱动提供的机制访问宿主机显卡的显存;其中,显存中储存有宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,图像渲染指令为虚拟机运行模块根据虚拟机的待渲染图像向宿主机显卡发送的图像渲染指令;通过宿主机显卡的GPU对显存中的图像数据进行编码,得到编码后的图像数据。本发明可以提高渲染图像的处理效率。
Description
技术领域
本发明涉及数据处理技术领域,尤其是涉及一种虚拟机的图像处理方法、装置、系统以及电子设备。
背景技术
目前,虚拟机运行软件通过自带的独立计算环境简单(Simple Protocol forIndependent Computing Environment,简称SPICE)协议或虚拟网络控制台(VirtualNetwork Console,简称VNC)协议进行图像传输。例如,在当前虚拟机运行软件的实现方式中,宿主机声卡数据由SPICE服务器或VNC服务器进行编码后进行传输。但是,对于现有的这种图像数据的处理方法,图像数据的传输效率较低。
发明内容
有鉴于此,本发明的目的在于提供一种虚拟机的图像处理方法、装置、系统以及电子设备,可以提高图像数据的传输效率。
第一方面,本发明实施例提供了一种虚拟机的图像处理方法,应用于所述虚拟机对应的图像编码模块,所述虚拟机还对应有所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;所述方法包括:
利用所述宿主机显卡驱动提供的机制访问所述宿主机显卡的显存;其中,所述显存中储存有所述宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,所述图像渲染指令为所述虚拟机运行模块根据所述虚拟机的待渲染图像向所述宿主机显卡发送的图像渲染指令;
通过所述宿主机显卡的图形处理器(Graphics Processing Unit,简称GPU)对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
在一种实施方式中,所述宿主机显卡驱动提供的机制包括:业务编程语言数据流机制(Enterprise Generation Language Stream,简称EGLStream)和/或直接存储器访问缓冲器(Direct Memory Access Buffer,简称DMABUF)机制。
在一种实施方式中,所述宿主机显卡驱动提供的机制为EGLStream机制;所述方法还包括:
在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令之前,基于所述EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于所述EGLStream初始化第一CUDA并创建CUeglStreamConnection,将所述CUeglStreamConnection连接至所述EGLStream上,以使所述虚拟机运行模块基于所述EGLStream机制初始化第二EGL接口和第一OpenGL接口并创建支持所述EGLStream的渲染环境;
将所述Stream数据流的文件句柄发送至所述虚拟机运行模块,以使所述虚拟机运行模块利用所述Stream数据流的文件句柄创建针对所述待渲染图像的图像区域。
在一种实施方式中,在所述通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据的步骤之后,所述方法还包括:
在所述图像编码模块的连接断开时,删除所述EGLStream的资源。
第二方面,本发明实施例提供了一种虚拟机的图像处理方法,所述虚拟机对应有图像编码模块、所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;所述方法包括:
所述虚拟机运行模块获取所述虚拟机的待渲染图像,并根据所述待渲染图像向所述宿主机显卡发送图像渲染指令;
所述宿主机显卡基于所述图像渲染指令进行渲染,并将渲染后得到的图像数据储存于所述宿主机显卡的显存中;
所述图像编码模块利用所述宿主机显卡驱动提供的机制访问所述显存,并通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
在一种实施方式中,所述宿主机显卡驱动提供的机制为EGLStream机制;
在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令的步骤之前,所述方法还包括:
所述图像编码模块基于所述EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于所述EGLStream初始化第一统一计算架构(Compute Unified Device Architecture,简称CUDA)并创建CUeglStreamConnection(数据流连接),将所述CUeglStreamConnection连接至所述EGLStream上;
所述虚拟机运行模块基于所述EGLStream机制初始化第二EGL接口和第一开放图形库(Open Graphics Library,简称OpenGL)接口,创建支持所述EGLStream的渲染环境;
所述图像编码模块将所述Stream数据流的文件句柄发送至所述虚拟机运行模块;
所述虚拟机运行模块利用所述Stream数据流的文件句柄创建针对所述待渲染图像的图像区域。
在一种实施方式中,在所述宿主机显卡基于所述图像渲染指令进行渲染的步骤之后,所述方法还包括:
所述虚拟机运行模块将所述宿主机显卡渲染后得到的所述图像数据对应映射于所述图像区域中,并向所述图像编码模块发送图像渲染完成的消息;
所述图像编码模块读取所述CUeglStreamConnection,并将所述CUeglStreamConnection发送至所述第一CUDA的应用程序接口(Application ProgrammingInterface,简称API),以基于所述API进行针对所述图像数据的编码操作。
在一种实施方式中,在所述图像编码模块通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据的步骤之后,所述方法还包括:
所述图像编码模块的连接断开时,删除所述EGLStream的资源;
所述虚拟机运行模块删除所述图像区域和所述EGLStream的资源。
在一种实施方式中,所述宿主机显卡驱动提供的机制为DMABUF机制;
在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令的步骤之前,所述方法还包括:
所述虚拟机运行模块基于所述DMABUF机制初始化第三EGL接口和第二OpenGL接口,创建第一纹理对象并对所述第一纹理对象分配所述显存,利用所述第一纹理对象创建第一EGLImage对象,调用eglExportDMABUFImageMESA(数据流连接)获取所述第一纹理对象的DMABUF描述符,基于所述DMABUF机制初始化第二CUDA,并将所述EGLImage对象注册至所述第二CUDA中;
所述图像编码模块基于所述DMABUF机制初始化第四EGL接口和第三OpenGL接口;
所述虚拟机运行模块将所述DMABUF描述符发送至所述图像编码模块;
所述图像编码模块利用所述DMABUF描述符创建第二EGLImage对象,并将所述第二EGLImage对象绑定第二纹理对象,以使所述第二纹理对象和所述第一纹理对象关联且均指向同一所述显存。
在一种实施方式中,在所述宿主机显卡基于所述图像渲染指令进行渲染的步骤之后,所述方法还包括:
所述虚拟机运行模块将所述宿主机显卡渲染后得到的图像数据对应映射于所述第一纹理对象上,并向所述图像编码模块发送图像渲染完成的消息;
所述图像编码模块在所述宿主机显卡为Nvidia显卡时,通过CUDA EGL互操作API读取所述图像数据,并将所述图像数据发送至CUDA编码库;
所述图像编码模块在所述宿主机显卡为AMD或INTEL开源驱动显卡时,通过视频加速接口(Video Acceleration API,Vaapi)EGL互操作API读取所述图像数据,并将所述图像数据发送至Vaapi进行编码。
在一种实施方式中,在所述图像编码模块通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据的步骤之后,所述方法还包括:
所述图像编码模块的连接断开时,删除所述第二纹理对象的资源;
所述虚拟机运行模块删除所述第一纹理对象的资源。
在一种实施方式中,所述DMABUF描述符包括:所述第一纹理对象的纹理格式信息和/或所述第一纹理对象的文件句柄。
第三方面,本发明实施例提供了一种虚拟机的图像处理装置,应用于所述虚拟机对应的图像编码模块,所述虚拟机还对应有所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;所述装置包括:
访问模块,用于利用所述宿主机显卡驱动提供的机制访问所述宿主机显卡的显存;其中,所述显存中储存有所述宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,所述图像渲染指令为所述虚拟机运行模块根据所述虚拟机的待渲染图像向所述宿主机显卡发送的图像渲染指令;
编码模块,用于通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
第四方面,本发明实施例提供了一种虚拟机的图像处理系统,包括:所述虚拟机对应的图像编码模块、所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;
所述虚拟机运行模块用于获取所述虚拟机的待渲染图像,并根据所述待渲染图像向所述宿主机显卡发送图像渲染指令;
所述宿主机显卡用于基于所述图像渲染指令进行渲染,并将渲染后得到的图像数据储存于所述宿主机显卡的显存中;
所述图像编码模块用于利用所述宿主机显卡驱动提供的机制访问所述显存,并通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
第五方面,本发明实施例提供了本发明实施例还提供一种电子设备,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现第一方面提供的任一项所述的方法。
第六方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现第一方面提供的任一项所述的方法。
本发明实施例提供的一种虚拟机的图像处理方法、装置、系统以及电子设备,应用于虚拟机对应的图像编码模块,虚拟机还对应有虚拟机的虚拟机运行模块以及虚拟机的宿主机,宿主机包含宿主机显卡,能够利用宿主机显卡驱动提供的机制访问宿主机显卡的显存,其中的显存中储存有宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,图像渲染指令为虚拟机运行模块根据虚拟机的待渲染图像向宿主机显卡发送的图像渲染指令,之后通过宿主机显卡的GPU对显存中的图像数据进行编码,得到编码后的图像数据。上述方法通过使图像编码模块利用宿主机显卡驱动提供的机制能够直接访问宿主机显卡的显存,不需要将数据从显存里面拷贝出来,图像编码模块能直接访问显存,所有操作在GPU内部完成,省去了图像数据从显存到系统内存,再从系统内存到显存两次耗时的操作,可以提高图像数据的传输效率。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种现有技术方案的示意图;
图2为本发明实施例提供的一种虚拟机的图像处理方法的流程示意图;
图3为本发明实施例提供一种数据交互机制的示意图;
图4为本发明实施例提供的另一种虚拟机的图像处理方法的流程示意图;
图5为本发明实施例提供的一种虚拟机的图像处理装置的结构示意图;
图6为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,如图1所示,虚拟机运行软件通过自带的SPICE协议或VNC协议进行图像传输。在当前虚拟机运行软件的实现方式中,宿主机显卡数据由SPICE服务器或VNC服务器进行编码后进行传输。虚拟机显卡(Virtual IO GPU,简称Virtio-GPU)发送渲染指令到宿主机显卡上,完成渲染后,将渲染后的数据拷贝到系统内存,通过进程间通信机制通知图像编码模块,图像编码模块从系统内存中将数据拷贝回显存,使用显卡编码API进行硬件编码。
但是,对于现有的这种图像数据的处理方法,SPICE\VNC协议传输能力比较差,不能满足实时性需求。而且现有的QEMU编码模块在QEMU内部,耦合性高。SPICE\VNC服务器需要从宿主机GPU显存里面拷贝数据这个过程耗时比较长。如果使用软件编码,性能较差且无法充分利用GPU的编码能力,如果使用GPU硬件编码,则又需要将数据拷贝回GPU显存,拷贝回的过程同样耗时。基于此,本发明实施例提供了一种虚拟机的图像处理方法、装置、系统以及电子设备,使图像编码模块利用宿主机显卡驱动提供的机制能够直接访问宿主机显卡的显存,从而提高了图像数据的传输效率。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种虚拟机的图像处理方法进行详细介绍,该方法可以应用于虚拟机对应的图像编码模块,虚拟机还对应有虚拟机的虚拟机运行模块以及虚拟机的宿主机,宿主机包含宿主机显卡,参见图2所示的一种虚拟机的图像处理方法的流程示意图,该方法主要包括以下步骤S210至步骤S220:
步骤S210,利用宿主机显卡驱动提供的机制访问宿主机显卡的显存。
其中,显存中储存有宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,图像渲染指令为虚拟机运行模块根据虚拟机的待渲染图像向宿主机显卡发送的图像渲染指令。
示例性的,如图3所示,虚拟机运行模块根据虚拟机的待渲染图像向宿主机显卡发送的图像渲染指令,显存中储存有宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,图像编码模块由于解耦到了虚拟机运行模块外部,因此需要利用宿主机显卡驱动提供的机制访问宿主机显卡的显存。
步骤S220,通过宿主机显卡的GPU对显存中的图像数据进行编码,得到编码后的图像数据。
示例性的,显卡由GPU以及显存等部分组成,虚拟机对应的图像编码模块通过宿主机显卡的GPU直接对显存中的图像数据进行编码,可以理解为,利用“零拷贝”的方法,即利用宿主机显卡驱动提供的机制实现虚拟机运行模块和图像编码模块共享显存,从而使图像编码模块通过宿主机显卡的GPU对显存中的图像数据进行编码,直接得到编码后的图像数据。
本方法通过使图像编码模块利用宿主机显卡驱动提供的机制能够直接访问宿主机显卡的显存,不需要将数据从显存里面拷贝出来,图像编码模块能直接访问显存,所有操作在GPU内部完成,省去了图像数据从显存到系统内存,再从系统内存到显存两次耗时的操作,可以提高图像数据的传输效率。
在一些实施例中,宿主机显卡驱动提供的机制可以包括多种类型,从而可以使本方法根据不同的机制较为灵活的适配于不同的显卡,使图像编码模块通过不同的机制直接访问宿主机的显卡资源,提高图像数据的传输效率。作为一个示例,宿主机显卡驱动提供的机制包括:EGLStream机制和/或DMABUF机制。
示例性的,EGLStream是Nvidia显卡驱动提供的一种在不同API之间高效传输图形画面的机制,是一种通用的现有的标准机制,这些API可以运行在不同的进程上。而DMABUF机制适用的较为广泛,可以应用于但不限于Nvidia、AMD以及INTEL等显卡。
通过使宿主机显卡驱动提供的机制可以包括多种类型,可以使本方法可以适配于不同种类的显卡,使应用更加广泛,提高图像数据的传输效率。
在一些实施例中,本方法可以根据宿主机显卡驱动提供不同的机制,灵活的适配于不同的宿主机显卡,使应用场景更加广泛,实现了通过多种机制使图像编码模块能够直接访问宿主机显卡的显存,在保证数据传输的情况下提高了图像数据的传输效率。作为一个示例,宿主机显卡驱动提供的机制为EGLStream机制;该方法还可以包括如下步骤:
步骤S200,在虚拟机运行模块根据待渲染图像向宿主机显卡发送图像渲染指令之前,基于EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于EGLStream初始化第一CUDA并创建CUeglStreamConnection,将CUeglStreamConnection连接至EGLStream上,以使虚拟机运行模块基于EGLStream机制初始化第二EGL接口和第一OpenGL接口并创建支持EGLStream的渲染环境;
步骤S202,将Stream数据流的文件句柄发送至虚拟机运行模块,以使虚拟机运行模块利用Stream数据流的文件句柄创建针对待渲染图像的图像区域。
其中,EGL是一种编程技术,旨在解决由较低层次的语言,框架和运行平台之上提供一个抽象层的现代的,多平台应用程序开发提供一个抽象层以上水平较低的语言,框架和运行时环境平台。CUDA是一种针对Nvidia显卡的运算平台,是一种通用并行计算架构,该架构使GPU能够解决复杂的计算问题。EGLStream是Nvidia显卡驱动提供的一种在不同API之间高效传输图形画面的机制,是一种通用的现有的标准机制,这些API可以运行在不同的进程上。CUeglStreamConnection是由CUDA创建的一种数据流,用于连接至EGLStream上。OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的接口,这个接口用来从简单的图形比特绘制复杂的三维景象。
示例性的,首先图像编码模块(业内常用Consumer代指图像编码模块)基于EGLStream机制初始化第一EGL接口,创建一个EGLStream,获取到该数据流的文件句柄。其中,在数据传输中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄,该文件句柄对于打开的文件是唯一的识别依据。之后基于图像编码模块EGLStream初始化第一CUDA并创建CUeglStreamConnection,将CUeglStreamConnection连接至EGLStream上,虚拟机运行模块(业内常用Producer代指图像编码模块)基于EGLStream机制初始化第二EGL接口和第一OpenGL接口,创建一个支持EGLStream的渲染环境,以便于与图像编码模块进行对接,进而对图像数据进行渲染。对接准备工作做好后,图像编码模块将获取到的文件句柄发送给虚拟机运行模块,虚拟机运行模块根据接收到的数据流的文件句柄创建针对待渲染图像的图像区域。
通过根据Nvidia显卡提供的EGLStream机制,使图像编码模块与虚拟机运行模块通过接口建立连接,并使虚拟机运行模块创建针对待渲染图像的图像区域,以便于图像编码模块针对图像数据进行渲染,使本方法可以根据宿主机显卡驱动提供不同的机制,灵活的适配于不同的宿主机显卡,使应用场景更加广泛,实现了通过多种机制使图像编码模块能够直接访问宿主机显卡的显存,进而提高图像数据的传输效率。
基于上述步骤S200和步骤S202,当图像数据编码完成后,图像编码模块可以灵活的根据连接状态对相关资源进行处理,避免相关资源占用空间,例如,当图像编码模块断开连接时,图像编码模块可以删除相关资源,从而避免对于空间的占用,避免影响设备性能。作为一个示例,在上述步骤S220之后,该方法还可以包括如下步骤:
步骤S230,在图像编码模块的连接断开时,删除EGLStream的资源。
示例性的,当图像编码模块的连接断开时,图像编码模块端可以通过删除的方式释放EGLStream的相关资源,而虚拟机运行模块端也可以通过删除的方式释放图像区域和EGLStream的相关资源。
通过删除本次渲染的图像的相关数据资源作为数据编码流程的结束,可以避免相关资源占用空间,还便于进行下一次图像的渲染。
为便于对本实施例进行理解,首先对本发明实施例所公开的另一种虚拟机的图像处理方法进行详细介绍,虚拟机对应有图像编码模块、虚拟机的虚拟机运行模块以及虚拟机的宿主机,宿主机包含宿主机显卡,参见图4所示的一种虚拟机的图像处理方法的流程示意图,该方法主要包括以下步骤S410至步骤S420:
步骤S410,虚拟机运行模块获取虚拟机的待渲染图像,并根据待渲染图像向宿主机显卡发送图像渲染指令。
示例性的,如图3所示,虚拟机运行模块首先获取虚拟机的待渲染图像。虚拟机运行模块以QEMU为例,QEMU是执行硬件虚拟化的通用和开源虚拟机监视器,它直接执行主机中央处理器(Central Processing Unit,简称CPU)的来宾代码,因此它实现了与当它被用作虚拟器接近本机的性能。虚拟机运行模块在获取虚拟机的待渲染图像后,可以根据待渲染图像向宿主机显卡发送图像渲染指令,以使宿主机显卡基于图像渲染指令对待渲染图像进行渲染。
步骤S420,宿主机显卡基于图像渲染指令进行渲染,并将渲染后得到的图像数据储存于宿主机显卡的显存中。
示例性的,如图3所示,宿主机显卡在接收到虚拟机运行模块发送的图像渲染指令后,根据指令对待渲染图像进行渲染,得到渲染后的图像数据,并将图像数据储存于显存之中。
步骤S430,图像编码模块利用宿主机显卡驱动提供的机制访问显存,并通过宿主机显卡的GPU对显存中的图像数据进行编码,得到编码后的图像数据。
示例性的,如图3所示,图像编码模块可以利用宿主机显卡驱动提供的机制直接访问宿主机显卡的显存,其中,不同的宿主机显卡驱动提供机制有所不同。图像编码模块访问显存后,可以通过宿主机显卡的GPU对显存中的图像数据进行编码,进而得到编码后的图像数据。
本方法通过使图像编码模块利用宿主机显卡驱动提供的机制能够直接访问宿主机显卡的显存,不需要将数据从显存里面拷贝出来,图像编码模块能直接访问显存,所有操作在GPU内部完成,省去了图像数据从显存到系统内存,再从系统内存到显存两次耗时的操作,可以提高图像数据的传输效率。
在一些实施例中,本方法可以根据宿主机显卡驱动提供不同的机制,灵活的适配于不同的宿主机显卡,使应用场景更加广泛,实现了通过多种机制使图像编码模块能够直接访问宿主机显卡的显存,在保证数据传输的情况下提高了图像数据的传输效率。作为一个示例,宿主机显卡驱动提供的机制为EGLStream机制;在上述步骤S410之前,该方法还可以包括如下步骤:
步骤a),图像编码模块基于EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于EGLStream初始化第一CUDA并创建CUeglStreamConnection,将CUeglStreamConnection连接至EGLStream上。
步骤b),虚拟机运行模块基于EGLStream机制初始化第二EGL接口和第一OpenGL接口,创建支持EGLStream的渲染环境。
步骤c),图像编码模块将Stream数据流的文件句柄发送至虚拟机运行模块。
步骤d),虚拟机运行模块利用Stream数据流的文件句柄创建针对待渲染图像的图像区域。
其中,EGL是一种编程技术,旨在解决由较低层次的语言,框架和运行平台之上提供一个抽象层的现代的,多平台应用程序开发提供一个抽象层以上水平较低的语言,框架和运行时环境平台。CUDA是一种针对Nvidia显卡的运算平台,是一种通用并行计算架构,该架构使GPU能够解决复杂的计算问题。EGLStream是Nvidia显卡驱动提供的一种在不同API之间高效传输图形画面的机制,是一种通用的现有的标准机制,这些API可以运行在不同的进程上。CUeglStreamConnection是由CUDA创建的一种数据流,用于连接至EGLStream上。OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的接口,这个接口用来从简单的图形比特绘制复杂的三维景象。
示例性的,首先图像编码模块(业内常用Consumer代指图像编码模块)基于EGLStream机制初始化第一EGL接口,创建一个EGLStream,获取到该数据流的文件句柄。其中,在数据传输中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄,该文件句柄对于打开的文件是唯一的识别依据。之后基于图像编码模块EGLStream初始化第一CUDA并创建CUeglStreamConnection,将CUeglStreamConnection连接至EGLStream上,虚拟机运行模块(业内常用Producer代指图像编码模块)基于EGLStream机制初始化第二EGL接口和第一OpenGL接口,创建一个支持EGLStream的渲染环境,以便于与图像编码模块进行对接,进而对图像数据进行渲染。对接准备工作做好后,图像编码模块将获取到的文件句柄发送给虚拟机运行模块,虚拟机运行模块根据接收到的数据流的文件句柄创建针对待渲染图像的图像区域。
通过根据Nvidia显卡提供的EGLStream机制,使图像编码模块与虚拟机运行模块通过接口建立连接,并使虚拟机运行模块创建针对待渲染图像的图像区域,以便于图像编码模块针对图像数据进行渲染,使本方法可以根据宿主机显卡驱动提供不同的机制,灵活的适配于不同的宿主机显卡,使应用场景更加广泛,实现了通过多种机制使图像编码模块能够直接访问宿主机显卡的显存,进而提高图像数据的传输效率。
基于上述步骤a)、步骤b)、步骤c)和步骤d),当图像渲染完成后,图像编码模块可以基于指定的API,准确高效的针对图像数据进行编码操作,例如,虚拟机运行模块可以向图像编码模块发送图像渲染完成的消息,从而使得图像编码模块可以基于指定的API针对图像数据进行编码操作。
作为一个示例,在上述步骤S420之后,该方法还可以包括如下步骤:
步骤e),虚拟机运行模块将宿主机显卡渲染后得到的图像数据对应映射于图像区域中,并向图像编码模块发送图像渲染完成的消息。
步骤f),图像编码模块读取CUeglStreamConnection,并将CUeglStreamConnection发送至第一CUDA的API,以基于API进行针对图像数据的编码操作。
示例性的,虚拟机运行模块启动渲染流程,利用宿主机显卡对图像进行渲染,并将宿主机显卡渲染后得到的图像数据输出到图像区域中,并通过前期建立的数据流接口向图像编码模块发送图像渲染完成的消息,通知图像编码模块一帧画面渲染完成。之后图像编码模块读取CUeglStreamConnection,并将其发送至第一CUDA的API,以基于API进行针对图像数据的编码操作。
通过使虚拟机运行模块将宿主机显卡渲染后得到的图像数据对应映射于图像区域中,并向图像编码模块发送图像渲染完成的消息,图像编码模块读取CUeglStreamConnection,并将CUeglStreamConnection发送至第一CUDA的API,以基于API进行针对图像数据的编码操作,使得图像渲染完成后,图像编码模块可以基于指定的API,准确高效的针对图像数据进行编码操作。
基于上述步骤a)、步骤b)、步骤c)和步骤d),当图像数据编码完成后,图像编码模块和虚拟机运行模块可以灵活的根据连接状态对相关资源进行处理,避免相关资源占用空间,例如,当图像编码模块断开连接时,图像编码模块和虚拟机运行模块可以删除相关资源,从而避免对于空间的占用,避免影响设备性能。作为一个示例,在上述步骤S430之后,该方法还可以包括如下步骤:
步骤g),图像编码模块的连接断开时,删除EGLStream的资源。
步骤h),虚拟机运行模块删除图像区域和EGLStream的资源。
示例性的,当图像编码模块的连接断开时,图像编码模块端可以通过删除的方式释放EGLStream的相关资源,而虚拟机运行模块端也可以通过删除的方式释放图像区域和EGLStream的相关资源。
通过删除本次渲染的图像的相关数据资源作为数据编码流程的结束,可以避免相关资源占用空间,还便于进行下一次图像的渲染。
在一些实施例中,本方法可以根据宿主机显卡驱动提供不同的机制,灵活的适配于不同的宿主机显卡,使应用场景更加广泛,实现了通过多种机制使图像编码模块能够直接访问宿主机显卡的显存,在保证数据传输的情况下提高了图像数据的传输效率。作为一个示例,宿主机显卡驱动提供的机制为DMABUF机制;在上述步骤S410之前,该方法还可以包括如下步骤:
步骤i),虚拟机运行模块基于DMABUF机制初始化第三EGL接口和第二OpenGL接口,创建第一纹理对象并对第一纹理对象分配显存,利用第一纹理对象创建第一EGLImage对象,调用eglExportDMABUFImageMESA获取第一纹理对象的DMABUF描述符,基于DMABUF机制初始化第二CUDA,并将EGLImage对象注册至第二CUDA中。
步骤j),图像编码模块基于DMABUF机制初始化第四EGL接口和第三OpenGL接口。
步骤k),虚拟机运行模块将DMABUF描述符发送至图像编码模块。
步骤l),图像编码模块利用DMABUF描述符创建第二EGLImage对象,并将第二EGLImage对象绑定第二纹理对象,以使第二纹理对象和第一纹理对象关联且均指向同一显存。
其中,DMABUF机制适用的较为广泛,可以应用于但不限于Nvidia、AMD以及INTEL等显卡。EGLImage代表一种由EGL客户API创建的共享资源类型,理论上来讲,应用程序以及相关的客户API可以基于任意的目的创建任意类型的共享数据。
示例性的,虚拟机运行模块首先基于DMABUF机制初始化第三EGL接口和第二OpenGL接口,创建第一纹理对象并对第一纹理对象分配显存,利用第一纹理对象创建第一EGLImage对象,调用eglExportDMABUFImageMESA获取第一纹理对象的DMABUF描述符,该描述符包含纹理的格式信息(宽、高、像素格式等)和一个文件句柄,之后基于DMABUF机制初始化第二CUDA,并将EGLImage对象注册至第二CUDA中。图像编码模块也基于DMABUF机制初始化对应的第四EGL接口和第三OpenGL接口,以便于实现接口的连接。虚拟机运行模块将DMABUF描述符发送至图像编码模块,图像编码模块可以利用该DMABUF描述符创建第二EGLImage对象,并将第二EGLImage对象绑定第二纹理对象,以使第二纹理对象和第一纹理对象关联且均指向同一显存。
通过使图像编码模块和虚拟机运行模块根据显卡提供的DMABUF机制,建立EGL接口和OpenGL接口进行连接,进而通过一系列的操作使图像编码模块和虚拟机运行模块均基于同一块显存进行数据交互及处理,使本方法可以根据宿主机显卡驱动提供不同的机制,灵活的适配于不同的宿主机显卡,使应用场景更加广泛,实现了通过多种机制使图像编码模块能够直接访问宿主机显卡的显存,进而提高图像数据的传输效率。
基于上述步骤i)、步骤j)、步骤k)和步骤l),图像编码模块可以根据宿主机的显卡类型,灵活的选择读取图像数据的API,根据不同的显卡类别进行不同的操作,将图像数据发送至不同的模块以进行渲染,进而实现对于图像数据的高效传输。作为一个示例,在上述步骤S420之后,该方法还可以包括如下步骤:
步骤m),虚拟机运行模块将宿主机显卡渲染后得到的图像数据对应映射于第一纹理对象上,并向图像编码模块发送图像渲染完成的消息。
步骤n),图像编码模块在宿主机显卡为Nvidia显卡时,通过CUDA EGL互操作API读取图像数据,并将图像数据发送至CUDA编码库。
步骤o),图像编码模块在宿主机显卡为AMD或INTEL开源驱动显卡时,通过VaapiEGL互操作API读取图像数据,并将图像数据发送至Vaapi进行编码。
其中,Vaapi是一套视频硬件编解码的开源库和标准。
示例性的,虚拟机运行模块启动渲染流程,将渲染后的图像输出到先前创建的第一纹理对象上,渲染画面还是存储于宿主机显卡的显存中,然后通过EGL接口和OpenGL接口发送消息通知图像编码模块端一帧画面渲染完成。之后根据显卡的类别不同,图像编码模块可以有不同的操作。例如,当图像编码模块在宿主机显卡为Nvidia显卡时,图像编码模块通过CUDAEGL互操作API读取图像数据,并将图像数据发送至CUDA编码库;当图像编码模块在宿主机显卡为AMD或INTEL开源驱动显卡时,图像编码模块通过Vaapi EGL互操作API读取图像数据,并将图像数据发送至Vaapi进行图像/视频编码。
通过使虚拟机运行模块将宿主机显卡渲染后得到的图像数据对应映射于第一纹理对象上,并向图像编码模块发送图像渲染完成的消息,之后图像编码模块可以根据宿主机的显卡类型,灵活的选择读取图像数据的API,根据不同的显卡类别进行不同的操作,将图像数据发送至不同的模块以进行渲染,进而实现对于图像数据的高效传输。
基于上述步骤i)、步骤j)、步骤k)和步骤l),图像编码模块和虚拟机运行模块可以灵活的根据连接状态对相关资源进行处理,避免相关资源占用空间,例如,当图像编码模块断开连接时,图像编码模块和虚拟机运行模块可以删除相关资源,从而避免对于空间的占用,避免影响设备性能。
作为一个示例,在上述步骤S430之后,该方法还可以包括如下步骤:
步骤p),图像编码模块的连接断开时,删除第二纹理对象的资源。
步骤q),虚拟机运行模块删除第一纹理对象的资源。
示例性的,与EGLStream机制相似,当图像编码模块的连接断开时,图像编码模块端可以通过删除的方式释放第二纹理对象的相关资源,而虚拟机运行模块端也可以通过删除的方式释放第一纹理对象的相关资源。
通过删除本次渲染的图像的相关数据资源作为数据编码流程的结束,可以避免相关资源占用空间,还便于进行下一次图像的渲染。
基于上述步骤i)、步骤j)、步骤k)和步骤l),DMABUF描述符可以包括多种类型,从而可以使虚拟机运行模块较为灵活的将多种类型的描述符发送给图像编码模块,使图像编码模块根据DMABUF描述符创建第二EGLImage对象,并将第二EGLImage对象绑定第二纹理对象,以使第二纹理对象和第一纹理对象关联且均指向同一显存,进而实现图像数据的高效传输。作为一个示例,DMABUF描述符包括:第一纹理对象的纹理格式信息和/或第一纹理对象的文件句柄。
示例性的,第一纹理对象的纹理格式信息可以包括但不限于宽、高以及像素格式等信息。在数据传输中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄,该文件句柄对于打开的文件是唯一的识别依据。
通过使DMABUF描述符可以包括多种类型,可以准确的使图像编码模块和虚拟机运行模块指向同一块显存,进而实现图像数据的高效传输。
综上,本发明实施例提供的上述虚拟机的图像处理方法至少包括以下特点:
(1)本发明将图像编码模块从虚拟机运行模块中解耦出来,便于和不同视频编码传输方案对接。
(2)本发明省去了图像数据从显存到系统内存,再从系统内存到显存两次耗时的操作,可以提高图像数据的传输效率。
(3)本发明适用所有适用Virtio-GPU做3D渲染的虚拟机,宿主机显卡类型包括NVIDIA、AMD、INTEL显卡,适用于包括Android、Linux在内的所有支持Virtio-GPU的虚拟机。
对于前述实施例提供的虚拟机的图像处理方法,本发明实施例提供了一种虚拟机的图像处理装置,该装置应用于虚拟机对应的图像编码模块,虚拟机还对应有虚拟机的虚拟机运行模块以及虚拟机的宿主机,宿主机包含宿主机显卡。参见图5所示的一种虚拟机的图像处理装置的结构示意图,该装置主要包括以下部分:
访问模块501,用于利用宿主机显卡驱动提供的机制访问宿主机显卡的显存;其中,显存中储存有宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,图像渲染指令为虚拟机运行模块根据虚拟机的待渲染图像向宿主机显卡发送的图像渲染指令;
编码模块502,用于通过宿主机显卡的GPU对显存中的图像数据进行编码,得到编码后的图像数据。
在一种实施方式中,宿主机显卡驱动提供的机制包括:EGLStream机制和/或DMABUF机制。
在一种实施方式中,所述宿主机显卡驱动提供的机制为EGLStream机制;该装置还包括:
创建模块,用于在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令之前,基于所述EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于所述EGLStream初始化第一CUDA并创建CUeglStreamConnection,将所述CUeglStreamConnection连接至所述EGLStream上,以使所述虚拟机运行模块基于所述EGLStream机制初始化第二EGL接口和第一OpenGL接口并创建支持所述EGLStream的渲染环境;
发送模块,用于将所述Stream数据流的文件句柄发送至所述虚拟机运行模块,以使所述虚拟机运行模块利用所述Stream数据流的文件句柄创建针对所述待渲染图像的图像区域。
在一种实施方式中,该装置还包括:
删除模块,用于在所述图像编码模块的连接断开时,删除所述EGLStream的资源。
本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
对于前述实施例提供的虚拟机的图像处理方法,本发明实施例提供了一种虚拟机的图像处理系统,该系统包括:
虚拟机对应的图像编码模块、虚拟机的虚拟机运行模块以及虚拟机的宿主机,宿主机包含宿主机显卡;
虚拟机运行模块用于获取虚拟机的待渲染图像,并根据待渲染图像向宿主机显卡发送图像渲染指令;
宿主机显卡用于基于图像渲染指令进行渲染,并将渲染后得到的图像数据储存于宿主机显卡的显存中;
图像编码模块用于利用宿主机显卡驱动提供的机制访问显存,并通过宿主机显卡的GPU对显存中的图像数据进行编码,得到编码后的图像数据。
上述系统通过使图像编码模块利用宿主机显卡驱动提供的机制能够直接访问宿主机显卡的显存,不需要将数据从显存里面拷贝出来,图像编码模块能直接访问显存,所有操作在GPU内部完成,省去了图像数据从显存到系统内存,再从系统内存到显存两次耗时的操作,可以提高图像数据的传输效率。
本发明实施例提供了一种电子设备,具体的,该电子设备包括处理器和存储装置;存储装置上存储有计算机程序,计算机程序在被处理器运行时执行如上实施方式的任一项的方法。
图6为本发明实施例提供的一种电子设备的结构示意图,该电子设备包括:处理器60,存储器61,总线62和通信接口63,处理器60、通信接口63和存储器61通过总线62连接;处理器60用于执行存储器61中存储的可执行模块,例如计算机程序。
其中,存储器61可能包含高速随机存取存储器(Random Access Memory,简称RAM),也可能还包括非不稳定的存储器(Non-volatile Memory),例如至少一个磁盘存储器。通过至少一个通信接口63(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线62可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器61用于存储程序,处理器60在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器60中,或者由处理器60实现。
处理器60可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器60中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器60可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器61,处理器60读取存储器61中的信息,结合其硬件完成上述方法的步骤。
本发明实施例所提供的可读存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见前述方法实施例,在此不再赘述。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (16)
1.一种虚拟机的图像处理方法,其特征在于,应用于所述虚拟机对应的图像编码模块,所述虚拟机还对应有所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;包括:
利用所述宿主机显卡驱动提供的机制访问所述宿主机显卡的显存;其中,所述显存中储存有所述宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,所述图像渲染指令为所述虚拟机运行模块根据所述虚拟机的待渲染图像向所述宿主机显卡发送的图像渲染指令;
通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
2.根据权利要求1所述的方法,其特征在于,所述宿主机显卡驱动提供的机制包括:EGLStream机制和/或DMABUF机制。
3.根据权利要求1所述的方法,其特征在于,所述宿主机显卡驱动提供的机制为EGLStream机制;还包括:
在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令之前,基于所述EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于所述EGLStream初始化第一CUDA并创建CUeglStreamConnection,将所述CUeglStreamConnection连接至所述EGLStream上,以使所述虚拟机运行模块基于所述EGLStream机制初始化第二EGL接口和第一OpenGL接口并创建支持所述EGLStream的渲染环境;
将所述Stream数据流的文件句柄发送至所述虚拟机运行模块,以使所述虚拟机运行模块利用所述Stream数据流的文件句柄创建针对所述待渲染图像的图像区域。
4.根据权利要求3所述的方法,其特征在于,在所述通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据之后,还包括:
在所述图像编码模块的连接断开时,删除所述EGLStream的资源。
5.一种虚拟机的图像处理方法,其特征在于,所述虚拟机对应有图像编码模块、所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;包括:
所述虚拟机运行模块获取所述虚拟机的待渲染图像,并根据所述待渲染图像向所述宿主机显卡发送图像渲染指令;
所述宿主机显卡基于所述图像渲染指令进行渲染,并将渲染后得到的图像数据储存于所述宿主机显卡的显存中;
所述图像编码模块利用所述宿主机显卡驱动提供的机制访问所述显存,并通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
6.根据权利要求5所述的方法,其特征在于,所述宿主机显卡驱动提供的机制为EGLStream机制;
在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令之前,所述方法还包括:
所述图像编码模块基于所述EGLStream机制初始化第一EGL接口并创建EGLStream,得到Stream数据流的文件句柄,基于所述EGLStream初始化第一CUDA并创建CUeglStreamConnection,将所述CUeglStreamConnection连接至所述EGLStream上;
所述虚拟机运行模块基于所述EGLStream机制初始化第二EGL接口和第一OpenGL接口,创建支持所述EGLStream的渲染环境;
所述图像编码模块将所述Stream数据流的文件句柄发送至所述虚拟机运行模块;
所述虚拟机运行模块利用所述Stream数据流的文件句柄创建针对所述待渲染图像的图像区域。
7.根据权利要求6所述的方法,其特征在于,在所述宿主机显卡基于所述图像渲染指令进行渲染之后,还包括:
所述虚拟机运行模块将所述宿主机显卡渲染后得到的所述图像数据对应映射于所述图像区域中,并向所述图像编码模块发送图像渲染完成的消息;
所述图像编码模块读取所述CUeglStreamConnection,并将所述CUeglStreamConnection发送至所述第一CUDA的API,以基于所述API进行针对所述图像数据的编码操作。
8.根据权利要求6所述的方法,其特征在于,在所述图像编码模块通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据之后,还包括:
所述图像编码模块的连接断开时,删除所述EGLStream的资源;
所述虚拟机运行模块删除所述图像区域和所述EGLStream的资源。
9.根据权利要求5所述的方法,其特征在于,所述宿主机显卡驱动提供的机制为DMABUF机制;
在所述虚拟机运行模块根据所述待渲染图像向所述宿主机显卡发送图像渲染指令之前,还包括:
所述虚拟机运行模块基于所述DMABUF机制初始化第三EGL接口和第二OpenGL接口,创建第一纹理对象并对所述第一纹理对象分配所述显存,利用所述第一纹理对象创建第一EGLImage对象,调用eglExportDMABUFImageMESA获取所述第一纹理对象的DMABUF描述符,基于所述DMABUF机制初始化第二CUDA,并将所述EGLImage对象注册至所述第二CUDA中;
所述图像编码模块基于所述DMABUF机制初始化第四EGL接口和第三OpenGL接口;
所述虚拟机运行模块将所述DMABUF描述符发送至所述图像编码模块;
所述图像编码模块利用所述DMABUF描述符创建第二EGLImage对象,并将所述第二EGLImage对象绑定第二纹理对象,以使所述第二纹理对象和所述第一纹理对象关联且均指向同一所述显存。
10.根据权利要求9所述的方法,其特征在于,在所述宿主机显卡基于所述图像渲染指令进行渲染之后,还包括:
所述虚拟机运行模块将所述宿主机显卡渲染后得到的图像数据对应映射于所述第一纹理对象上,并向所述图像编码模块发送图像渲染完成的消息;
所述图像编码模块在所述宿主机显卡为Nvidia显卡时,通过CUDA EGL互操作API读取所述图像数据,并将所述图像数据发送至CUDA编码库;
所述图像编码模块在所述宿主机显卡为AMD或INTEL开源驱动显卡时,通过Vaapi EGL互操作API读取所述图像数据,并将所述图像数据发送至Vaapi进行编码。
11.根据权利要求9所述的方法,其特征在于,在所述图像编码模块通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据之后,还包括:
所述图像编码模块的连接断开时,删除所述第二纹理对象的资源;
所述虚拟机运行模块删除所述第一纹理对象的资源。
12.根据权利要求9所述的方法,其特征在于,所述DMABUF描述符包括:所述第一纹理对象的纹理格式信息和/或所述第一纹理对象的文件句柄。
13.一种虚拟机的图像处理装置,其特征在于,应用于所述虚拟机对应的图像编码模块,所述虚拟机还对应有所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;包括:
访问模块,用于利用所述宿主机显卡驱动提供的机制访问所述宿主机显卡的显存;其中,所述显存中储存有所述宿主机显卡基于图像渲染指令进行渲染而得到的图像数据,所述图像渲染指令为所述虚拟机运行模块根据所述虚拟机的待渲染图像向所述宿主机显卡发送的图像渲染指令;
编码模块,用于通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
14.一种虚拟机的图像处理系统,其特征在于,包括:所述虚拟机对应的图像编码模块、所述虚拟机的虚拟机运行模块以及所述虚拟机的宿主机,所述宿主机包含宿主机显卡;
所述虚拟机运行模块用于获取所述虚拟机的待渲染图像,并根据所述待渲染图像向所述宿主机显卡发送图像渲染指令;
所述宿主机显卡用于基于所述图像渲染指令进行渲染,并将渲染后得到的图像数据储存于所述宿主机显卡的显存中;
所述图像编码模块用于利用所述宿主机显卡驱动提供的机制访问所述显存,并通过所述宿主机显卡的GPU对所述显存中的所述图像数据进行编码,得到编码后的图像数据。
15.一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至12任一项所述的方法的步骤。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可运行指令,所述计算机可运行指令在被处理器调用和运行时,所述计算机可运行指令促使所述处理器运行所述权利要求1至12任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210217444.5A CN114579255A (zh) | 2022-03-07 | 2022-03-07 | 虚拟机的图像处理方法、装置、系统以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210217444.5A CN114579255A (zh) | 2022-03-07 | 2022-03-07 | 虚拟机的图像处理方法、装置、系统以及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114579255A true CN114579255A (zh) | 2022-06-03 |
Family
ID=81778858
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210217444.5A Pending CN114579255A (zh) | 2022-03-07 | 2022-03-07 | 虚拟机的图像处理方法、装置、系统以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114579255A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756334A (zh) * | 2022-06-14 | 2022-07-15 | 海马云(天津)信息技术有限公司 | 服务器与基于服务器的图形渲染方法 |
CN116485628A (zh) * | 2023-06-15 | 2023-07-25 | 摩尔线程智能科技(北京)有限责任公司 | 图像显示方法、装置及系统 |
-
2022
- 2022-03-07 CN CN202210217444.5A patent/CN114579255A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756334A (zh) * | 2022-06-14 | 2022-07-15 | 海马云(天津)信息技术有限公司 | 服务器与基于服务器的图形渲染方法 |
CN116485628A (zh) * | 2023-06-15 | 2023-07-25 | 摩尔线程智能科技(北京)有限责任公司 | 图像显示方法、装置及系统 |
CN116485628B (zh) * | 2023-06-15 | 2023-12-29 | 摩尔线程智能科技(北京)有限责任公司 | 图像显示方法、装置及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114579255A (zh) | 虚拟机的图像处理方法、装置、系统以及电子设备 | |
US8675000B2 (en) | Command buffers for web-based graphics rendering | |
CN110262907B (zh) | 用于统一应用编程接口和模型的系统和方法 | |
ES2617303T3 (es) | Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores | |
CN111408138B (zh) | 基于游戏引擎的渲染方法、装置及电子设备 | |
CN106797388B (zh) | 跨系统多媒体数据编解码方法、装置、电子设备和计算机程序产品 | |
US10002403B2 (en) | Command remoting | |
CN113515396B (zh) | 图形渲染方法、装置、电子设备与存储介质 | |
US9311169B2 (en) | Server based graphics processing techniques | |
US9542715B2 (en) | Memory space mapping techniques for server based graphics processing | |
CN109656637B (zh) | 跨平台调用OpenGL ES的渲染方法、装置及计算机存储介质 | |
CN114025238B (zh) | 基于Linux服务器原生安卓应用云端虚拟化方法 | |
US9805439B2 (en) | Memory space mapping techniques for server based graphics processing | |
WO2022242358A1 (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
CN113778604A (zh) | 一种操作界面的展示方法、装置、电子设备和存储介质 | |
CN114594993A (zh) | 图形渲染指令流处理装置、处理方法、服务器及渲染方法 | |
US10467078B2 (en) | Crash dump extraction of guest failure | |
CN115695857A (zh) | 云应用的视频编码方法及装置 | |
CN114257867A (zh) | 视频图像显示方法和装置,计算设备和可读存储介质 | |
CN111414150B (zh) | 游戏引擎渲染方法、装置、电子设备及计算机存储介质 | |
CN114035967A (zh) | 一种基于服务器的资源共享渲染方法和装置 | |
CN112764877B (zh) | 一种用于硬件加速设备与docker内进程通信的方法与系统 | |
CN114237826A (zh) | 安卓容器的高速渲染方法及装置 | |
CN113379588A (zh) | 容器应用的渲染系统 | |
CN114756334B (zh) | 服务器与基于服务器的图形渲染方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |