本发明涉及一种基于Android系统HDMI同显时节省带宽的方法,属于计算机领域。
背景技术:
通常很多移动设备都配备了小尺寸的LCD屏幕,有些使用场景为了能提供更好的交互控制操作,需要移动设备在大尺寸显示设备上显示,这就需求将移动设备的显示内容在小尺寸屏幕和大尺寸显示设备上同时显示。比如,平板上的游戏内容通过HDMI输出到电视上显示。
现有技术方案:Android原生系统从Android4.1版本开始支持HDMI显示。其基本原理是对输出到LCD的数据合成一次,对输出到HDMI的数据再合成一次,合成时会不断的进行内存缓存(内存缓存)的读写,此时会有大量的数据读写导致带宽吃紧,这样对于一些入门级(内存带宽有限)硬件的android产品在一些特定场景下带宽会吃紧从而导致系统卡顿、不流畅的现象。
现有方法技术有以下缺点:数据合成时对内存访问频繁,导致内存带宽吃紧,可能导致产品出现卡顿、不流畅的现象。
HDMI:High Definition Multimedia Interface,高清晰度多媒体接口。
同显:指同一块显示内容在两个不同的显示设备上同时显示,比如平板上的游戏画面通过HDMI连接后可以在电视上同时显示。
带宽:本发明的技术方案是指内存中的带宽。
帧缓存:用来缓存显示的数据。一般由两个有特定大小的内存缓存组成,其中一个叫前端内存缓存用来显示,另外一个叫后端内存缓存,用来存放合成的数据。
DE:Display Engine显示引擎,用于将绘制好的图像显示到LCD上。
技术实现要素:
针对现有技术的不足,本发明的技术方案提供了一种基于Android系统HDMI同显时节省带宽的方法,用于通过减少内存访问次数,减少对带宽的需求。
本发明的技术方案包括一种基于Android系统HDMI同显时节省带宽的方法,其特征在于,该方法包括:A.当主屏的HDMI检测到接入时,创建与主屏帧缓存对应的扩展屏帧缓存;B.根据接入获取主屏Android系统中用于数据合成组件中屏幕对象;C.根据获取到的屏幕对象决定是否执行数据合成,若屏幕对象为扩展屏幕则不执行数据合成,若为非扩展屏幕数据,则根据Android组件进行对应的数据合成;D.将执行数据合成的帧缓存发送至扩展屏,并使用使用DE显示引擎将帧缓存数据转换为指定分辨率进行显示。
根据所述的基于Android系统HDMI同显时节省带宽的方法,其中步骤A还包括:实时检测主屏的HDMI接口是否有HDMI接入,若检测到接入时,获取主屏的帧缓存大小,进一步,将接入主屏的扩展屏的帧缓存大小设置为与主屏帧缓存一致。
根据所述的基于Android系统HDMI同显时节省带宽的方法,其中步骤B还包括:当接入HDMI时,主屏的Android系统的数据合成组件自动获取接入的屏幕对象,若获取得到屏幕对象为扩展屏,则下发不执行数据合成的指令,若获取得到的屏幕对象为非扩展屏,则下发执行数据合成的指令。
根据所述的基于Android系统HDMI同显时节省带宽的方法,其中步骤D还包括:若检测到屏幕对象为扩展屏,则不执行数据合成,并将数据直接发送至扩展屏的帧缓存区域。
根据所述的基于Android系统HDMI同显时节省带宽的方法,其中步骤D还包括:若检测到屏幕对象为非扩展屏时,进一步执行如下操作:S51,分别获取主屏帧缓存的后端内存缓存地址及扩展屏后端内存缓存地址;S52,将主屏帧缓存的后端内存缓存的数据复制到扩展屏的帧缓存的后端内存缓存中;S53,将位于扩展屏后端内存缓存中的帧缓存发送至DE引擎。
根据所述的基于Android系统HDMI同显时节省带宽的方法,其中步骤52还包括:使用G2D硬件模块执行数据的复制。
根据所述的基于Android系统HDMI同显时节省带宽的方法,其中步骤D还包括:其中的显示过程包括将帧缓存执行缩放,直至帧缓存缩放至HDMI输出的对应制式分辨率,进而对扩展屏的帧缓存进行显示。
本发明的有益效果为:有效减少内存访问次数,减少对带宽的需求。
附图说明
图1所示为根据本发明实施方式的同显流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的基于Android系统HDMI同显时节省带宽的方法适用于多扩展屏的数据处理。
图1所示为根据本发明实施方式的同显流程图。其总体流程如下所示:
(1)首先,在检测到HDMI插入的时候创建HDMI(扩展屏)的帧缓存,将其大小设置成与LCD(主屏)的帧缓存同样大小。
(2)图像数据合成组件(Android系统组件)进行合成的动作主要是通过图像合成函数实现,在其实现过程中去判断合成的是哪个屏幕。
(3)如果是扩展屏幕则不进行合成动作,否则按照Android原生策略和方法进行合成。
(4)当非扩展屏合成完成后Android系统会进行post帧缓存函数的处理,在该处理中会调用到HWComposer中的设置接口,该接口中我们会完成以下动作:
a.分别取到主屏帧缓存的后端内存缓存的地址以及扩展屏帧缓存的后端内存缓存地址;
b.将主屏帧缓存的后端内存缓存的数据复制到(通过G2D硬件模块,拷贝动作更快)扩展屏的帧缓存的后端内存缓存中;
c.将扩展屏的帧缓存送给DE进行显示。
(5)在DE显示过程中通过其缩放功能将扩展屏的帧缓存的数据放大到HDMI输出制式分辨率大小(1080P、720P等)进行显示。
本发明的进一步对比了使用本发明技术方案和未使用本发明技术方案的差异,具体如下所示:
在HDMI同显时极大地减少了对带宽的使用,保证了系统的流畅性。举例说明:我们以LCD端分辨率为1024x600和HDMI端分辨率为1080P为例简单计算下在HDMI端合成显示要用的带宽,假如此时场景有一块surface(大小是1024x600,格式是ARGB),那么要合到HDMI端的显示内存缓存(分辨率为1920x1080,该分辨率由HDMI制式所得)中,则需要对该显示装置的内存缓存读一次,并且在HDMI显示内存缓存中写入一次(1024x600到1920x1080的缩放通过GPU完成),那么合成一帧总共需要读写的数据有1024*600*4+1920*1080*4=10.25MB,再加上HDMI显示内存缓存被DE读取显示的数据1920*1080*4=7.91MB,如果按每秒60帧算,那么每秒需要1089.6MB/s。而按照本文方法将该合成动作取消,从LCD端读取内存缓存(1024x600)一次,写HDMI显示内存缓存(1024x600)一次,DE读取HDMI显示内存缓存(1024x600)一次,最后通过DE缩放到1080P输出到HDMI硬件通路,按每秒60帧算的话共1024*600*4*3*60=421.88M/s。带宽使用优化效果很明显。如果此时有更多块显示装置需要合成,那么节省的带宽会更多。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。