全景影像显示方法、计算机存储介质及电子设备与流程

文档序号:25543326发布日期:2021-06-18 20:40
全景影像显示方法、计算机存储介质及电子设备与流程

本发明涉及车载摄像技术领域,特别是涉及一种基于安卓系统的全景影像显示方法、计算机存储介质及电子设备。



背景技术:

全景影像系统(aroundviewmonitor,简称avm)通过多个超大广角鱼眼镜头拍摄图像,然后经过数据处理对拍摄图像进行畸变矫正以及拼接,形成车辆周围的影像并显示在车载终端的显示屏上。

目前的基于安卓(android)系统的全景影像系统出图显示方案,在车载终端的显示屏上显示全景影像系统图形时,必须等待android系统的系统框架层的原生surfaceflinger服务(即,原生图形绘制服务,其为android系统的一个native进程,负责将一些应用程序的图层进行合成,图层叠加后构成ui(用户交互)界面)启动并且与原生surfaceflinger服务建立通信之后才能进行显示,且当有其他应用程序被调起时会遮挡全景影像系统的画面,从而影响行车安全。



技术实现要素:

鉴于上述技术问题,提出了一种解决上述问题或者至少部分解决上述问题的全景影像显示方法、计算机存储介质及电子设备。

本发明的一个目的是要提供一种基于安卓系统的全景影像显示方法,使得全景图像的显示时机不再受限于android系统的原生图形绘制服务的启动时机。

本发明一个进一步的目的是要使得全景影像系统的全景图像的显示优先级最高,以便保证全景影像系统的全景图像所在图层不会被其它应用程序的图层覆盖,确保行车安全。

特别地,根据本发明的一方面,本发明提供了一种基于安卓系统的全景影像显示方法,安卓系统包括系统框架层和linux内核层,系统框架层配置有用于与linux内核层的显示屏的虚拟驱动设备进行交互的函数接口库,基于安卓系统的全景影像显示方法包括:

启动全景影像显示进程,在全景影像显示进程中加载函数接口库;

创建函数接口库对应的实例,按照预先设置的显示屏标识以及函数接口库支持的缓存队列的队列长度初始化实例;

调用实例提供的第一接口,以获取显示屏标识和队列长度;

基于显示屏标识打开对应的虚拟驱动设备,并向虚拟驱动设备申请满足队列长度的显存空间;

控制全景影像显示进程利用显存空间进行图像绘制,并将绘制完成后的全景图像的数据送达虚拟驱动设备进行显示。

可选地,控制全景影像显示进程利用显存空间进行全景图像绘制,包括:

通过调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出一块缓存区;

利用取出的缓存区绘制全景图像。

可选地,通过调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出一块缓存区,包括:

通过调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出状态标识为空闲的一块缓存区;且

在利用取出的缓存区绘制全景图像之后,基于安卓系统的全景影像显示方法还包括:

将绘制完成全景图像的缓存区的状态标识更改为绘制完成。

可选地,将绘制完成后的全景图像的数据送达虚拟驱动设备进行显示,包括:

通过调用实例的消费缓存queuebuffer函数,找到显存空间的缓存队列中状态标识为绘制完成的缓存区;

调用实例提供的第二接口向虚拟驱动设备发送第二指令,以将状态标识为绘制完成的缓存区内需要显示的全景图像的数据送达虚拟驱动设备进行显示。

可选地,在调用实例提供的第二接口向虚拟驱动设备发送第二指令之前,还包括:

调用实例提供的第三接口向虚拟驱动设备发送第一指令,以使虚拟驱动设备忽略安卓系统的原生图形绘制服务送过来的其他应用程序的显示图像的数据。

可选地,在调用实例提供的第二接口向虚拟驱动设备发送第二指令之后,还包括:

监测全景影像系统进程是否退出;

若是,调用实例提供的第四接口向虚拟驱动设备发送第三指令,以使虚拟驱动设备接收安卓系统的原生图形绘制服务送过来的其他应用程序的显示图像的数据进行显示。

可选地,在将绘制完成后的全景图像的数据送达虚拟驱动设备进行显示之后,前述基于安卓系统的全景影像显示方法,还包括:

删除显存空间的缓存队列中绘制完成全景图像的缓存区内的已显示完成的全景图像的数据。

可选地,启动全景影像显示进程,包括:

在开机阶段,在linux内核层完全启动后启动全景影像显示进程。

根据本发明的另一方面,本发明还提供了一种计算机存储介质,计算机存储介质存储有计算机程序代码,当计算机程序代码在计算设备上运行时,导致计算设备执行前述任一个的基于安卓系统的全景影像显示方法。

根据本发明的又一方面,本发明还提供了一种电子设备,包括:

处理器;

存储器,存储有计算机程序代码,当计算机程序代码被处理器运行时,导致电子设备执行前述任一个的基于安卓系统的全景影像显示方法。

本发明的方案通过在系统框架层增加函数接口库与linux内核层的显示屏的虚拟驱动设备进行交互,使全景影像显示进程与安卓系统的原生surfaceflinger服务(即,原生图形绘制服务)解绑,全景影像显示进程通过函数接口库进行ui界面的绘制,使最终显示在车载终端的显示屏上的全景图像的显示时机不再受限于原生surfaceflinger服务的启动时机。

进一步地,本发明通过调用实例提供的第三接口向虚拟驱动显示设备发送第一指令,可以使虚拟驱动设备忽略安卓系统的原生surfaceflinger服务送来的其它应用程序的显示图像的数据,从而使全景影像系统的全景图像显示的优先级最高,以便保证全景影像系统的全景图像所在图层不会被其它应用程序的图层覆盖,从而能够确保行车安全。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:

图1是根据本发明一个实施例的安卓系统的示意性框架框图;

图2是根据本发明一个实施例的基于安卓系统的全景影像显示方法的示意性流程图;

图3是根据本发明另一个实施例的基于安卓系统的全景影像显示方法的示意性流程图;

图4是根据本发明一个实施例的电子设备的示意性结构图。

具体实施方式

下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。

图1是根据本发明一个实施例的安卓系统100的示意性框架框图。参见图1,安卓(android)系统100可以包括linux内核层110、应用程序层120以及系统框架层130。

linux内核层110主要用于完成android系统100所具有的功能,其内具有显示屏的虚拟驱动设备111。

应用程序层120由运行在android设备上的多个应用程序121构成,包括预装的系统应用和后期安装的第三方应用。

系统框架层130设置在linux内核层110与应用程序层120之间,可用于支持应用程序层120中的应用程序121的运行。系统框架层130配置有原生surfaceflinger服务(即,原生图形绘制服务)131、gralloc(graphicsalloc,图形分配)模块132、函数库加载模块133以及函数接口库134。原生surfaceflinger服务131用于绘制应用程序层120中各应用程序121的图形。gralloc模块132用于从原生surfaceflinger服务接收绘制完成的各应用程序的显示图像的数据,并送达linux内核层110的显示屏的虚拟驱动设备111进行显示。函数库加载模块133用于启动全景影像显示进程,并在全景影像显示进程中加载函数接口库134。函数接口库134用于与linux内核层110的显示屏的虚拟驱动设备111进行交互。

需要说明的是,绘制应用程序层120中各应用程序121的显示图像的数据的意思是将应用程序层120中各应用程序的显示图像的数据写入到原生surfaceflinger服务131所支持的缓存队列中。

图2是根据本发明一个实施例的基于安卓系统的全景影像显示方法的示意性流程图。参见图2,在本发明一实施例中,基于安卓系统的全景影像显示方法可包括步骤s202至步骤s210。

步骤s202,启动全景影像显示进程,在全景影像显示进程中加载函数接口库。

步骤s204,创建函数接口库对应的实例,按照预先设置的显示屏标识以及函数接口库支持的缓存队列的队列长度初始化实例。

步骤s206,调用实例提供的第一接口,以获取显示屏标识和队列长度。

步骤s208,基于显示屏标识打开对应的虚拟驱动设备,并向虚拟驱动设备申请满足队列长度的显存空间。

步骤s210,控制全景影像显示进程利用显存空间进行图像绘制,并将绘制完成后的全景图像的数据送达虚拟驱动设备进行显示。

本发明实施例的安卓系统的系统框架层新增有用于与linux内核层的显示屏的虚拟驱动设备进行交互的函数接口库,通过在全景影像显示进程中加载函数接口库,创建函数接口库对应的实例,按照预先设备的显示屏标识以及函数接口库支持的缓存队列的队列长度初始化实例,然后通过调用实例提供的第一接口获取显示屏标识和缓存队列的队列长度,进而基于显示屏标识打开对应的虚拟驱动设备,并向虚拟驱动设备申请满足队列长度的显存空间,从而控制全景影像显示进程利用申请到的显存空间进行图像绘制,并将绘制完成后的全景图像的数据送达虚拟驱动设备进行显示。本发明实施例的方案通过在系统框架层增加函数接口库与linux内核层的显示屏的虚拟驱动设备进行交互,使全景影像显示进程与安卓系统的原生surfaceflinger服务(即,原生图形绘制服务)解绑,进而全景影像显示进程通过函数接口库进行全景图像绘制,使最终显示在车载终端中显示屏上的全景图像的显示时机不再受限于原生surfaceflinger服务的启动时机,提高了全景图像显示的灵活性,提升了全景影像系统的出图显示效率。

实际应用中,全景影像显示进程的启动时机尤为重要,通过设置合理的启动时机,有助于提高全景影像系统的出图显示效率。在本发明的一些实施例中,对于步骤s202中启动全景影像显示进程,可在开机阶段,在linux内核层完全启动后启动全景影像显示进程,如此通过设置合适的启动时机,即可最大程度提高全景影像系统的出图显示效率。

步骤s204中的函数接口库支持的缓存队列可包括多块缓存区。在本发明一实施例中,在控制全景影像显示进程利用显存空间进行图像绘制时,可通过调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出一块缓存区,进而利用取出的缓存区绘制全景图像。这里绘制全景图像的意思是将gpu(graphicsprocessingunit,图形处理器)已经处理好的从车载摄像头采集的全景图像的数据写入函数接口库支持的缓存队列的缓存区内。本实施例调用生产缓存dequeuebuffer函数来绘制全景图像,能够提高全景影像系统的稳定性,有助于提升后续全景图像的显示效果。

其中,每块缓存区可具有状态标识,例如可以包括:正在显示、正在绘制、绘制完成以及空闲等状态标识。

在一些实施例中,在通过调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出一块缓存区时,可通过调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出状态标识为空闲的一块缓存区。然后利用取出的状态标识为空闲的缓存区绘制全景图像,并将绘制完成全景图像的缓存区的状态标识更改为绘制完成。

在另一些实施例中,在利用某一空闲缓存区绘制全景图像的过程中,还可将缓存区的状态标识从空闲更改为正在绘制,然后检测状态标识为正在绘制的缓存区内全景图像是否已绘制完成,并在绘制完成后将缓存区的状态标识从正在绘制更改为绘制完成。通过缓存区的状态标识可方便及时了解缓存区的全景图像的绘制状态。

对于步骤s210中的将绘制完成后的全景图像的数据送达虚拟驱动设备进行显示,本发明实施例提供了一种具体实施方式。在本发明的一具体实施例中,可通过调用实例的消费缓存queuebuffer函数,找到显存空间的缓存队列中状态标识为绘制完成的缓存区,然后调用实例提供的第二接口向虚拟驱动设备发送第二指令,以将状态标识为绘制完成的缓存区中需要显示的全景图像的数据送达虚拟驱动设备进行显示。相应地,虚拟驱动设备可接收第二指令,并对第二指令进行解析处理,得到缓存队列中状态标识为绘制完成的缓存区中需要显示的全景图像的数据,并根据需要显示的全景图像的数据进行显示。本实施例通过调用实例的消费缓存queuebuffer函数,可以迅速获取缓存队列中状态标识为绘制完成的缓存区,进而对缓存队列中状态标识为绘制完成的缓存区中需要显示的全景图像的数据进行显示,从而简便了显示逻辑,提高了全景影像系统的出图显示的准确度。并且,通过状态标识查找需要显示的缓存区,可有效缩短查找时间,大大提高了全景影像系统的出图显示效率。

在本发明的一些实施例中,在调用实例提供的第二接口向虚拟驱动设备发送第二指令之前,还可调用实例提供的第三接口向虚拟驱动设备发送第一指令,以使虚拟驱动设备忽略安卓系统的原生图形绘制服务送过来的其他应用程序的显示图像的数据。基于该实施例可使全景影像系统的全景图像显示的优先级最高,以便保证全景影像系统的全景图像所在图层不会被其它应用程序的图层覆盖,从而能够确保行车安全。

在本发明的另一些实施例中,在调用实例提供的第二接口向虚拟驱动设备发送第二指令之后,还可以监测全景影像显示进程是否退出,并在监测到全景影像显示进程退出时,通过实例提供的第四接口向虚拟驱动设备发送第三指令,以使虚拟驱动设备继续接收安卓系统的原生图形绘制服务送过来的其他应用程序的显示图像的数据进行显示。本实施例在出图显示过程中,可监测全景影像显示进程的运行状态,避免了其他应用程序被调起时,其他应用程序的显示图像所在的图层被全景图像所在的图层覆盖,从而造成其它应用程序运行异常的情况。

考虑到缓存队列的队列长度通常是固定的,如果函数接口库支持的缓存队列内容纳的全景图像的数据已达到该缓存队列的队列长度(即,队列的最大值),全景影像显示进程就无法再利用缓存队列进行全景图像的绘制,从而导致车载终端的显示屏无法显示新的全景图像,容易引发安全问题,尤其在倒车场景时,因无法观察到倒车影像,极易造成倒车碰撞,降低了用户的使用体验。针对这种情况,在本发明一些实施例中,还可实时或间隔预设时间检测缓存队列中状态标识为绘制完成的缓存区中需要显示的全景图像的数据是否均已显示完成。若均已显示完成,则可将全景图像的数据均已显示完成的缓存区的状态标识从绘制完成更改为显示完成,并删除状态标识为显示完成的缓存区内的全部全景图像的数据。反之,若未全部显示完成,则可删除状态标识为绘制完成的缓存区内的已显示完成的全景图像的数据。本实施例可在绘制完成的缓存区中需要显示的全景图像的数据均显示完成时,删除全部缓存区内全部全景图像的数据,而在未全部显示完成时,仅删除缓存区内的已显示完成的全景图像的数据,从而可及时释放缓存队列空间,以便接收新的全景图像的数据。

进一步的,针对缓存队列中的任一块缓存区,在将该缓存区内的已显示完成的全景图像的数据全部删除完成后,还可将该缓存区的状态标识从显示完成更改为空闲,以便全景影像显示进程获取空闲的缓存区进行新的全景图像的绘制。

图3是根据本发明另一个实施例的基于安卓系统的全景影像显示方法的示意性流程图。参见图3,在本发明一实施例中,基于安卓系统的全景影像显示方法可包括步骤s302至步骤s332。

步骤s302,在开机阶段启动linux内核层。

步骤s304,判断linux内核层是否完全启动。若是,执行步骤s306;若否,返回步骤s302。

步骤s306,启动全景影像显示进程。

步骤s308,在全景影像显示进程中加载函数接口库,并创建函数接口库对应的实例。

步骤s310,按照预先设置的显示屏标识以及函数接口库支持的缓存队列的队列长度初始化实例。

步骤s312,调用实例提供的第一接口,获取显示屏标识和队列长度。

步骤s314,基于显示屏标识打开对应的虚拟驱动设备,并向虚拟驱动设备申请满足队列长度的显存空间。

步骤s316,调用实例的生产缓存dequeuebuffer函数从显存空间的缓存队列中取出状态标识为空闲的一块缓存区。

步骤s318,利用取出的空闲缓存区绘制全景图像,将该空闲缓存区的状态标识从空闲更改为正在绘制。

步骤s320,判断状态标识为正在绘制的缓存区内全景图像是否绘制完成。若是,执行步骤s322;若否,继续执行步骤s320。

步骤s322,将绘制完成全景图像的缓存区的状态标识从正在绘制更改为绘制完成。

步骤s324,调用实例提供的第三接口向虚拟驱动设备发送第一指令。该步骤中的第一指令用于使虚拟驱动设备忽略安卓系统的原生图形绘制服务送来的其他应用程序的显示图像的数据。

步骤s326,调用实例的消费缓存queuebuffer函数,找到显存空间的缓存队列中状态标识为绘制完成的缓存区,调用实例提供的第二接口并向虚拟驱动设备发送第二指令。该步骤中第二指令包括缓存队列中状态标识为绘制完成的缓存区中需要显示的全景图像的数据。虚拟驱动设备在接收到第二指令后,对第二指令进行解析处理,得到缓存队列中状态标识为绘制完成的缓存区中需要显示的全景图像的数据,并根据解析处理得到的全景图像的数据进行显示。

步骤s328,删除显存空间的缓存队列中状态标识为绘制完成的缓存区内已显示完成的全景图像的数据,将该绘制完成的缓存区的状态标识更改为空闲。

步骤s330,监测全景影像系统进程是否退出。若退出,执行步骤s332;若未退出,返回步骤s316。

步骤s332,通过实例提供的第四接口向虚拟驱动设备发送第三指令。该步骤中的第三指令用于使虚拟驱动设备接收安卓系统的原生图形绘制服务送过来的其他应用程序的显示图像的数据进行显示。

本发明实施例中,全景影像显示进程可直接调用与虚拟驱动设备交互的函数接口库进行全景图像显示,可以做到在linux内核层启动后即可与车载终端的显示屏的虚拟驱动设备进行交互,不必等待安卓系统的应用框架层的原生图形绘制服务启动,在虚拟驱动设备收到全景影像显示进程进行送显的图层时,可屏蔽原生图形绘制服务送显的图层,从而能够保证全景图像显示时,其它应用程序无法覆盖在全景影像系统图像之上,确保了全景图像的显示优先级最高。

在另一些实施例中,在执行步骤s326之后,还可判断缓存队列中状态标识为绘制完成的缓存区中需要显示的全景图像的数据是否均已显示完成。若均已显示完成,可将显示完成的缓存区的状态标识从绘制完成更改为显示完成,并删除状态标识为显示完成的缓存区内的全部全景图像的数据。若未全部显示完成,则继续执行前述步骤s328。如此可节省存储资源,提高出图显示效率。

基于同一发明构思,在本发明一实施例中,还提供了一种计算机存储介质。该实施例的计算机存储介质存储有计算机程序代码。当计算机程序代码在计算设备上运行时,导致计算设备执行前述任意一个实施例或多个实施例的组合中的基于安卓系统的全景影像显示方法。

上述的第一接口、第二接口、第三接口和第二接口为函数接口库中的软接口,通过这些接口接受或者发送相应的指令。

基于同一发明构思,在本发明一实施例中,还提供了一种电子设备。图4是根据本发明一个实施例的电子设备400的示意性结构图。参见图4,该实施例的电子设备可以包括处理器410以及存储器420。

存储器420内可存储有计算机程序代码,当计算机程序代码被处理器410运行时,导致电子设备400执行前述任意一个或多个实施例组合中的基于安卓系统的全景影像显示方法。

根据上述任意一个实施例或多个实施例的组合,本发明实施例能够达到如下有益效果:

采用本发明实施例的方案,可以使全景影像显示进程与安卓系统的原生图形绘制服务解绑,进而全景影像显示进程通过新增的函数接口库进行全景图像的绘制,从而使最终显示在车载终端中显示屏上的全景图像的显示时机不再受限于原生图形绘制服务的启动时机,出图显示效率得以大大提升。并且,本发明实施例通过调用实例提供的第三接口可向虚拟驱动显示设备发送第一指令,可以使虚拟驱动设备忽略安卓系统的原生图形绘制服务送来的显示图形,从而使全景影像系统的全景图像的显示优先级最高,避免了全景图像所在图层被其它应用程序的图层所覆盖,从而确保了行车安全。

至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。

再多了解一些
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1