G06F3/14 G06F13/28
1.一种基于Wayland协议的视频和UI的drm直接显示方法,其特征在于,包括:
视频端通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区;其中,所述标准桌面协议包括xdg-shell或wl-shell标准协议;
UI端通过ylvideo-shell-protocol内部协议向所述Weston开源库申请创建UI窗口的第二绘制表面,并生成与所述第二绘制表面对应的UI缓冲区;其中,所述ylvideo-shell-protocol内部协议为基于Wayland标准制定的私有协议;
所述Weston开源库在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求;
所述直接渲染管理器根据所述显示请求,将所述视频缓冲区和所述视频缓冲区在固定硬件管线进行合成,以输出混合的视频和UI。
2.根据权利要求1所述的基于Wayland协议的视频和UI的drm直接显示方法,其特征在于,在所述的视频端通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区步骤之前,还包括:
所述Weston开源库中完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中;其中,所述窗口层级对象包括视频层窗口对象和UI层窗口对象,所述视频层窗口对象用于存放视频层窗口,所述UI层窗口对象用于存放UI层窗口。
3.根据权利要求2所述的基于Wayland协议的视频和UI的drm直接显示方法,其特征在于,所述的所述Weston开源库中完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中步骤,具体包括:
创建Weston开源库的窗口管理模块对象和窗口层级对象;
将所述视频层窗口对象的层级属性设置为第一预设值的WESTON_LAYER_POSITION_BOTTOM_UI,并将所述UI层窗口对象的层级属性设置为第二预设值的WESTON_LAYER_POSITION_NORMAL;
根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的ylvideo-shell-protocol内部协议回调函数的结构体来创建ylvideo-shell全局资源对象;
监听所述标准桌面协议和所述ylvideo-shell-protocol内部协议,并在接收到通过所述标准桌面协议发送的创建视频窗口请求时,将视频窗口创建到所述视频层窗口对象的列表中,及在接收到通过所述ylvideo-shell-protocol内部协议发送的创建UI窗口请求时,将UI窗口创建到所述UI层窗口对象的列表中。
4.根据权利要求3所述的基于Wayland协议的视频和UI的drm直接显示方法,其特征在于,所述的所述Weston开源库在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求步骤,包括:
所述Weston开源库根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,将所述视频层窗口对象和所述UI层窗口对象中的weston_view窗口对象依次组成新的窗口队列;
遍历所述窗口队列,获取拥有有效缓冲区的且全屏非透明的窗口或最后一个拥有有效缓冲区的窗口,以作为主硬件图层对应的输出窗口;
在所述窗口队列中,从所述主硬件图层对应的输出窗口开始,从下到上依次分配窗口到对应的重叠硬件图层;
依次将视频窗口的所述视频缓冲区和UI窗口的所述UI缓冲区,绑定至所述直接渲染管理器的对应硬件图层单元的帧缓冲区,并提交所述直接渲染管理器的显示请求。
5.一种基于Wayland协议的视频和UI的drm直接显示系统,其特征在于,包括:视频端、UI端、Weston开源库和直接渲染管理器;
所述视频端用于通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区;其中,所述标准桌面协议包括xdg-shell或wl-shell标准协议;
所述UI端用于通过ylvideo-shell-protocol内部协议向所述Weston开源库申请创建UI窗口的第二绘制表面,并生成与所述第二绘制表面对应的UI缓冲区;其中,所述ylvideo-shell-protocol内部协议为基于Wayland标准制定的私有协议;
所述Weston开源库包括窗口管理模块,所述窗口管理模块用于在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求;
所述直接渲染管理器根据所述显示请求,将所述视频缓冲区和所述视频缓冲区在固定硬件管线进行合成,以输出混合的视频和UI。
6.根据权利要求5所述的基于Wayland协议的视频和UI的drm直接显示系统,其特征在于,所述窗口管理模块还用于:
完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中;其中,所述窗口层级对象包括视频层窗口对象和UI层窗口对象,所述视频层窗口对象用于存放视频层窗口,所述UI层窗口对象用于存放UI层窗口。
7.根据权利要求6所述的基于Wayland协议的视频和UI的drm直接显示系统,其特征在于,所述窗口管理模块还用于:
创建Weston开源库的窗口管理模块对象和窗口层级对象;
将所述视频层窗口对象的层级属性设置为第一预设值的WESTON_LAYER_POSITION_BOTTOM_UI,并将所述UI层窗口对象的层级属性设置为第二预设值的WESTON_LAYER_POSITION_NORMAL;
根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的ylvideo-shell-protocol内部协议回调函数的结构体来创建ylvideo-shell全局资源对象;
监听所述标准桌面协议和所述ylvideo-shell-protocol内部协议,以在接收到通过所述标准桌面协议发送的创建视频窗口请求时,将视频窗口创建到所述视频层窗口对象的列表中,及在接收到通过所述ylvideo-shell-protocol内部协议发送的创建UI窗口请求时,将UI窗口创建到所述UI层窗口对象的列表中。
8.根据权利要求7所述的基于Wayland协议的视频和UI的drm直接显示系统,其特征在于,所述窗口管理模块还用于:
根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,将所述视频层窗口对象和所述UI层窗口对象中的weston_view窗口对象依次组成新的窗口队列;
遍历所述窗口队列,获取拥有有效缓冲区的且全屏非透明的窗口或最后一个拥有有效缓冲区的窗口,以作为主硬件图层对应的输出窗口;
在所述窗口队列中,从所述主硬件图层对应的输出窗口开始,从下到上依次分配窗口到对应的重叠硬件图层;
依次将视频窗口的所述视频缓冲区和UI窗口的所述UI缓冲区,绑定至所述直接渲染管理器的对应硬件图层单元的帧缓冲区,并提交所述直接渲染管理器的显示请求。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述的基于Wayland协议的视频和UI的drm直接显示方法。
本发明涉及视频和UI渲染管理技术领域,尤其涉及一种基于Wayland协议的视频和UI的drm直接显示方法及系统、计算机可读存储介质。
在视频系统中比较常见的场景是视频和UI进行叠加混合输出,视频画页又分为单方全屏、1+N、等分等布局,因此需要有视频/UI混合显示模块来实现相应的功能。在Linux系统下,比较常见的显示驱动分为fbdev和drm(Direct Rendering Manager,直接渲染管理器)两种方式,两种显示驱动对应的应用访问方式分别为Framebuffer和libdrm。常见的解决方案如下:
FrameBuffer方案:使用CPU(Central Processing Unit,中央处理器)或GPU(Graphics Processing Unit,图形处理器)来混合好视频和UI,然后将合成的buffer提交给驱动进行显示。本方案的特点是比较好实现,但是对于多屏大分辨率画面,将消耗很大的CPU或GPU性能,很容易造成刷新帧率不足,出现卡顿、掉帧等现象。
gpu+drm方案:使用GPU进行视频和UI混合,然后将合成的buffer提交给驱动显示,这种方案的缺点和FrameBuffer方案一样,对GPU的性能消耗大,容易出现卡顿、掉帧现象。
drm直显方案:视频和UI在同一个进程内,各自的buffer分别按Plane提交进行直接显示。本方案的特点是整体性能会比较好,缺点是整体结构会很复杂,UI/视频不好独立开,另外对于第三方App的接入比较容易受到限制。开源的weston+drm方案:使用开源的weston图形桌面程序,来合成视频和UI画面,并由drm提交显示。该方案的特点是容易实现,在单一视频和单一UI场景下视频能达到正常性能要求。缺点是界面窗口管理复杂以及drm的plane分配不符合视频优先原则,在多层视频场景下很容易出现GPU合成遇到的问题,视频或UI客户端的surface管理也比较麻烦,最重要的是视频和UI的窗口层级无法得到保证,视频很容易就显示到UI上面。
本发明目的在于,提供一种基于Wayland协议的视频和UI的drm直接显示方法及系统、计算机可读存储介质,以解决上述视频/UI混合显示时,性能消耗大,视频和UI的窗口层级无法得到保证,视频很容易就显示到UI上面的问题。
为实现上述目的,本发明实施例提供的一种基于Wayland协议的视频和UI的drm直接显示方法,包括:
视频端通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区;其中,所述标准桌面协议包括xdg-shell或wl-shell标准协议;
UI端通过ylvideo-shell-protocol内部协议向所述Weston开源库申请创建UI窗口的第二绘制表面,并生成与所述第二绘制表面对应的UI缓冲区;其中,所述ylvideo-shell-protocol内部协议为基于Wayland标准制定的私有协议;
所述Weston开源库在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求;
所述直接渲染管理器根据所述显示请求,将所述视频缓冲区和所述视频缓冲区在固定硬件管线进行合成,以输出混合的视频和UI。
在某一个实施例中,在所述的视频端通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区步骤之前,还包括:
所述Weston开源库中完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中;其中,所述窗口层级对象包括视频层窗口对象和UI层窗口对象,所述视频层窗口对象用于存放视频层窗口,所述UI层窗口对象用于存放UI层窗口。
在某一个实施例中,所述的所述Weston开源库中完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中步骤,具体包括:
创建Weston开源库的窗口管理模块对象和窗口层级对象;
将所述视频层窗口对象的层级属性设置为第一预设值的WESTON_LAYER_POSITION_BOTTOM_UI,并将所述UI层窗口对象的层级属性设置为第二预设值的WESTON_LAYER_POSITION_NORMAL;
根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的ylvideo-shell-protocol内部协议回调函数的结构体来创建ylvideo-shell全局资源对象;
监听所述标准桌面协议和所述ylvideo-shell-protocol内部协议,并在接收到通过所述标准桌面协议发送的创建视频窗口请求时,将视频窗口创建到所述视频层窗口对象的列表中,及在接收到通过所述ylvideo-shell-protocol内部协议发送的创建UI窗口请求时,将UI窗口创建到所述UI层窗口对象的列表中。
在某一个实施例中,所述的所述Weston开源库在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求步骤,包括:
所述Weston开源库根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,将所述视频层窗口对象和所述UI层窗口对象中的weston_view窗口对象依次组成新的窗口队列;
遍历所述窗口队列,获取拥有有效缓冲区的且全屏非透明的窗口或最后一个拥有有效缓冲区的窗口,以作为主硬件图层对应的输出窗口;
在所述窗口队列中,从所述主硬件图层对应的输出窗口开始,从下到上依次分配窗口到对应的重叠硬件图层;
依次将视频窗口的所述视频缓冲区和UI窗口的所述UI缓冲区,绑定至所述直接渲染管理器的对应硬件图层单元的帧缓冲区,并提交所述直接渲染管理器的显示请求。
本发明实施例提供的一种基于Wayland协议的视频和UI的drm直接显示系统,包括:视频端、UI端、Weston开源库和直接渲染管理器;
所述视频端用于通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区;其中,所述标准桌面协议包括xdg-shell或wl-shell标准协议;
所述UI端用于通过ylvideo-shell-protocol内部协议向所述Weston开源库申请创建UI窗口的第二绘制表面,并生成与所述第二绘制表面对应的UI缓冲区;其中,所述ylvideo-shell-protocol内部协议为基于Wayland标准制定的私有协议;
所述Weston开源库包括窗口管理模块,所述窗口管理模块用于在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求;
所述直接渲染管理器根据所述显示请求,将所述视频缓冲区和所述视频缓冲区在固定硬件管线进行合成,以输出混合的视频和UI。
在某一个实施例中,所述窗口管理模块还用于:
完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中;其中,所述窗口层级对象包括视频层窗口对象和UI层窗口对象,所述视频层窗口对象用于存放视频层窗口,所述UI层窗口对象用于存放UI层窗口。
在某一个实施例中,所述窗口管理模块还用于:
创建Weston开源库的窗口管理模块对象和窗口层级对象;
将所述视频层窗口对象的层级属性设置为第一预设值的WESTON_LAYER_POSITION_BOTTOM_UI,并将所述UI层窗口对象的层级属性设置为第二预设值的WESTON_LAYER_POSITION_NORMAL;
根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的ylvideo-shell-protocol内部协议回调函数的结构体来创建ylvideo-shell全局资源对象;
监听所述标准桌面协议和所述ylvideo-shell-protocol内部协议,以在接收到通过所述标准桌面协议发送的创建视频窗口请求时,将视频窗口创建到所述视频层窗口对象的列表中,及在接收到通过所述ylvideo-shell-protocol内部协议发送的创建UI窗口请求时,将UI窗口创建到所述UI层窗口对象的列表中。
在某一个实施例中,所述窗口管理模块还用于:
根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,将所述视频层窗口对象和所述UI层窗口对象中的weston_view窗口对象依次组成新的窗口队列;
遍历所述窗口队列,获取拥有有效缓冲区的且全屏非透明的窗口或最后一个拥有有效缓冲区的窗口,以作为主硬件图层对应的输出窗口;
在所述窗口队列中,从所述主硬件图层对应的输出窗口开始,从下到上依次分配窗口到对应的重叠硬件图层;
依次将视频窗口的所述视频缓冲区和UI窗口的所述UI缓冲区,绑定至所述直接渲染管理器的对应硬件图层单元的帧缓冲区,并提交所述直接渲染管理器的显示请求。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一个实施例中的基于Wayland协议的视频和UI的drm直接显示方法。
相较于现有技术,本发明实施例的基于Wayland协议的视频和UI的drm直接显示方法及系统、计算机可读存储介质中,基于Wayland协议的Weston开源库,重新开发窗口管理模块:ylvideo-shell,并修改优化drm-backend的Plane(硬件图层)分配规则,从而使用视频解码后的Buffer(缓存区)和UI绘制好的Buffer都直接绑定到Drm(直接渲染管理器)的Plane(硬件图层单元)上,最后通过固定硬件管线Pipe实现混合输出。如此,实现了双屏4K分辨率的场景下视频/UI混合输出,视频可以达到60帧,UI可以达到30帧。
为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明某一实施例提供的基于Wayland协议的视频和UI的drm直接显示方法的流程示意图;
图2是本发明某一实施例提供的基于Wayland协议的视频和UI的drm直接显示系统的结构示意图;
图3是本发明某一实施例提供的视频窗口的weston_layer的存放位置和UI窗口的weston_layer的存放位置示意图;
图4是本发明某一实施例提供的窗口管理模块ylvideo-shell初始化流程示意图;
图5是本发明某一实施例提供的View窗口分配到drm plane(直接渲染管理器硬件图层)的流程示意图;
图6是本发明某一实施例提供的计算机终端设备的结构示意图。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,文中所使用的步骤编号仅是为了方便描述,不对作为对步骤执行先后顺序的限定。
应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
本发明实施例中,缩略语、英文和关键术语定义列表如下:
1、CPU,Central Processing Unit,中央处理器
2、GPU,Graphics Processing Unit,图形处理器
3、DRM,Direct Rendering Manager,直接渲染管理器
4、DMA,Direct Memory Access,直接存储器访问
请参阅图1,本发明实施例提供一种基于Wayland协议的视频和UI的drm直接显示方法,包括以下步骤:
S10、视频端通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区;其中,所述标准桌面协议包括xdg-shell或wl-shell标准协议;
S20、UI端通过ylvideo-shell-protocol内部协议向所述Weston开源库申请创建UI窗口的第二绘制表面,并生成与所述第二绘制表面对应的UI缓冲区;其中,所述ylvideo-shell-protocol内部协议为基于Wayland标准制定的私有协议;
S30、所述Weston开源库在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求;
S40、所述直接渲染管理器根据所述显示请求,将所述视频缓冲区和所述视频缓冲区在固定硬件管线进行合成,以输出混合的视频和UI。
请参阅图2,本发明实施例还提供一种基于Wayland协议的视频和UI的drm直接显示系统,包括:视频端、UI端、Weston开源库和直接渲染管理器;
所述视频端用于通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区;其中,所述标准桌面协议包括xdg-shell或wl-shell标准协议;
所述UI端用于通过ylvideo-shell-protocol内部协议向所述Weston开源库申请创建UI窗口的第二绘制表面,并生成与所述第二绘制表面对应的UI缓冲区;其中,所述ylvideo-shell-protocol内部协议为基于Wayland标准制定的私有协议;
所述Weston开源库包括窗口管理模块,所述窗口管理模块用于在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求;
所述直接渲染管理器根据所述显示请求,将所述视频缓冲区和所述视频缓冲区在固定硬件管线进行合成,以输出混合的视频和UI。
其中,Wayland是一套display server(Wayland compositor)与client间的通信协议,而Weston开源库是Wayland compositor的参考实现。
Weston开源库从内部体系结构来看,主要分为窗口管理(shell),合成器(compositor)和输入管理几个部分。可见,与Android作类比,从功能上看Weston开源库约等同于InputManagerService、WindowManagerService和SurfaceFlinger。从大体的流程上来看,Weston开源库的输入管理模块先接受用户输入,然后一方面shell作出相应的窗口管理操作(如窗口堆栈的改变,focus的变化等),另一方面将该input event传给之前注册了相应输入事件的client。client收到后会在handler中做相应动作,如调整视图然后重绘。如有重绘发生,新buffer渲染完成后client将其handle传给server,接着server端生成z-order序的窗口列表,之后compositor用renderer进行合成,最后输出(比如到framebuffer)。
在本发明实施例中,基于Wayland协议的Weston开源库,重新开发窗口管理模块:ylvideo-shell,并修改优化drm-backend的Plane(硬件图层)分配规则,从而使用视频解码后的Buffer(缓存区)和UI绘制好的Buffer都直接绑定到Drm(直接渲染管理器)的Plane(硬件图层单元)上,最后通过固定硬件管线Pipe实现混合输出。具体操作如下:
首先、视频端通过包含xdg-shell或wl-shell的标准桌面协议向weston申请创建视频窗口的surface,解码后将解码的buffer提交到weston上。这样能保证第三方视频App也能按标准的协议来接入到系统中。
其次、UI端通过基于Wayland标准制定的内部协议ylvideo-shell-protocol向weston申请UI窗口的surface,并且将使用GPU绘制完成的buffer提交到weston上。
再次、weston在收到视频/UI的显示请求后,根据创建好的surface顺序,提交surface对应的buffer到DRM的Plane上,并提交DRM的显示请求。
最后、DRM根据请求,将UI和视频的buffer在固定硬件管线Pipe中进行合成(可以在合成前进行缩放),从而完成输出。
综上,相较于现有技术,本发明实施例中的基于Wayland协议的视频和UI的drm直接显示方法及其系统,基于Wayland协议的Weston开源库,重新开发窗口管理模块:ylvideo-shell,并修改优化drm-backend的Plane(硬件图层)分配规则,从而使用视频解码后的Buffer(缓存区)和UI绘制好的Buffer都直接绑定到Drm(直接渲染管理器)的Plane(硬件图层单元)上,最后通过固定硬件管线Pipe实现混合输出。如此,实现了双屏4K分辨率的场景下视频/UI混合输出,视频可以达到60帧,UI可以达到30帧。
在某一个实施例中,在所述步骤S10视频端通过标准桌面协议向Weston开源库申请创建视频窗口的第一绘制表面,并生成与所述第一绘制表面对应的视频缓冲区之前,还包括以下步骤:
S50、所述Weston开源库中完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中;其中,所述窗口层级对象包括视频层窗口对象和UI层窗口对象,所述视频层窗口对象用于存放视频层窗口,所述UI层窗口对象用于存放UI层窗口。
对应的,所述窗口管理模块还用于执行上述步骤S50,具体的:完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中;其中,所述窗口层级对象包括视频层窗口对象和UI层窗口对象,所述视频层窗口对象用于存放视频层窗口,所述UI层窗口对象用于存放UI层窗口。
在本发明实施例中,Weston开源库包括窗口管理模块:ylvideo-shell,窗口管理模块ylvideo-shell主要完成私有协议ylvideo-shell-protocol的注册以及标准桌面协议api回调的注册,并将通过私有协议和标准桌面协议创建的窗口放置到相应的窗口层级weston_layer对象中。
因此,窗口管理模块ylvideo-shell延续weston的窗口层级weston_layer来管理窗口,定义了两个层级分别存放视频窗口列表和UI窗口列表。
如图3所示,视频窗口的weston_layer放置在已经定义好的position:WESTON_LAYER_POSITION_BOTTOM_UI,UI窗口的weston_layer放置在已经定义好的postion:WESTON_LAYER_POSITION_NORMAL。由于weston是根据weston_layer_position大小来按顺序组织layer中对应的窗口队列,因此能保证UI窗口总是能显示在视频窗口上。
在某一个实施例中,步骤S50所述Weston开源库中完成所述ylvideo-shell-protocol内部协议的注册以及所述标准桌面协议api回调函数的注册,并将通过所述ylvideo-shell-protocol内部协议创建的UI窗口,以及通过所述标准桌面协议创建的视频窗口放置到相应的窗口层级对象中,具体包括以下步骤:
S51、创建Weston开源库的窗口管理模块对象(yl_desktop_shell对象)和窗口层级对象(weston_layer对象);
S52、将所述视频层窗口对象的层级属性设置为第一预设值的WESTON_LAYER_POSITION_BOTTOM_UI,并将所述UI层窗口对象的层级属性设置为第二预设值的WESTON_LAYER_POSITION_NORMAL;
S53、根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的ylvideo-shell-protocol内部协议回调函数的结构体来创建ylvideo-shell全局资源对象;
S54、监听所述标准桌面协议和所述ylvideo-shell-protocol内部协议,并在接收到通过所述标准桌面协议发送的创建视频窗口请求时,将视频窗口创建到所述视频层窗口对象的列表中,及在接收到通过所述ylvideo-shell-protocol内部协议发送的创建UI窗口请求时,将UI窗口创建到所述UI层窗口对象的列表中。
对应的,所述窗口管理模块还用于执行上述步骤S51-S54,具体的:
创建Weston开源库的窗口管理模块对象(yl_desktop_shell对象)和窗口层级对象(weston_layer对象);
将所述视频层窗口对象的层级属性设置为第一预设值的WESTON_LAYER_POSITION_BOTTOM_UI,并将所述UI层窗口对象的层级属性设置为第二预设值的WESTON_LAYER_POSITION_NORMAL;
根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的ylvideo-shell-protocol内部协议回调函数的结构体来创建ylvideo-shell全局资源对象;
监听所述标准桌面协议和所述ylvideo-shell-protocol内部协议,以在接收到通过所述标准桌面协议发送的创建视频窗口请求时,将视频窗口创建到所述视频层窗口对象的列表中,及在接收到通过所述ylvideo-shell-protocol内部协议发送的创建UI窗口请求时,将UI窗口创建到所述UI层窗口对象的列表中。
为更好地理解本实施例,请结合图4,在本发明实施例中,窗口管理模块ylvideo-shell初始化流程具体如下:
首先、创建weston端的窗口管理模块对象yl_desktop_shell对象,以及窗口层级weston_layer对象video_layer和ui_layer,video_layer用来存放视频层窗口,ui_layer用来存放UI层窗口。
其次、将video_layer的层级属性position设置为WESTON_LAYER_POSITION_BOTTOM_UI(值为0x30000000),将ui_layer的层级属性position设置为WESTON_LAYER_POSITION_NORMAL(值为0x50000000),从而保证在UI窗口能一直显示在视频窗口之上,并且不会相互影响。
再次、根据定义好的weston_desktop_api回调函数的结构体来创建weston_destop桌面对象,以及将定义好的私有协议yl-video-shell处理函数的结构体来创建ylvideo-shell全局资源对象,从而保证从客户端接收请求后,能执行到相应的处理函数中。
最后、进入weston的默认监听流程,来接收客户端由xdg_shell和ylvideo-shell协议封装的消息通信。weston接到通过xdg-shell协议发过来的创建窗口请求时,都将窗口创建到video_layer的列表中;接到通过ylvideo-shell私有协议发过来的创建窗口请求时,都将窗口创建到ui_layer的列表中。
在某一个实施例中,步骤S30所述Weston开源库在接收到的所述视频端和所述UI端的显示请求后,根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,分别将所述视频缓冲区和所述UI缓冲区提交至直接渲染管理器的硬件图层单元中,并提交所述直接渲染管理器的显示请求,包括以下步骤:
S31、所述Weston开源库根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,将所述视频层窗口对象和所述UI层窗口对象中的weston_view窗口对象依次组成新的窗口队列;
S32、遍历所述窗口队列,获取拥有有效缓冲区的且全屏非透明的窗口或最后一个拥有有效缓冲区的窗口,以作为主硬件图层对应的输出窗口;
S33、在所述窗口队列中,从所述主硬件图层对应的输出窗口开始,从下到上依次分配窗口到对应的重叠硬件图层;
S34、依次将视频窗口的所述视频缓冲区和UI窗口的所述UI缓冲区,绑定至所述直接渲染管理器的对应硬件图层单元的帧缓冲区,并提交所述直接渲染管理器的显示请求。
对应的,所述窗口管理模块还用于执行上述步骤S31-S34,具体的:
根据创建所述第一绘制表面和创建所述第二绘制表面的顺序,将所述视频层窗口对象和所述UI层窗口对象中的weston_view窗口对象依次组成新的窗口队列;
遍历所述窗口队列,获取拥有有效缓冲区的且全屏非透明的窗口或最后一个拥有有效缓冲区的窗口,以作为主硬件图层对应的输出窗口;
在所述窗口队列中,从所述主硬件图层对应的输出窗口开始,从下到上依次分配窗口到对应的重叠硬件图层;
依次将视频窗口的所述视频缓冲区和UI窗口的所述UI缓冲区,绑定至所述直接渲染管理器的对应硬件图层单元的帧缓冲区,并提交所述直接渲染管理器的显示请求。
为更好地理解本实施例,请结合图5,在本发明实施例中,直接渲染管理器后端启动drm-backend的硬件图层Plane分配流程具体如下:
首先、按weston中layer队列的顺序,将ui_layer和video_layer对象中的weston_view窗口对象依次组成新的窗口队列view_list。
其次、从上到下遍历窗口队列,过滤掉未提交DMA(Direct Memory Access,直接存储器访问)直显Buffer的窗口,并且到能铺满全屏的非透明窗口,作为Primary Plane(主硬件图层)输出窗口。如果没有全屏非透明窗口,则默认按最后一个拥有有效Buffer的窗口作为Primary Plane输出窗口。
再次、在窗口队列中,从Primary Plane窗口开始,依次从下到上分配窗口到对应的Overlay Plane。
最后、依次将窗口的Buffer绑定到对应Plane的FrameBuffer,提交drm输出请求。
综上,相较于现有技术,在Linux系统下,基于Weston框架实现视频/UI系统的窗口管理模块——ylvideo-shell,并通过修改优化drm-backend(直接渲染管理器后端启动)的Plane硬件图层分配规则和显示逻辑,来实现完整的视频/UI的drm直接显示系统,从而充分使用和合理分配硬件资源,达到整机性能最优化的显示方案,具体的:
首先、ylvideo-shell通过libweston-desktop集成进wl-shell和xdg-shell协议的窗口,以提供给视频使用,方便第三方视频应用的接入,并定义视频层来管理视频窗口。
其次、ylvideo-shell基于标准的Wayland协议框架定义了UI内部使用的协议——ylvideo-shell-protocol,以实现对UI、白板、批注等非视频窗口的管理以及设置分辨率、休眠等功能,并定义UI层来管理UI窗口。
再次、ylvideo-shell对视频层和UI层进行z-order管理,即UI层在视频层的上方,以保证UI层里的窗口会一直显示在视频层窗口的上方。
最后、修改优化drm-backend的Plane分配规则和显示逻辑,来保证任意时刻都有充分的Plane被分配到每个窗口上,主视频默认以最高效的格式输出到主Plane上,4K主视频解码后能直接输出,4K的UI能以1080P的Buffer在Plane中放大,减少UI对视频的性能影响。
请参阅图6,本发明实施例提供一种计算机终端设备,包括一个或多个处理器和存储器。存储器与所述处理器耦接,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述任意一个实施例中的基于Wayland协议的视频和UI的drm直接显示方法。
处理器用于控制该计算机终端设备的整体操作,以完成上述的基于Wayland协议的视频和UI的drm直接显示方法的全部或部分步骤。存储器用于存储各种类型的数据以支持在该计算机终端设备的操作,这些数据例如可以包括用于在该计算机终端设备上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static RandomAccess Memory,简称SRAM),电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(ErasableProgrammable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。
在一示例性实施例中,计算机终端设备可以被一个或多个应用专用集成电路(Application Specific 1ntegrated Circuit,简称AS1C)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的基于Wayland协议的视频和UI的drm直接显示方法,并达到如上述方法一致的技术效果。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述任意一个实施例中的基于Wayland协议的视频和UI的drm直接显示方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器,上述程序指令可由计算机终端设备的处理器执行以完成上述的基于Wayland协议的视频和UI的drm直接显示方法,并达到如上述方法一致的技术效果。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
本文发布于:2023-04-15 05:31:34,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/4/86970.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |