CN117992160A - 一种显示方法及装置 - Google Patents

一种显示方法及装置 Download PDF

Info

Publication number
CN117992160A
CN117992160A CN202311856595.6A CN202311856595A CN117992160A CN 117992160 A CN117992160 A CN 117992160A CN 202311856595 A CN202311856595 A CN 202311856595A CN 117992160 A CN117992160 A CN 117992160A
Authority
CN
China
Prior art keywords
ivi
screen
service
display
instrument
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
Application number
CN202311856595.6A
Other languages
English (en)
Inventor
刘熙胖
廖正赟
崔永飞
龚希鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhengzhou Xinda Jiean Information Technology Co Ltd
Original Assignee
Zhengzhou Xinda Jiean Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhengzhou Xinda Jiean Information Technology Co Ltd filed Critical Zhengzhou Xinda Jiean Information Technology Co Ltd
Priority to CN202311856595.6A priority Critical patent/CN117992160A/zh
Publication of CN117992160A publication Critical patent/CN117992160A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Controls And Circuits For Display Device (AREA)

Abstract

本发明实施例提供一种显示方法及装置,应用于车载主机,车载主机上运行有内核,内核上运行有仪表系统和至少一个容器,至少一个容器包括IVI容器,IVI容器中运行有IVI系统;仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务。本发明实施例的技术方案,将仪表以外的操作系统运行在容器中,实现了各操作系统的隔离,降低了整车制造成本。另一方面,本发明实施例的仪表系统和IVI系统的显示框架互不影响,提升了仪表屏和IVI显示屏的安全性和用户体验。

Description

一种显示方法及装置
技术领域
本发明实施例涉及智能座舱技术领域,尤其涉及一种显示方法及装置。
背景技术
近年来,随着技术和经济的发展,汽车在人们日常生活中变得越来越普及,这极大地带动了汽车产业的发展。特别地,伴随着新能源技术、通信技术、人工智能等技术的发展,汽车产业朝着新四化的方向努力前进。整车厂、汽车零部件企业以及其他相关企业都深入参与其中并发生着深刻变化,智能座舱、智能驾驶、车联网等成为行业热点,这也伴随着技术复杂度的提升以及成本的上升。与此同时,如何平衡成本、功能等指标以获取市场也成为整车最终落地必须考虑的问题。
以智能座舱为例,现在市场上汽车除了配置传统的汽车仪表之外,还配置了车载信息娱乐系统(In-Vehicle Infotainment,IVI)等系统,以实现车载娱乐、辅助驾驶等功能。最初版本的IVI系统配置了专用的主机,一方面成本较高,存在主机资源未被充分利用的情况,另一方面,IVI系统与车辆中原有设施的集成也存在一些问题。
针对这些问题,出现了一机多屏的方案,即汽车仪表系统、IVI系统等承载在一个主机上。具体地,已有方案中,采用虚拟机技术,汽车仪表系统、IVI系统等分别运行在一个虚拟机上。然而,多个虚拟机的系统程序需要较多的主机运算资源,这就要求主机具备较强大的运算能力,依然存在成本高的问题。
进一步地,针对虚拟机技术需要占用较多主机运算资源的问题,一种可能的方案是采用容器化技术,发明人对此进行了研究。
发明内容
本发明实施例旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明实施例公开一种显示方法及装置,将仪表以外的操作系统运行在容器中,实现了各操作系统的隔离,降低了整车制造成本。且仪表系统和IVI系统的显示框架互不影响,提升了仪表屏和IVI显示屏的安全性和用户体验。
在第一方面中,本发明实施例提供一种显示方法,应用于车载主机,所述车载主机上运行有内核,所述内核上运行有仪表系统和至少一个容器,所述至少一个容器包括IVI容器,所述IVI容器中运行有IVI系统;所述仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;所述IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务;所述方法包括:
所述仪表系统中仪表应用在仪表显示Layer上绘制仪表显示内容;其中,所述仪表显示Layer由所述仪表应用请求所述第一SurfaceFlinger服务创建;
所述第一SurfaceFlinger服务将所述仪表显示内容合成为第一图像帧,并将所述第一图像帧发送给所述第一HardwareComposer服务;
所述第一HardwareComposer服务通过libdrm库调用第一子节点以将所述第一图像帧显示在仪表屏上;
所述IVI系统中IVI应用在IVI显示Layer上绘制IVI显示内容;其中,所述IVI显示Layer由所述IVI应用请求所述第二SurfaceFlinger服务创建;
所述第二SurfaceFlinger服务将所述IVI显示内容合成为第二图像帧,并将所述第二图像帧发送给所述第二HardwareComposer服务;
所述第二HardwareComposer服务通过libdrm库调用第二子节点以将所述第二图像帧显示在IVI屏上;
其中,所述第一子节点和所述第二子节点为内核中的显示驱动文件作为父节点虚拟出的两个模拟显示驱动文件。
在第一方面的一具体实施例中,所述方法还包括:
在所述仪表系统初始化阶段,所述仪表应用调用仪表投屏共享库文件,以开启仪表投屏功能;
在所述IVI系统初始化阶段,启动投屏系统服务;
在所述投屏系统服务启动成功后,所述仪表应用调用所述第一SurfaceFlinger服务创建投屏Layer,并利用所述仪表投屏共享库文件将所述投屏Layer对应的第一BufferQueue的Producer映射到所述投屏系统服务。
在第一方面的一具体实施例中,所述方法还包括:
所述IVI应用调用所述投屏系统服务创建一个虚拟屏幕,将所述虚拟屏幕对应的第二BufferQueue的Consumer映射到所述投屏系统服务,以将所述投屏Layer对应的Producer和所述虚拟屏幕对应的Consumer绑定;
所述IVI应用通过Presentation接口将IVI显示内容发送到所述虚拟屏幕上;
所述第一SurfaceFlinger服务将所述投屏Layer和所述仪表显示Layer合成,得到第三图像帧,并将所述第三图像帧发送给所述第一HardwareComposer服务;
所述第一HardwareComposer服务通过libdrm库调用第一子节点以将所述第三图像帧显示在仪表屏上。
在第一方面的一具体实施例中,所述方法还包括:
所述第一SurfaceFlinger服务调用所述仪表应用的OpacityMask函数设置所述仪表显示Layer中预设区域的透明度;其中,所述仪表显示Layer位于所述投屏Layer上方。
在第一方面的一具体实施例中,所述方法还包括:
所述第一SurfaceFlinger服务获取所述仪表显示Layer和所述投屏Layer的显示顺序指令;其中,所述显示顺序指令通过所述仪表应用或所述IVI应用输入;
所述第一SurfaceFlinger服务根据所述显示顺序指令确定所述仪表显示Layer和所述投屏Layer的显示顺序。
在第一方面的一具体实施例中,所述方法还包括:
在所述IVI系统初始化阶段,启动投屏系统服务;
所述IVI应用调用所述投屏系统服务时,设置窗口标题名称;其中,所述窗口标题名称表征需将所述IVI显示内容投屏至仪表屏上;
所述IVI应用根据所述窗口标题名称创建仪表SurfaceComposerClient;
所述仪表SurfaceComposerClient向第一SurfaceFlinger服务请求创建投屏Layer。
在第一方面的一具体实施例中,所述方法还包括:
在所述IVI显示内容更新时,创建第三BufferQueue;
获取与所述窗口标题名称关联的SurfaceControl;
设置与所述窗口标题名称关联的SurfaceControl中的显示层参数;
所述仪表SurfaceComposerClient根据所述显示层参数将所述更新后的IVI显示内容所述第三BufferQueue发送至所述投屏Layer。
在第二方面中,本发明实施例还公开一种显示装置,应用于车载主机,所述车载主机上运行有内核,所述内核上运行有仪表系统和至少一个容器,所述至少一个容器包括IVI容器,所述IVI容器中运行有IVI系统;所述仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;所述IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务;所述装置包括:
仪表应用单元,用于在仪表显示Layer上绘制仪表显示内容;其中,所述仪表应用单元位于所述仪表系统中,所述仪表显示Layer由所述仪表应用单元请求所述第一SurfaceFlinger服务创建;
第一合成单元,用于将所述仪表显示内容合成为第一图像帧,并将所述第一图像帧发送给所述第一HardwareComposer服务;其中,所述第一合成单元位于所述第一SurfaceFlinger服务中;
第一调用单元,用于通过libdrm库调用第一子节点以将所述第一图像帧显示在仪表屏上;其中,所述第一调用单元位于所述第一HardwareComposer服务中;
IVI应用单元,用于在IVI显示Layer上绘制IVI显示内容;其中,所述IVI应用单元位于所述IVI系统中,所述IVI显示Layer由所述IVI应用单元请求所述第二SurfaceFlinger服务创建;
第二合成单元,用于将所述IVI显示内容合成为第二图像帧,并将所述第二图像帧发送给所述第二HardwareComposer服务;其中,所述第二合成单元位于所述第二SurfaceFlinger服务中;
第二调用单元,用于通过libdrm库调用第二子节点以将所述第二图像帧显示在IVI屏上;其中,所述第二调用单元位于所述第二HardwareComposer服务中;
其中,所述第一子节点和所述第二子节点为内核中的显示驱动文件作为父节点虚拟出的两个模拟显示驱动文件。
在第二方面的一具体实施例中,所述装置还包括:
第三调用单元,用于在所述仪表系统初始化阶段,调用仪表投屏共享库文件,以开启仪表投屏功能;
第一启动单元,用于在所述IVI系统初始化阶段,启动投屏系统服务;
所述仪表应用单元还用于在所述投屏系统服务启动成功后,调用所述第一SurfaceFlinger服务创建投屏Layer,并利用所述仪表投屏共享库文件将所述投屏Layer对应的第一BufferQueue的Producer映射到所述投屏系统服务。
在第二方面的一具体实施例中,所述IVI应用单元还用于调用所述投屏系统服务创建一个虚拟屏幕,将所述虚拟屏幕对应的第二BufferQueue的Consumer映射到所述投屏系统服务,以将所述投屏Layer对应的Producer和所述虚拟屏幕对应的Consumer绑定;通过Presentation接口将IVI显示内容发送到所述虚拟屏幕上;
所述第一合成单元还用于将所述投屏Layer和所述仪表显示Layer合成,得到第三图像帧,并将所述第三图像帧发送给所述第一HardwareComposer服务;
所述第一调用单元还用于通过libdrm库调用第一子节点以将所述第三图像帧显示在仪表屏上。
在第二方面的一具体实施例中,所述装置还包括:
第四调用单元,用于调用所述仪表应用的OpacityMask函数设置所述仪表显示Layer中预设区域的透明度;其中,所述第四调用单元位于所述第一SurfaceFlinger服务中,所述仪表显示Layer位于所述投屏Layer上方。
在第二方面的一具体实施例中,所述装置还包括:
第一获取单元,用于获取所述仪表显示Layer和所述投屏Layer的显示顺序指令;其中,所述获取单元位于所述第一SurfaceFlinger服务中,所述显示顺序指令通过所述仪表应用或所述IVI应用输入;
确定单元,用于根据所述显示顺序指令确定所述仪表显示Layer和所述投屏Layer的显示顺序;其中,所述确定单元位于所述第一SurfaceFlinger服务中。
在第二方面的一具体实施例中,所述装置还包括:
第二启动单元,用于在所述IVI系统初始化阶段,启动投屏系统服务;
所述IVI应用单元还用于在调用所述投屏系统服务时,设置窗口标题名称;其中,所述窗口标题名称表征需将所述IVI显示内容投屏至仪表屏上;根据所述窗口标题名称创建仪表SurfaceComposerClient;
第一创建单元,用于使得所述仪表SurfaceComposerClient向第一SurfaceFlinger服务请求创建投屏Layer。
在第二方面的一具体实施例中,所述装置还包括:
第二创建单元,用于在所述IVI显示内容更新时,创建第三BufferQueue;
第二获取单元,用于获取与所述窗口标题名称关联的SurfaceControl;
设置单元,用于设置与所述窗口标题名称关联的SurfaceControl中的显示层参数;
更新单元,用于使得所述仪表SurfaceComposerClient根据所述显示层参数将所述更新后的IVI显示内容所述第三BufferQueue发送至所述投屏Layer。
本发明实施例的有益效果:
本发明实施例提供的一种显示方法及装置,应用于车载主机,车载主机上运行有内核,内核上运行有仪表系统和至少一个容器,至少一个容器包括IVI容器,IVI容器中运行有IVI系统;仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务;包括:仪表系统中仪表应用在仪表显示Layer上绘制仪表显示内容;第一SurfaceFlinger服务将仪表显示内容合成为第一图像帧,并将第一图像帧发送给第一HardwareComposer服务;第一HardwareComposer服务通过libdrm库调用第一子节点以将第一图像帧显示在仪表屏上;IVI系统中IVI应用在IVI显示Layer上绘制IVI显示内容;第二SurfaceFlinger服务将IVI显示内容合成为第二图像帧,并将第二图像帧发送给第二HardwareComposer服务;第二HardwareComposer服务通过libdrm库调用第二子节点将所述第二图像帧显示在IVI屏上。
本发明实施例的技术方案,将仪表以外的操作系统运行在容器中,实现了各操作系统的隔离,且相对于虚拟机技术,该技术方案需要的主机运算资源较少,因此可采用相对价格低廉的主机,降低整车的制造成本。另一方面,本发明实施例分别为仪表系统和IVI系统设置Surfaceflinger服务和HardwareComposer服务,以及显示驱动文件,使得仪表系统和IVI系统的显示框架互不影响,提升了仪表屏和IVI显示屏的安全性和用户体验。
附图说明
图1为本发明实施例提供的一种显示方法的流程示意图;
图2为本发明实施例提供的车载系统的结构示意图;
图3为本发明实施例提供的一种显示装置的结构示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明实施例的技术构思,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
为方便理解,首先对本发明实施例的应用场景和技术构思进行说明。本发明实施例的硬件场景为一台车载主机,仪表屏、IVI(in-vehicle infotainment,车载娱乐)屏等显示屏与车载主机之间通过总线连接。一般地,可采用的总线类型可以为CAN(ontrollerArea Network,控制器区域网络)总线、LIN(Local Interconnect Network,本地互联网络)总线、MOST(Media Oriented Systems Transport,面向媒体的系统传输)总线、FlexRay总线、Ethernet总线等车载总线。显示屏作为车载主机的显示输出设备提供显示服务。
进一步地,IVI屏也称为中控屏,在一些实施方式中,显示屏还可以包括副驾娱乐屏等其他屏幕,但本发明实施例中至少应包括仪表屏和中控屏。
下面对本发明实施例的技术构思进行说明:本发明实施例中,将仪表系统直接运行在车载主机上,将仪表系统以外的操作系统采用容器化技术实现,以实现其他操作系统和仪表系统的隔离。本发明实施例的技术方案,将仪表以外的操作系统运行在容器中,一方面实现了各操作系统的隔离,另一方面,相对于虚拟机技术,该技术方案需要的主机运算资源较少,因此可采用相对价格低廉的主机,降低整车的制造成本。在此基础上,发明人还对仪表系统和IVI系统的显示功能进行了研究。
具体地,本发明实施例分别为仪表系统和IVI系统设置Surfaceflinger服务和HardwareComposer服务,以及显示驱动文件,使得仪表系统和IVI系统的显示框架互不影响,避免出现Surfaceflinger服务、HardwareComposer服务和显示驱动文件一旦故障,所有显示服务不可用的情况,提升了仪表屏和IVI显示屏的安全性和用户体验。
下面参见附图对本发明实施例的技术方案进行具体说明。
参见图1所示,图1为本发明实施例提供的一种显示方法的流程示意图,图1所示显示方法应用于车载主机。
其中,车载主机的软件系统可参见图2所示。具体地,车载主机上运行有内核20,内核20上运行有仪表系统21和至少一个容器,至少一个容器包括IVI容器22,IVI容器22中运行有IVI系统。更为具体地,仪表系统21包括第一SurfaceFlinger服务210和第一HardwareComposer服务211;IVI系统包括第二SurfaceFlinger服务220和第二HardwareComposer服务221。
此处需要说明的是,由于本发明实施例主要介绍车载主机的软件系统显示方案,所以图2中仅仅对显示方案相关的模块进行了展示。实际应用中,仪表系统和IVI系统中还可以包括其他模块。例如,仪表系统21还可以包括:仪表容器服务、仪表容器客户端和容器管理服务。IVI容器22中还可以包括:IVI容器服务。其中,仪表容器服务用于获取来自于IVI容器服务的容器操作指令;仪表容器客户端用于向容器管理服务发送容器创建指令,以及用于将从仪表容器服务接收的容器操作指令转发给容器管理服务;容器管理服务用于在接收到容器创建指令时创建IVI容器,以及用于在接收到容器操作指令时执行相应操作;IVI容器服务用于从IVI应用获取容器操作指令,并将容器操作指令发送给仪表容器服务。关于其他模块后续仅对本发明实施例需要引用的模块进行适应性的说明,对本发明实施例的显示方法无关的部分不再详述。
下面对本发明实施例的显示方法进行说明。图1所示显示方法可以包括:
在步骤S110中,仪表系统中仪表应用在仪表显示Layer上绘制仪表显示内容。
其中,实际应用中,仪表应用可以为QT应用,OpenGL应用等。
仪表显示Layer由仪表应用请求第一SurfaceFlinger服务创建。具体地,仪表应用通过libGUI库创建仪表SurfaceComposerClient,并通过仪表SurfaceComposerClient向第一SurfaceFlinger服务请求创建仪表显示Layer。第一SurfaceFlinger服务将仪表显示Layer的句柄通过仪表SurfaceComposerClient提供给仪表应用,以支持仪表应用在仪表显示Layer上绘制仪表显示内容。其中,仪表显示Layer由第一SurfaceFlinger服务创建的Surface和该Surface的控制类Surfacecontrol共同决定。
在步骤S111中,第一SurfaceFlinger服务将仪表显示内容合成为第一图像帧,并将第一图像帧发送给第一HardwareComposer服务。
其中,第一SurfaceFlinger服务将仪表显示Layer中的仪表显示内容合成为第一图像帧的过程可参见已有技术中SurfaceFlinger服务合成图像帧的过程,此处不再赘述。
在步骤S112中,第一HardwareComposer服务通过libdrm库调用第一子节点以将第一图像帧显示在仪表屏上。
其中,libdrm库为用户空间和内核空间之间的显示数据传输通道,在本发明实施例中,对于第一HardwareComposer服务,libdrm库可以理解为第一HardwareComposer服务与内核20交互的通道,libdrm库向上为第一HardwareComposer服务提供图像帧的输入,向下为仪表系统提供显示驱动服务的第一子节点。
在步骤S113中,IVI系统中IVI应用在IVI显示Layer上绘制IVI显示内容。
其中,实际应用中,IVI应用可以为地图应用,音乐应用等。
IVI显示Layer由IVI应用请求第二SurfaceFlinger服务创建。具体地,IVI应用通过libGUI库创建IVISurfaceComposerClient,并通过IVISurfaceComposerClient向第二SurfaceFlinger服务请求创建IVI显示Layer。第二SurfaceFlinger服务将IVI显示Layer的句柄通过IVISurfaceComposerClient提供给IVI应用,以支持IVI应用在IVI显示Layer上绘制仪表显示内容。其中,IVI显示Layer由第二SurfaceFlinger服务创建的Surface和该Surface的控制类Surfacecontrol共同决定。
在步骤S114中,第二SurfaceFlinger服务将IVI显示内容合成为第二图像帧,并将第二图像帧发送给第二HardwareComposer服务。
第二SurfaceFlinger服务将IVI显示Layer中的IVI显示内容合成为第二图像帧的过程可参见已有技术中SurfaceFlinger服务合成图像帧的过程,此处不再赘述。
在步骤S115中,第二HardwareComposer服务通过libdrm库调用第二子节点将第二图像帧显示在IVI屏上。
其中,对于第二HardwareComposer服务,libdrm库可以理解为第二HardwareComposer服务与内核20交互的通道,libdrm库向上为第二HardwareComposer服务提供图像帧的输入,向下为IVI系统提供显示驱动服务的第二子节点。
可以理解的是,libdrm库是第一HardwareComposer服务和第二HardwareComposer服务共用的,libdrm库通过判断当前进程属于仪表系统还是IVI系统,来确定调用第一子节点还是第二子节点。
进一步地,第一子节点和第二子节点为内核中的显示驱动文件作为父节点虚拟出的两个模拟显示驱动文件。其中,显示驱动文件也称为显示设备文件,指的是位于内核中的dev/dri/card文件。以内核中的显示驱动文件为dev/dri/card0为例,可采用内核显示虚拟化技术利用dev/dri/card0虚拟出两个模拟显示驱动文件dev/dri/card1和dev/dri/card2,dev/dri/card1作为第一子节点,dev/dri/card2作为第二子节点。
本发明实施例提供的一种显示方法,应用于车载主机,车载主机上运行有内核,内核上运行有仪表系统和至少一个容器,至少一个容器包括IVI容器,IVI容器中运行有IVI系统;仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务;包括:仪表系统中仪表应用在仪表显示Layer上绘制仪表显示内容;第一SurfaceFlinger服务将仪表显示内容合成为第一图像帧,并将第一图像帧发送给第一HardwareComposer服务;第一HardwareComposer服务通过libdrm库调用第一子节点以将第一图像帧显示在仪表屏上;IVI系统中IVI应用在IVI显示Layer上绘制IVI显示内容;第二SurfaceFlinger服务将IVI显示内容合成为第二图像帧,并将第二图像帧发送给第二HardwareComposer服务;第二HardwareComposer服务通过libdrm库调用第二子节点将第二图像帧显示在IVI屏上。本发明实施例的技术方案,将仪表以外的操作系统运行在容器中,实现了各操作系统的隔离,且相对于虚拟机技术,该技术方案需要的主机运算资源较少,因此可采用相对价格低廉的主机,降低整车的制造成本。另一方面,本发明实施例分别为仪表系统和IVI系统设置Surfaceflinger服务和HardwareComposer服务,以及显示驱动文件,使得仪表系统和IVI系统的显示框架互不影响,提升了仪表屏和IVI显示屏的安全性和用户体验。
进一步地,考虑到司机观看中控屏上的地图应用等需要转头,用户体验不好,在本发明实施例的一些实施方式中,发明人还设计了IVI应用到仪表应用的投屏服务。具体地,在图1所示方法的基础上,本发明实施例的显示方法还可以包括:
在步骤A1中,在仪表系统初始化阶段,调用仪表投屏共享库文件,以开启仪表投屏功能。
其中,实际应用中,仪表投屏共享库文件以.so文件的形式存在,起着搭建仪表系统和IVI系统之间投屏功能的桥梁作用。调用仪表投屏共享库文件可以是仪表应用,也可以为仪表应用外的一个程序。
在步骤A2中,在IVI系统初始化阶段,启动投屏系统服务。
其中,IVI系统中的投屏系统服务为Android系统中自带的系统服务,如可以为ProjectionService服务,MediaProjection API服务等。
在步骤A3中,在投屏系统服务启动成功后,仪表应用调用第一SurfaceFlinger服务创建投屏Layer,并利用仪表投屏共享库文件将投屏Layer对应的第一BufferQueue的Producer映射到投屏系统服务。
其中,第一SurfaceFlinger服务创建投屏Layer参见第一SurfaceFlinger服务创建仪表显示Layer的过程,此处不再赘述。
本步骤中,在创建投屏Layer成功后,仪表应用利用仪表投屏共享库文件将投屏Layer对应的第一BufferQueue的Producer映射到投屏系统服务,相应的,第一SurfaceFlinger服务作为第一BufferQueue的Customer。
通过该具体实施方式,将第一SurfaceFlinger服务和IVI系统的投屏系统服务之间的通道打通,方便后续IVI应用使用投屏功能。
进一步地,下面对IVI应用投屏的过程进行说明,本发明实施例的显示方法还可以包括:
在步骤A4中,IVI应用调用投屏系统服务创建一个虚拟屏幕,将虚拟屏幕对应的第二BufferQueue的Consumer映射到投屏系统服务,以将投屏Layer对应的Producer和虚拟屏幕对应的Consumer绑定。
其中,第二BufferQueue的Producer可以理解为IVI显示Layer。如此,实现了IVI应用-虚拟屏幕-投屏系统服务-第一SurfaceFlinger服务之间数据通道的打通。此处需要说明的是,在IVI应用调用投屏系统服务创建虚拟屏幕时,是需要获知仪表屏分辨率的。具体地,仪表系统将仪表分辨率通过仪表容器服务发送给IVI容器服务,IVI容器服务再将仪表分辨率发送给投屏系统服务,以供投屏系统服务创建虚拟屏幕。
在步骤A5中,IVI应用通过Presentation接口将IVI显示内容发送到虚拟屏幕上。
IVI应用将IVI显示Layer中的IVI显示内容通过Presentation接口发送到虚拟屏幕上,由于之前建立了IVI应用-虚拟屏幕-投屏系统服务-第一SurfaceFlinger服务之间的数据通道,因此,通过该步骤实现了将IVI显示内容发送到投屏Layer。其中,Presentation接口用于定义IVI显示内容的表示方式和呈现方式,以将IVI显示内容正确地呈现在虚拟屏幕上。
在步骤A6中,第一SurfaceFlinger服务将投屏Layer和仪表显示Layer合成,得到第三图像帧,并将第三图像帧发送给第一HardwareComposer服务。
在步骤A7中,第一HardwareComposer服务通过libdrm库调用第一子节点以将第三图像帧显示在仪表屏上。
通过该具体实施方式,实现了仪表系统和IVI系统之间的投屏功能,最终使得IVI应用显示界面叠加仪表应用显示界面后显示在仪表屏上,方便司机观看。
进一步地,考虑到仪表显示Layer位于投屏Layer上方时,仪表显示Layer对投屏Layer的遮挡。在本发明实施例的一些具体实施方式中,本发明实施例的显示方法还可以包括:
第一SurfaceFlinger服务调用仪表应用的OpacityMask函数设置仪表显示Layer中预设区域的透明度。通常将预设区域调整为半透明或者全透明,以使得位于仪表显示Layer下方的投屏Layer对应的显示界面能够在仪表屏上显示。而预设区域的大小可配置为固定的,也可配置为用户可调整的。其中,第一SurfaceFlinger服务根据Layer中z值确定仪表显示Layer和投屏Layer的显示顺序,第一SurfaceFlinger服务根据Layer中stack参数确定需要合成的仪表显示Layer和投屏Layer。一般地,stack参数取值相同的Layer即为需要合成的Layer,因此,仪表显示Layer和投屏Layer的stack参数取值相同。
进一步地,考虑到由于生理、个性化需求等原因,不同用户对仪表显示Layer和投屏Layer显示顺序有不同的需求,为此,在本发明实施例的一些实施方式中,本发明实施例的显示方法还可以包括:
在步骤B1中,第一SurfaceFlinger服务获取仪表显示Layer和投屏Layer的显示顺序指令。
在步骤B2中,第一SurfaceFlinger服务根据显示顺序指令确定仪表显示Layer和投屏Layer的显示顺序。
其中,实际应用中,显示顺序指令可通过仪表应用或IVI应用输入。
该实施方式中,用户可根据自身需求灵活调整仪表显示Layer和投屏Layer的显示顺序,提升了用户体验。
进一步地,本发明实施例还存在其他投屏实现方式,例如,在本发明实施例的一些具体实施方式中,本发明实施例的显示方法还可以包括:
在步骤C1中,在IVI系统初始化阶段,启动投屏系统服务。
在步骤C2中,IVI应用调用投屏系统服务时,设置窗口标题名称。
其中,设置的窗口标题名称表征需将IVI显示内容投屏至仪表屏上。实际应用中,在Activity生命周期的onCreate()方法中设置窗口标题名称。
在步骤C3中,IVI应用根据窗口标题名称创建仪表SurfaceComposerClient。
IVI应用根据窗口标题名称可知需将IVI显示内容投屏至仪表屏上,因此IVI应用通过libGUI库创建仪表SurfaceComposerClient。
在步骤C4中,仪表SurfaceComposerClient向第一SurfaceFlinger服务请求创建投屏Layer。
通过该具体实施方式,将第一SurfaceFlinger服务和IVI系统的投屏系统服务之间的通道打通,方便IVI应用使用投屏功能。
进一步地,考虑到IVI显示内容更新需求,发明人还对IVI显示内容更新过程进行了研究。具体地,在本发明实施例的一些具体实施方式中,本发明实施例的显示方法还可以包括:
在步骤C5中,在IVI显示内容更新时,创建第三BufferQueue。
其中,该第三BufferQueue的Producer为IVI显示Layer,Consumer为投屏Layer。
在步骤C6中,获取与窗口标题名称关联的SurfaceControl。
在步骤C7中,设置与窗口标题名称关联的SurfaceControl中的显示层参数。
其中,显示层参数即为SurfaceControl中的layertype参数,用于表征投屏Layer所在层的位置。
在步骤C8中,仪表SurfaceComposerClient根据显示层参数将更新后的IVI显示内容发送至投屏Layer。
需要说明的是,前述方法实施例是显示方法的部分实施例,还可以存在其他实施例。例如,除了IVI容器外,还可以包括其他容器。在存在其他容器时,其他容器也应配置自身的SurfaceFlinger服务和HardwareComposer服务,其他容器的其他操作和功能和IVI容器类似或一致,可相互参考,此处不再赘述。
与前述方法实施例对应,本发明实施例还公开一种显示装置,应用于车载主机,车载主机上运行有内核,内核上运行有仪表系统和至少一个容器,至少一个容器包括IVI容器,IVI容器中运行有IVI系统;仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务。参见图3所示,本发明实施例的显示装置可以包括:仪表应用单元310、第一合成单元311、第一调用单元312、IVI应用单元313、第二合成单元314和第二调用单元315。
仪表应用单元310用于在仪表显示Layer上绘制仪表显示内容;其中,仪表应用单元位于310仪表系统中,仪表显示Layer由仪表应用单元请求第一SurfaceFlinger服务创建。
实际应用中,仪表应用单元310即为仪表系统中的仪表应用。
第一合成单元311用于将仪表显示内容合成为第一图像帧,并将第一图像帧发送给第一HardwareComposer服务;其中,第一合成单元位于第一SurfaceFlinger服务中。
第一调用单元312用于通过libdrm库调用第一子节点以将第一图像帧显示在仪表屏上;其中,第一调用单元位于第一HardwareComposer服务中。
IVI应用单元313用于在IVI显示Layer上绘制IVI显示内容;其中,IVI应用单元位于IVI系统中,IVI显示Layer由IVI应用单元请求第二SurfaceFlinger服务创建。
实际应用中,IVI应用单元310即为IVI系统中的IVI应用。
第二合成单元314用于将IVI显示内容合成为第二图像帧,并将第二图像帧发送给第二HardwareComposer服务;其中,第二合成单元位于第二SurfaceFlinger服务中。
第二调用单元315用于通过libdrm库调用第二子节点以将第二图像帧显示在IVI屏上;其中,第二调用单元位于第二HardwareComposer服务中。
其中,第一子节点和第二子节点为内核中的显示驱动文件作为父节点虚拟出的两个模拟显示驱动文件。
本发明实施例提供的一种显示装置,将仪表以外的操作系统运行在容器中,实现了各操作系统的隔离,且相对于虚拟机技术,该技术方案需要的主机运算资源较少,因此可采用相对价格低廉的主机,降低整车的制造成本。另一方面,本发明实施例分别为仪表系统和IVI系统设置Surfaceflinger服务和HardwareComposer服务,以及显示驱动文件,使得仪表系统和IVI系统的显示框架互不影响,提升了仪表屏和IVI显示屏的安全性和用户体验。
在本发明实施例的一些具体实施方式中,本发明实施例的显示装置还可以包括:
第三调用单元,用于在仪表系统初始化阶段,调用仪表投屏共享库文件,以开启仪表投屏功能;
第一启动单元,用于在IVI系统初始化阶段,启动投屏系统服务;
仪表应用单元310还用于在投屏系统服务启动成功后,调用第一SurfaceFlinger服务创建投屏Layer,并利用仪表投屏共享库文件将投屏Layer对应的第一BufferQueue的Producer映射到投屏系统服务。
在本发明实施例的一些具体实施方式中,IVI应用单元313还用于调用投屏系统服务创建一个虚拟屏幕,将虚拟屏幕对应的第二BufferQueue的Consumer映射到投屏系统服务,以将投屏Layer对应的Producer和虚拟屏幕对应的Consumer绑定;通过Presentation接口将IVI显示内容发送到虚拟屏幕上;
第一合成单元311还用于将投屏Layer和仪表显示Layer合成,得到第三图像帧,并将第三图像帧发送给第一HardwareComposer服务;
第一调用单元312还用于通过libdrm库调用第一子节点以将第三图像帧显示在仪表屏上。
在本发明实施例的一些具体实施方式中,本发明实施例的显示装置还可以包括:
第四调用单元,用于调用仪表应用的OpacityMask函数设置仪表显示Layer中预设区域的透明度;其中,第四调用单元位于第一SurfaceFlinger服务中,仪表显示Layer位于投屏Layer上方。
在本发明实施例的一些具体实施方式中,本发明实施例的显示装置还可以包括:
第一获取单元,用于获取仪表显示Layer和投屏Layer的显示顺序指令;其中,获取单元位于第一SurfaceFlinger服务中,显示顺序指令通过仪表应用或IVI应用输入;
确定单元,用于根据显示顺序指令确定仪表显示Layer和投屏Layer的显示顺序;其中,确定单元位于第一SurfaceFlinger服务中。
在本发明实施例的一些具体实施方式中,所述装置还可以包括:
第二启动单元,用于在所述IVI系统初始化阶段,启动投屏系统服务;
所述IVI应用单元313还用于在调用所述投屏系统服务时,设置窗口标题名称;其中,所述窗口标题名称表征需将所述IVI显示内容投屏至仪表屏上;根据所述窗口标题名称创建仪表SurfaceComposerClient;
第一创建单元,用于使得所述仪表SurfaceComposerClient向第一SurfaceFlinger服务请求创建投屏Layer。
在本发明实施例的一些具体实施方式中,所述装置还可以包括:
第二创建单元,用于在所述IVI显示内容更新时,创建第三BufferQueue;
第二获取单元,用于获取与所述窗口标题名称关联的SurfaceControl;
设置单元,用于设置与所述窗口标题名称关联的SurfaceControl中的显示层参数;
更新单元,用于使得所述仪表SurfaceComposerClient根据所述显示层参数将所述更新后的IVI显示内容所述第三BufferQueue发送至所述投屏Layer。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统及装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种显示方法,其特征在于,应用于车载主机,所述车载主机上运行有内核,所述内核上运行有仪表系统和至少一个容器,所述至少一个容器包括IVI容器,所述IVI容器中运行有IVI系统;所述仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;所述IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务;所述方法包括:
所述仪表系统中仪表应用在仪表显示Layer上绘制仪表显示内容;其中,所述仪表显示Layer由所述仪表应用请求所述第一SurfaceFlinger服务创建;
所述第一SurfaceFlinger服务将所述仪表显示内容合成为第一图像帧,并将所述第一图像帧发送给所述第一HardwareComposer服务;
所述第一HardwareComposer服务通过libdrm库调用第一子节点以将所述第一图像帧显示在仪表屏上;
所述IVI系统中IVI应用在IVI显示Layer上绘制IVI显示内容;其中,所述IVI显示Layer由所述IVI应用请求所述第二SurfaceFlinger服务创建;
所述第二SurfaceFlinger服务将所述IVI显示内容合成为第二图像帧,并将所述第二图像帧发送给所述第二HardwareComposer服务;
所述第二HardwareComposer服务通过libdrm库调用第二子节点以将所述第二图像帧显示在IVI屏上;
其中,所述第一子节点和所述第二子节点为内核中的显示驱动文件作为父节点虚拟出的两个模拟显示驱动文件。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述仪表系统初始化阶段,调用仪表投屏共享库文件,以开启仪表投屏功能;
在所述IVI系统初始化阶段,启动投屏系统服务;
在所述投屏系统服务启动成功后,所述仪表应用调用所述第一SurfaceFlinger服务创建投屏Layer,并利用所述仪表投屏共享库文件将所述投屏Layer对应的第一BufferQueue的Producer映射到所述投屏系统服务。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:
所述IVI应用调用所述投屏系统服务创建一个虚拟屏幕,将所述虚拟屏幕对应的第二BufferQueue的Consumer映射到所述投屏系统服务,以将所述投屏Layer对应的Producer和所述虚拟屏幕对应的Consumer绑定;
所述IVI应用通过Presentation接口将IVI显示内容发送到所述虚拟屏幕上;
所述第一SurfaceFlinger服务将所述投屏Layer和所述仪表显示Layer合成,得到第三图像帧,并将所述第三图像帧发送给所述第一HardwareComposer服务;
所述第一HardwareComposer服务通过libdrm库调用第一子节点以将所述第三图像帧显示在仪表屏上。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一SurfaceFlinger服务调用所述仪表应用的OpacityMask函数设置所述仪表显示Layer中预设区域的透明度;其中,所述仪表显示Layer位于所述投屏Layer上方。
5.如权利要求2至4任一项所述的方法,其特征在于,所述方法还包括:
所述第一SurfaceFlinger服务获取所述仪表显示Layer和所述投屏Layer的显示顺序指令;其中,所述显示顺序指令通过所述仪表应用或所述IVI应用输入;
所述第一SurfaceFlinger服务根据所述显示顺序指令确定所述仪表显示Layer和所述投屏Layer的显示顺序。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述IVI系统初始化阶段,启动投屏系统服务;
所述IVI应用调用所述投屏系统服务时,设置窗口标题名称;其中,所述窗口标题名称表征需将所述IVI显示内容投屏至仪表屏上;
所述IVI应用根据所述窗口标题名称创建仪表SurfaceComposerClient;
所述仪表SurfaceComposerClient向第一SurfaceFlinger服务请求创建投屏Layer。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
在所述IVI显示内容更新时,创建第三BufferQueue;
获取与所述窗口标题名称关联的SurfaceControl;
设置与所述窗口标题名称关联的SurfaceControl中的显示层参数;
所述仪表SurfaceComposerClient根据所述显示层参数将所述更新后的IVI显示内容所述第三BufferQueue发送至所述投屏Layer。
8.一种显示装置,其特征在于,其特征在于,应用于车载主机,所述车载主机上运行有内核,所述内核上运行有仪表系统和至少一个容器,所述至少一个容器包括IVI容器,所述IVI容器中运行有IVI系统;所述仪表系统包括第一SurfaceFlinger服务和第一HardwareComposer服务;所述IVI系统包括第二SurfaceFlinger服务和第二HardwareComposer服务;所述装置包括:
仪表应用单元,用于在仪表显示Layer上绘制仪表显示内容;其中,所述仪表应用单元位于所述仪表系统中,所述仪表显示Layer由所述仪表应用单元请求所述第一SurfaceFlinger服务创建;
第一合成单元,用于将所述仪表显示内容合成为第一图像帧,并将所述第一图像帧发送给所述第一HardwareComposer服务;其中,所述第一合成单元位于所述第一SurfaceFlinger服务中;
第一调用单元,用于通过libdrm库调用第一子节点以将所述第一图像帧显示在仪表屏上;其中,所述第一调用单元位于所述第一HardwareComposer服务中;
IVI应用单元,用于在IVI显示Layer上绘制IVI显示内容;其中,所述IVI应用单元位于所述IVI系统中,所述IVI显示Layer由所述IVI应用单元请求所述第二SurfaceFlinger服务创建;
第二合成单元,用于将所述IVI显示内容合成为第二图像帧,并将所述第二图像帧发送给所述第二HardwareComposer服务;其中,所述第二合成单元位于所述第二SurfaceFlinger服务中;
第二调用单元,用于通过libdrm库调用第二子节点以将所述第二图像帧显示在IVI屏上;其中,所述第二调用单元位于所述第二HardwareComposer服务中;
其中,所述第一子节点和所述第二子节点为内核中的显示驱动文件作为父节点虚拟出的两个模拟显示驱动文件。
9.如权利要求8所述的装置,其特征在于,所述装置还包括:
第三调用单元,用于在所述仪表系统初始化阶段,调用仪表投屏共享库文件,以开启仪表投屏功能;
第一启动单元,用于在所述IVI系统初始化阶段,启动投屏系统服务;
所述仪表应用单元还用于在所述投屏系统服务启动成功后,调用所述第一SurfaceFlinger服务创建投屏Layer,并利用所述仪表投屏共享库文件将所述投屏Layer对应的第一BufferQueue的Producer映射到所述投屏系统服务。
10.如权利要求9所述的装置,其特征在于,所述IVI应用单元还用于调用所述投屏系统服务创建一个虚拟屏幕,将所述虚拟屏幕对应的第二BufferQueue的Consumer映射到所述投屏系统服务,以将所述投屏Layer对应的Producer和所述虚拟屏幕对应的Consumer绑定;通过Presentation接口将IVI显示内容发送到所述虚拟屏幕上;
所述第一合成单元还用于将所述投屏Layer和所述仪表显示Layer合成,得到第三图像帧,并将所述第三图像帧发送给所述第一HardwareComposer服务;
所述第一调用单元还用于通过libdrm库调用第一子节点以将所述第三图像帧显示在仪表屏上。
11.如权利要求8所述的装置,其特征在于,所述装置还包括:
第四调用单元,用于调用所述仪表应用的OpacityMask函数设置所述仪表显示Layer中预设区域的透明度;其中,所述第四调用单元位于所述第一SurfaceFlinger服务中,所述仪表显示Layer位于所述投屏Layer上方。
12.如权利要求8至10任一项所述的装置,其特征在于,所述装置还包括:
第一获取单元,用于获取所述仪表显示Layer和所述投屏Layer的显示顺序指令;其中,所述获取单元位于所述第一SurfaceFlinger服务中,所述显示顺序指令通过所述仪表应用或所述IVI应用输入;
确定单元,用于根据所述显示顺序指令确定所述仪表显示Layer和所述投屏Layer的显示顺序;其中,所述确定单元位于所述第一SurfaceFlinger服务中。
CN202311856595.6A 2023-12-29 2023-12-29 一种显示方法及装置 Pending CN117992160A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311856595.6A CN117992160A (zh) 2023-12-29 2023-12-29 一种显示方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311856595.6A CN117992160A (zh) 2023-12-29 2023-12-29 一种显示方法及装置

Publications (1)

Publication Number Publication Date
CN117992160A true CN117992160A (zh) 2024-05-07

Family

ID=90886159

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311856595.6A Pending CN117992160A (zh) 2023-12-29 2023-12-29 一种显示方法及装置

Country Status (1)

Country Link
CN (1) CN117992160A (zh)

Similar Documents

Publication Publication Date Title
JP3722194B2 (ja) 画像表示システム
US7058898B2 (en) Abstract user interface manager with prioritization
US7277454B2 (en) Arbitration of communication channel bandwidth
US20030182233A1 (en) Manager level device/service arbitrator
US20040056890A1 (en) Method and system for provisioning mobile device machine interfaces
US7127386B2 (en) Java telematics emulator
EP1723516A1 (en) System and method for building mixed mode execution environment for component applications
US20030182360A1 (en) Java telematics system preferences
CN113676501A (zh) 基于Kubernetes集群的应用部署方法、装置以及电子设备
CN111045781A (zh) 一种云平台创建镜像的方法、装置和存储介质
CN109725977A (zh) 一种基于Android系统的多应用显示方法及终端设备
CN115794285A (zh) 一种在线主题切换方法、装置、设备及介质
JPH1115849A (ja) サーバ連携制御方法
WO2024114425A1 (zh) 智能座舱算力共享架构、算力共享方法、设备及介质
CN112698930B (zh) 一种获取服务器标识的方法、装置、设备及介质
CN117992160A (zh) 一种显示方法及装置
CN116088784B (zh) 图像投屏方法、装置、电子设备、芯片、存储介质及车辆
CN110347475B (zh) 服务调用方法、服务调用装置及服务调用系统
Usorac et al. Linux container solution for running Android applications on an automotive platform
CN114025220B (zh) 一种多版本iptv的控制系统及方法
CN114675786A (zh) 一种大容量存储挂载方法、装置、终端及介质
CN113489898B (zh) 摄像头的调用方法、装置、交通工具和存储介质
KR101326231B1 (ko) 가상화 소프트웨어 서비스 시스템 및 이를 위한 서비스 서버 및 사용자단말
CN115767482A (zh) 交互方法、车载终端、可穿戴设备以及存储介质
CN115756368A (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