本发明涉及应用开发领域,尤其涉及一种倒车影像处理方法、电子设备及存储介质。
背景技术:
车辆倒车过程中,通过车载摄像头采集汽车后方影像,并在驾驶位的显示器上显示倒车影像。一般汽车的中控设备采用安卓系统,而安卓的java层整体启动较慢,大多数写在java层的倒车应用会在车辆倒挡后,二十多秒才会出现倒车画面,因此,为了快速加载倒挡影像,将倒车程序放在native层由c 实现。
基于安卓原生的evs(exteriorviewsystem)方案也是在native层通过c 实现,可以快速进行倒车影像处理,然而,由于原生evs配置属组中没有对应触屏事件及can模块消息处理权限,只可以单独显示倒车画面,驾驶员不能进行相应触屏操作,用户交互体验较差。
技术实现要素:
有鉴于此,本发明实施例提供了一种倒车影像处理方法、电子设备及存储介质,以解决现有倒车过程中基于安卓原生evs开发的影像处理无法进行触屏操作的问题。
在本发明实施例的第一方面,提供了一种倒车影像处理方法,包括:
通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性;
从can模块监听倒车信息后,在预定显示画面展示所述surface对象,并通过opengl创建纹理,在所述surface对象上循环绘制倒车画面;
监听所述预定显示画面上的触屏消息,并根据所述触屏消息进行对应的画面显示逻辑处理;
当通过can模块获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。
在本发明实施例的第二方面,提供了一种用于倒车影像处理的电子设备,包括:
创建模块,用于通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性;
绘制模块,用于从can模块监听倒车信息后,在预定显示画面展示所述surface对象,并通过opengl创建纹理,在所述surface对象上循环绘制倒车画面;
监听模块,用于监听所述预定显示画面上的触屏消息,并根据所述触屏消息进行对应的画面显示逻辑处理;
退出模块,用于当通过can模块获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。
在本发明实施例的第三方面,提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。
本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
本发明实施例中,基于surfaceflinger创建本地surface对象,设置surface的基本属性,从can模块监听倒车信息后,在显示画面展示surface,并通过opengl创建纹理,在所述surface上循环绘制倒车画面;同时,监听所述预定显示画面上的触屏消息,根据触屏消息进行对应的画面显示逻辑处理;当获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。可以在快速获取并绘制倒车影像的同时,监听触屏消息进而同时进行画面显示逻辑处理,从而解决了现有难以在显示倒车影像时进行触屏操作处理的问题。本方案在安卓nativec 层创建surface,利用opengl绘制倒车画面,明显改善了快速倒车后,倒车画面出现的时间,同时增加了触屏和can消息的处理、权限设置等,优化了opengl方案,只创建一次surface和纹理,减少了内存的消耗。避免启动时,申请图片内存申请失败导致黑屏的情况。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见地,下面描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他附图。
图1为本发明的一个实施例提供的一种倒车影像处理方法的流程示意图;
图2为本发明的一个实施例提供的一种用于倒车影像处理的电子设备的结构示意图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明的说明书或权利要求书及上述附图中的术语“包括”以及其他相近意思表述,意指覆盖不排他的包含,如包含一系列步骤或单元的过程、方法或系统、设备没有限定于已列出的步骤或单元。
在现有基于安卓原生的evs(exteriorviewsystem)的倒车影像处理方法中,由于没有直接使用surfaceflinger和获取触屏消息的权限,也没有对can模块消息进行处理,只能简单的显示倒车影像。同时,在原生evs里,基于opengl的图像绘制,对内存申请要求较高,图像转码算法也比较耗损cpu,存在重复申请内存,有可能会导致黑屏。
基于安卓原生evs在使用时存在的诸多问题,本发明实施例提供了一种新的倒车影像处理方法。请参阅图1,图1为本发明实施例提供的一种倒车影像处理方法的流程示意图,包括:
s101、通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性;
所述surfaceflinger函数可接受多个来源的图形显示数据,将他们合成后发送至显示设备进行显示。所述surface对象为图像的显示窗口,基于创建的surface对象可以进行图像的绘制。
具体的,在安卓nativec 层,利用surfacecomposerclien->createsurface创建本地surface,示例性的,createsurface函数参数为:
(string8("benchmark"),1920,720,pixel_format_rgbx_8888,isurfacecomposerclient::eopaque);
即包括名称,像素、rgb格式,图层的最上层等。
优选的,为倒车影像主程序配置rc文件,并更换成system属组,增加访问surfaceflinger和获取触屏消息的权限。启动init进程后,可以调用倒车影像处理进程,即init进程通过rc文件将倒车影像处理进程调用。
s102、从can模块监听倒车信息后,在预定显示画面展示所述surface对象,并通过opengl创建纹理,在所述surface对象上循环绘制倒车画面;
所述can模块为汽车电子控制装置之间实现通讯数据转发的智能电控设备,可以实现整车车载电控装置区域性系统控制。到车辆倒车时,可以由can总线获得倒车信息。
当从can模块获取倒车信息后,在车辆显示设备的显示画面上show出已创建的本地全局变量surface。
所述opengl为用于图像渲染的应用程序编程接口,利用opengl绘制图像前,判断opengl是否已完成初始化,若未初始化,则对opengl进行初始化,并创建一次纹理,若初始化已经完成,就不再初始化和创建纹理,节省内存消耗。
其中,利用opengl在surface上循环绘制倒车画面,绘制的倒车画面中包括倒车静态和动态轨迹线,倒车影像,旁边和用户交互的按钮,倒车雷达包络线。
优选的,当从can模块获取到倒车信息后,控制打开摄像头节点,启动通过摄像头节点获取倒车影像的线程,将获取的yuv格式图像转换为opengl能够渲染绘制的rgba格式图像。
s103、监听所述预定显示画面上的触屏消息,并根据所述触屏消息进行对应的画面显示逻辑处理;
一般的,在车载显示器上绘制倒车影像时,还需要对车辆进行其他操作,而此时由于图像绘制无法提供交互按钮,通过在预定显示画面上绘制交互按钮,在c 层利用设备节点“/dev/input/eventx”,即获取硬件(如触屏设备)输入事件的方式,从linux层获取对应的触屏消息,处理对应画面逻辑,可以使得车辆可以同时进行其他操作。
s104、当通过can模块获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。
实时监听车辆的can模块,当获取到非倒挡消息后,及时推出倒车影像绘制,控制关闭摄像头设备,并隐藏(hide)surface对象的画面显示。
基于实施例的方案,可以有效弥补原生evs方案权限问题,触屏功能缺失,opengl方案内存不够时可能黑屏的问题。从而也提高了快速倒车绘制影像的速率,降低车机cpu使用率,增加触屏功能提高客户使用体验。
应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
图2为本发明实施例提供的一种用于倒车影像处理方法的电子设备结构示意图,该电子设备包括:
创建模块210,用于通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性;
可选的,所述创建模块210还包括:
获取权限模块,用于配置rc资源文件,并将主程序更换为system组后,增加访问surfaceflinger函数和获取触屏消息的权限。
可选的,所述设置所述surface对象对应的属性至少包括所述surface对象的名称、像素值、rgb格式和图层的最上层。
绘制模块220,用于从can模块监听倒车信息后,在预定显示画面展示所述surface对象,并通过opengl创建纹理,在所述surface对象上循环绘制倒车画面;
优选的,在所述surface对象上循环绘制倒车画面还包括:
控制打开摄像头节点,启动通过摄像头节点获取倒车影像的线程,将获取的yuv格式图像转换为rgba格式图像。
可选的,判断opengl是否已完成初始化,若未初始化,则对opengl进行初始化,并创建纹理。
具体的,所述所述倒车画面中至少包括倒车静态轨迹线、动态轨迹线、倒车影像、交互按钮和倒车雷达包络线。
监听模块230,用于监听所述预定显示画面上的触屏消息,并根据所述触屏消息进行对应的画面显示逻辑处理;
退出模块240,用于当通过can模块获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。
本领域普通技术人员可以理解的是,在一个实施例中,所述电子设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现步骤s101至s104以对倒车影像数据进行处理。在另一实施例中,所述的计算机程序还可以存储于计算机可读取存储介质中,所述的存储介质包括如:rom/ram、磁碟、光盘等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种倒车影像处理方法,其特征在于,包括:
通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性;
从can模块监听倒车信息后,在预定显示画面展示所述surface对象,并通过opengl创建纹理,在所述surface对象上循环绘制倒车画面;
监听所述预定显示画面上的触屏消息,并根据所述触屏消息进行对应的画面显示逻辑处理;
当通过can模块获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。
2.根据权利要求1所述的方法,其特征在于,所述通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性之前包括:
配置rc资源文件,并将主程序更换为system组后,增加访问surfaceflinger函数和获取触屏消息的权限。
3.根据权利要求1所述的方法,其特征在于,所述设置所述surface对象对应的属性至少包括所述surface对象的名称、像素值、rgb格式和图层的最上层。
4.根据权利要求1所述的方法,其特征在于,所述通过opengl创建纹理,在所述surface对象上循环绘制倒车画面还包括:
控制打开摄像头节点,启动通过摄像头节点获取倒车影像的线程,将获取的yuv格式图像转换为rgba格式图像。
5.根据权利要求1所述的方法,其特征在于,所述通过opengl创建纹理,在所述surface对象上循环绘制倒车画面还包括:
判断opengl是否已完成初始化,若未初始化,则对opengl进行初始化,并创建纹理。
6.根据权利要求1所述的方法,其特征在于,所述所述倒车画面中至少包括倒车静态轨迹线、动态轨迹线、倒车影像、交互按钮和倒车雷达包络线。
7.一种用于倒车影像处理的电子设备,其特征在于,包括:
创建模块,用于通过surfaceflinger创建本地surface对象,设置所述surface对象对应的属性;
绘制模块,用于从can模块监听倒车信息后,在预定显示画面展示所述surface对象,并通过opengl创建纹理,在所述surface对象上循环绘制倒车画面;
监听模块,用于监听所述预定显示画面上的触屏消息,并根据所述触屏消息进行对应的画面显示逻辑处理;
退出模块,用于当通过can模块获取到非倒挡信号后,退出opengl的循环绘制过程,并隐藏所述surface对象。
8.根据权利要求7所述的电子设备,其特征在于,所述创建模块还包括:
获取权限模块,用于配置rc资源文件,并将主程序更换为system组后,增加访问surfaceflinger函数和获取触屏消息的权限。
9.一种电子设备,包括处理器、存储器以及存储在所述存储器中并在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6中任一项所述倒车影像处理方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述倒车影像处理方法的步骤。
技术总结