一种wayland环境下远程桌面获取显示数据后的优化方法与流程

未命名 09-17 阅读:163 评论:0


1.本发明涉及一种显示数据优化方法,尤其涉及一种wayland环境下远程桌面获取显示数据后的优化方法。


背景技术:

2.wayland是一个协议(protocol),它定义了wayland客户端如何与wayland合成器通信。鉴于wayland相对x11的优势,特别是在高分辨率高刷新率方面提供的更好支持,开源社区已经全面转向wayland进行开发,各大系统发行版本也开始使用wayland作为默认的图形显示协议。但与x11原生支持网络显示不同,wayland本身不支持远程显示,需要通过各种远程桌面协议来实现远程显示功能。目前广泛使用的远程桌面协议为vnc和rdp。
3.如图1所示,为wayland合成器远程桌面获取显示数据后的常规转发流程,在wayland环境下,远程桌面服务端是wayland合成器的客户端,不能直接获取屏幕数据,屏幕数据的传递都是通过dmabuf方式实现,大致有两种方案可以获取到屏幕数据dmabuf句柄:一个是基于pipewire的数据分享方案,另一个是通过特定的wayland协议获取;一般采用wayland协议获取,比如kwin的remote-access协议、wlroots的wlr-screencopy协议等,远程桌面服务端向wayland合成器发送输入事件,可通过特定的wayland协议支持,远程桌面服务端通过相关协议向wayland合成器发送输入事件,wayland合成器将这些事件放到输入处理;远程桌面服务端通过remote-access或者wlr-screencopy协议获取显示数据:每当屏幕显示数据更新时,wayland合成器向远程桌面服务端发送显示数据对应的buffer句柄及描述数据,描述数据中包含了该buffer的尺寸和格式信息,远程桌面服务端直接使用mmap方式读取dmabuf句柄指向的显示数据到内存中,根据描述数据处理显示格式信息,发送显示数据到远程桌面客户端,但是直接使用mmap从dmabuf中读取数据,导致cpu占用率高且只支持线性buffer,不能正确处理非线性的显示数据、更加不能处理屏幕分辨率改变或旋转。


技术实现要素:

4.针对上述问题,本发明提供一种wayland环境下远程桌面获取显示数据后的优化方法,在特定wayland协议(remote-access/ wlr-screencopy) 中增加gbm_handle_modifiers事件,该事件包含帧显示数据是否为非线性的压缩格式数据的标志,当wayland合成器合成一帧显示数据后,把代表该帧显示数据的dmabuf句柄、包含该帧显示数据尺寸和格式信息描述数据,包含modifier描述信息的事件发送至远程桌面服务端:描述数据中包含了该屏幕显示数据的尺寸和格式信息、modifier描述信息包含是否为非线性的压缩格式数据标志;远程桌面服务端根据接收到的帧显示数据尺寸和格式信息、dmabuf句柄,modifier描述信息,使用egl和opengl api的方法将dmabuf句柄所指向的帧显示数据转换成纹理并进行操作。
5.为实现上述目的,本发明公开了一种wayland环境下远程桌面获取显示数据后的优化方法,包括以下步骤:
步骤s1、在特定wayland协议中增加gbm_handle_modifiers事件,该事件用于发送modifier描述信息;步骤s2、wayland合成器合成一帧显示数据后把代表该帧显示数据的dmabuf句柄、包含该帧显示数据尺寸和格式信息的描述数据,以及gbm_handle_modifiers事件通过步骤s1中的特定wayland协议发送至远程桌面服务端;步骤s3、远程桌面服务端接收帧显示数据的dmabuf句柄、描述数据,以及gbm_handle_modifiers事件发送的modifier描述信息;步骤s4、远程桌面服务端基于接收到的帧显示数据的dmabuf句柄、描述数据、modifier描述信息,通过opengl api将dmabuf句柄所指向的帧显示数据转换成eglimage;步骤s5、远程桌面服务端通过gleglimagetargettexture2does将eglimage转换成纹理,通过opengl api将纹理渲染到预先创建好的fbo中;步骤s6、远程桌面服务端通过opengl api glreadpixels将fbo中的内容读到内存中并发送至远程桌面客户端。
6.其中,所述特定wayland协议为remote-access或wlr-screencopy。
7.其中,所述gbm_handle_modifiers事件所发送的modifier描述信息用于描述帧显示数据是否为非线性的压缩格式数据。
8.其中,所述步骤s4具体包括:步骤s41、若帧显示数据是非线性数据,则使用egl_ext_image_dma_buf_import_modifiers处理dmabuf句柄所指向的帧显示数据,将其转换成eglimage;步骤s42、若帧显示数据是线性数据则使用egl_ext_image_dma_buf_import处理dmabuf句柄所指向的帧显示数据,使用eglcreateimagekhr将dmabuf句柄所指向的帧显示数据直接转化成eglimage。
9.本发明的一种wayland环境下远程桌面获取显示数据后的优化方法的有益效果为:通过在特定wayland协议(remote-access/wlr-screencopy)中增加gbm_handle_modifiers事件解决了在wayland环境下启用远程桌面wayland合成器使用非线性数据的问题;在通过opengl api将纹理渲染到预先创建好的fbo过程中使用不同的shader实现对显示数据进行缩放、旋转等操作,达到运行时在远程桌面客户端界面中动态设置显示分辨率、旋转等特性;通过opengl api glreadpixels函数将fbo中的内容读到内存而非使用传统的mmap的方案,极大降低了cpu占用率、优化了用户体验。
附图说明
10.下面结合附图和具体实施方式对本发明作进一步详细的说明。
11.图1是本发明的wayland合成器远程桌面获取显示数据后的常规转发流程。
12.图2是本发明实施例提供的wayland合成器远程桌面获取显示数据后的优化流程。
具体实施方式
13.下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的
情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
14.本发明公开了一种wayland环境下远程桌面获取显示数据后的优化方法,包括以下步骤:步骤s1、在特定wayland协议中增加gbm_handle_modifiers事件,该事件用于发送modifier描述信息;步骤s2、wayland合成器合成一帧显示数据后把代表该帧显示数据的dmabuf句柄、包含该帧显示数据尺寸和格式信息的描述数据,以及gbm_handle_modifiers事件通过步骤s1中的特定wayland协议发送至远程桌面服务端;步骤s3、远程桌面服务端接收帧显示数据的dmabuf句柄、描述数据,以及gbm_handle_modifiers事件发送的modifier描述信息;步骤s4、远程桌面服务端基于接收到的帧显示数据的dmabuf句柄、描述数据、modifier描述信息,通过opengl api将dmabuf句柄所指向的帧显示数据转换成eglimage;步骤s5、远程桌面服务端通过gleglimagetargettexture2does将eglimage转换成纹理,通过opengl api将纹理渲染到预先创建好的fbo中;步骤s6、远程桌面服务端通过opengl api glreadpixels将fbo中的内容读到内存中并发送至远程桌面客户端。
15.为进一步优化上述技术方案,特定wayland协议为remote-access或wlr-screencopy。
16.为进一步优化上述技术方案,所述gbm_handle_modifiers事件所发送的modifier描述信息用于描述帧显示数据是否为非线性的压缩格式数据。
17.为进一步优化上述技术方案,步骤s4具体包括:步骤s41、若帧显示数据是非线性数据,则使用egl_ext_image_dma_buf_import_modifiers处理dmabuf句柄所指向的帧显示数据,将其转换成eglimage;步骤s42、若帧显示数据是线性数据则使用egl_ext_image_dma_buf_import处理dmabuf句柄所指向的帧显示数据,使用eglcreateimagekhr将dmabuf句柄所指向的帧显示数据直接转化成eglimage。
18.本发明涉及到的术语解释及约束如下:wayland:wayland是一个协议(protocol),它定义了wayland客户端如何与wayland合成器通信。
19.wayland合成器:实现wayland协议的显示服务器,支持多种显示后端、具有窗口管理器功能。
20.x11:位图显示的视窗系统,也叫做x window系统。x window系统(x11或x)是一种位图显示的视窗系统。它是在unix和类unix操作系统上建立图形用户界面的标准工具包和协议,并可用于几乎所有已有的现代操作系统。
21.gbm_handle_modifiers:在获取显示数据特定wayland协议(remote-access/wlr-screencopy)中添加的事件,包含帧显示数据是否是非线性的压缩格式数据标志。
22.非线性显示数据:wayland合成器针对某些硬件平台进行优化,可能会使用非线性的压缩格式数据作为显示数据。在这种情况下,远程桌面服务端必须要知道格式修饰符modifier,才能正确地解析出线性数据。
23.eglimage:代表一种由egl客户api(如opengl,openvg)创建的共享资源类型。它的本意是共享2d图像数据,但是并没有明确限定共享数据的格式以及共享的目的,所以理论上来讲,应用程序以及相关的客户api可以基于任意的目的创建任意类型的共享数据。
24.具体的,如图2所示,为wayland合成器远程桌面获取显示数据后的优化流程,包括:s1)在特定wayland协议(remote-access/wlr-screencopy)中增加gbm_handle_modifiers事件:该事件包含帧显示数据是否为非线性的压缩格式数据标志;wayland合成器针对某些硬件平台进行优化,可能会使用非线性的压缩格式数据作为显示数据。在这种情况下,远程桌面服务端必须要知道格式修饰符modifier,才能正确地解析出线性数据,wayland合成器中通过gbm_bo_get_modifier函数获取屏幕显示数据的modifier描述信息,需要将modifier描述信息传递至远程桌面服务端中,为了支持非线性格式的显示数据的传递,在从wayland合成器中获取到显示数据的协议中添加带有modifiers数据的事件接口,本技术实施例以remote-access协议为例,在remote-access协议中增加了带有modifiers描述信息的gbm_handle_modifiers事件接口;gbm_handle_modifiers事件接口如下:
ꢀꢀ
《event name="gbm_handle_modifiers" since="2"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《description summary="this is sent after binding to remote access manager with modifiers" /》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="fd" type="fd"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="width" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="height" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="stride" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="format" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="handle" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="modifier_lo" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《arg name="modifier_hi" type="uint"/》
ꢀꢀꢀꢀꢀꢀꢀꢀ
《/event》s2)wayland合成器完成一帧屏幕显示数据合成;在远程桌面服务端绑定remote-acesss协议的情况下,当wayland合成器完成图像的合成并在设置显示之前会发送buffer_ready事件给远程桌面服务端,远程桌面服务端接收到buffer_ready事件后,根据自身需要通过get_buffer请求获取显示数据;s3)远程桌面服务端接收wayland合成器发送的显示数据以及对应的dmabuf句柄,以及gbm_handle_modifiers事件发送的modifier描述信息,判断modifier描述信息是否有效,进行s4;s4)远程桌面服务端基于接收到的帧显示数据dmabuf句柄、显示数据,modifier描述信息,通过opengl api将dmabuf句柄所指向的帧显示数据转换成eglimage;具体的:s41)、若帧显示数据是非线性数据,则使用egl_ext_image_dma_buf_import_modifiers处理dmabuf句柄所指向的帧显示数据,将其转换成eglimage;
s42)、若帧显示数据是线性数据则使用egl_ext_image_dma_buf_import处理dmabuf句柄所指向的帧显示数据,使用eglcreateimagekhr将dmabuf句柄所指向的帧显示数据直接转化成eglimage。
25.s5)通过gleglimagetargettexture2does将eglimage转换成纹理;使用opengl api将上述纹理渲染到预先创建好的fbo中:在此过程中可通过编写不同的shader实现缩放、旋转等操作以实现运行时在远程桌面客户端界面中设置远程桌面服务端的显示分辨率、旋转等特性。
26.s6)通过opengl api glreadpixels将fbo中的内容读到内存并发送至远程桌面客户端。
27.综上所述,本发明通过在特定wayland协议(remote-access/ wlr-screencopy)中增加gbm_handle_modifiers事件,该事件包含帧显示数据是否为非线性的压缩格式数据的标志,当wayland合成器合成一帧显示数据后,把代表该帧显示数据的dmabuf句柄、包含该帧显示数据尺寸和格式信息描述数据,包含modifier描述信息的事件发送至远程桌面服务端:描述数据中包含了该屏幕显示数据的尺寸和格式信息、modifier描述信息包含是否为非线性的压缩格式数据标志;远程桌面服务端根据接收到的帧显示数据尺寸和格式信息、dmabuf句柄,modifier描述信息,使用egl和opengl api的方法将dmabuf句柄所指向的帧显示数据转换成纹理并进行操作,达到运行时在远程桌面客户端界面中动态设置显示分辨率、旋转等特性;在远程桌面服务端代码中,通过opengl api glreadpixels将fbo中的内容读到内存而非使用传统的mmap的方案,极大降低了cpu占用率、优化了用户体验。
28.显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

技术特征:
1.一种wayland环境下远程桌面获取显示数据后的优化方法,其特征在于,包括以下步骤:步骤s1、在特定wayland协议中增加gbm_handle_modifiers事件,该事件用于发送modifier描述信息;步骤s2、wayland合成器合成一帧显示数据后把代表该帧显示数据的dmabuf句柄、包含该帧显示数据尺寸和格式信息的描述数据,以及gbm_handle_modifiers事件通过步骤s1中的特定wayland协议发送至远程桌面服务端;步骤s3、远程桌面服务端接收帧显示数据的dmabuf句柄、描述数据,以及gbm_handle_modifiers事件发送的modifier描述信息;步骤s4、远程桌面服务端基于接收到的帧显示数据的dmabuf句柄、描述数据、modifier描述信息,通过opengl api将dmabuf句柄所指向的帧显示数据转换成eglimage;步骤s5、远程桌面服务端通过gleglimagetargettexture2does将eglimage转换成纹理,通过opengl api将纹理渲染到预先创建好的fbo中;步骤s6、远程桌面服务端通过opengl api glreadpixels将fbo中的内容读到内存中并发送至远程桌面客户端。2.基于权利要求1所述的一种wayland环境下远程桌面获取显示数据后的优化方法,其特征在于,所述特定wayland协议为remote-access或wlr-screencopy。3.基于权利要求1所述的一种wayland环境下远程桌面获取显示数据后的优化方法,其特征在于,所述gbm_handle_modifiers事件所发送的modifier描述信息用于描述帧显示数据是否为非线性的压缩格式数据。4.基于权利要求1所述的一种wayland环境下远程桌面获取显示数据后的优化方法,其特征在于,所述步骤s4具体包括:步骤s41、若帧显示数据是非线性数据,则使用egl_ext_image_dma_buf_import_modifiers处理dmabuf句柄所指向的帧显示数据,将其转换成eglimage;步骤s42、若帧显示数据是线性数据则使用egl_ext_image_dma_buf_import处理dmabuf句柄所指向的帧显示数据,使用eglcreateimagekhr将dmabuf句柄所指向的帧显示数据直接转化成eglimage。

技术总结
一种wayland环境下远程桌面获取显示数据后的优化方法,包括:在特定wayland协议中增加事件;wayland合成器合成一帧显示数据后把代表该帧显示数据的dmabuf句柄、包含该帧显示数据尺寸和格式信息的描述数据,包含modifier描述信息的事件发送至远程桌面服务端;远程桌面服务端基于接收到的帧显示数据dmabuf句柄、描述数据和modifier描述信息,通过OpenGL API将dmabuf句柄所指向的帧显示数据转换成EGLImage;远程桌面服务端通过glEGLImageTargetTexture2DOES将EGLImage转换成纹理,通过OpenGL API将纹理渲染到预先创建好的FBO中;远程桌面服务端通过OpenGL API glReadPixels将FBO中的内容读到内存中并发送至远程桌面客户端。至远程桌面客户端。至远程桌面客户端。


技术研发人员:王勇军 张铎 周磊 陈霖翔 刘意虎
受保护的技术使用者:麒麟软件有限公司
技术研发日:2023.08.15
技术公布日:2023/9/14
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐