一种缩短图像延迟的方法和装置的制造方法

文档序号:10727018阅读:611来源:国知局
一种缩短图像延迟的方法和装置的制造方法
【专利摘要】本发明公开了一种缩短图像延迟的方法和装置,该方法包括:根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部;利用系统的显示驱动根据帧同步信号交替读取第一缓冲部和第二缓冲部,以得到当前帧图像并将当前帧图像刷新到显示屏幕上;利用系统的显示驱动发送通知消息给系统的应用,使得应用能够将下一帧图像同步绘制到与显示驱动当前读取的缓冲部不同的缓冲部中。本发明设置了第一缓冲部和第二缓冲部,使得显示驱动能够交替显示两个缓冲部的内容,而应用可以直接绘制图像到这两个缓冲部,从而缩短图像从渲染到显示的延迟,优化了用户体验。
【专利说明】
一种缩短图像延迟的方法和装置
技术领域
[0001]本发明涉及虚拟现实技术领域,具体涉及一种缩短图像延迟的方法和装置。
【背景技术】
[0002]近年来,随着虚拟现实(Virtual Reality,简称VR)技术的逐步成熟,各种虚拟现实设备陆续出现。因为Android开源的特性以及完善的生态系统,很多虚拟现实设备都基于Android系统开发而成。
[0003]现有Android应用的显示过程一般包含两个部分:应用侧绘制和系统侧渲染。例如,Andro id应用调用SurfaceFlinger服务把经过测量、布局和绘制后的Surf ace清染到显示屏幕上。一般在绘制图像的时候,都会采用一种称为“双缓冲”的技术。双缓冲意味着要使用两个缓冲区(SharedBufferStack),其中一个称为FrontBuffer,另外一个称为BackBuffer。显不端 Di sp lay 处理 FrontBuf fer,CPU (Central Processing Unit,中央处理器)和GPU(Graphics Processing Unit,图形处理器)处理BackBuffer。基于显示刷新机制,图像总是先在BackBuffer中绘制,然后再和FrontBuffer交换,清染到显示屏幕上。
[0004]在虚拟现实系统中,有一个非常关键的指标就是运动到显示的延迟,例如,从用户头部位置发生变化,到应用根据这个变化绘制出相应的图像并最终在显示屏上显示出来所需要的时间。为了得到较佳的用户体验,这个时间必须非常小,让用户完全感觉不到是最好的。如果延迟太大的话,会让用户感觉图像抖动以及出现眩晕感,用户体验很差。但是,因为Android系统并非为虚拟现实设备而设计,所以Android现有的图像显示技术决定了虚拟现实设备的图像从渲染到显示会出现比较大的延迟,导致用户体验不佳。

【发明内容】

[0005]本发明提供了一种缩短图像延迟的方法和装置,用以解决现有的基于Android的虚拟现实设备中图像从渲染到显示存在比较大的延迟,导致用户体验不佳的问题。
[0006]根据本发明的一个方面,提供了一种缩短图像延迟的方法,应用在基于Android系统的虚拟现实设备中,该方法包括:
[0007]根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部;
[0008]利用系统的显示驱动根据帧同步信号交替读取第一缓冲部和第二缓冲部,以得到当前帧图像并将当前帧图像按照从上到下的顺序刷新到显示屏幕上;
[0009]利用系统的显示驱动发送通知消息给系统的应用,使得应用能够将下一帧图像同步绘制到与显示驱动当前读取的缓冲部不同的缓冲部中。
[0010]可选地,利用系统的显示驱动发送通知消息给系统的应用包括:
[0011]显示驱动向应用提供查询接口,使得应用通过该查询接口获知显示驱动当前读取的缓冲部。
[0012]可选地,显示驱动向应用提供查询接口以使得应用通过该查询接口获知显示驱动当前读取的缓冲部包括:
[0013]显示驱动接收应用通过查询接口发送的1CTL控制码形式的查询请求,并根据查询请求返回相应的帧同步信号的时间和缓冲部标识,使得应用根据相应的帧同步信号的时间和读取的缓冲部标识计算出显示驱动当前读取的缓冲部。
[0014]可选地,根据设备显示屏的大小设定系统的帧缓冲部的大小包括:
[0015]根据设备显示屏的大小,在存储空间中纵向扩大系统原有帧缓冲区的大小;
[0016]或者,根据设备显示屏的大小,在存储空间中横向扩大系统原有帧缓冲区的大小;
[0017]或者,根据设备显示屏的大小,在存储空间中的与系统原有帧缓冲区分离的空间中,分配一个大小与设备显示屏大小相等的新的缓冲部。
[0018]根据本发明的另一个方面,提供了一种缩短图像延迟的装置,应用在基于Android系统的虚拟现实设备中,该装置包括:
[0019]帧缓冲区设定单元,用于根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部;
[0020]显示驱动单元,用于根据帧同步信号交替读取第一缓冲部和第二缓冲部以得到当前帧图像并将当前帧图像按照从上到下的顺序刷新到显示屏幕上,同时向系统中的应用绘制单元发送通知消息;
[0021]应用绘制单元,用于根据显示驱动单元的通知消息,将下一帧图像同步绘制到与显示驱动当前读取的缓冲部不同的缓冲部中。
[0022]可选地,显示驱动单元,具体用于向应用绘制单元提供查询接口,以使得应用绘制单元通过该查询接口获知显示驱动当前读取的缓冲部。
[0023]可选地,显示驱动单元,具体用于接收应用绘制单元通过查询接口发送的1CTL控制码形式的查询请求,并返回相应的帧同步信号时间和读取的缓冲部标识,使得应用绘制单元根据相应的帧同步信号的时间和读取的缓冲部标识计算出显示驱动当前读取的缓冲部。
[0024]可选地,帧缓冲区设定单元,具体用于根据设备显示屏的大小,在存储空间中纵向扩大系统原有帧缓冲区的大小;
[0025]或者,根据设备显示屏的大小,在存储空间中横向扩大系统原有帧缓冲区的大小;
[0026]或者,根据设备显示屏的大小,在存储空间中与系统原有帧缓冲区分离的空间中,分配一个大小与设备显示屏大小相等的新的缓冲部。
[0027]本发明的有益效果是:本发明的这种缩短图像延迟的方法和装置,通过对一个帧缓冲区进行修改和扩充,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部,并将设备的显示驱动的输出方式设置为根据帧同步信号交替读取两个缓冲部中的图像输出,同时通知应用交替绘制图像到这两个缓冲部中。如此,只使用一个帧缓冲区(如Frontbuffer)直接进行渲染,绕过了Android现有的软件方式的显示合成机制,从而避免了现有技术使用双缓冲技术和软件合成处理时,双缓冲技术需要切换和等待、以及处理流程较多的问题,缩短了图像从绘制到显示的处理时间,进而缩短了图像延迟,优化了用户体验。此外,通过设置显示驱动根据帧同步信号交替读取两个缓冲部也避免了可能出现的画面撕裂问题,拓宽了虚拟现实设备的应用范围,提高了产品的竞争力。
【附图说明】
[0028]图1是本发明一个实施例的一种缩短图像延迟的方法的流程图;
[0029]图2是本发明另一个实施例的一种缩短图像延迟的方法的原理示意图;
[0030]图3是本发明一个实施例的一种缩短图像延迟的装置的结构框图。
【具体实施方式】
[0031]缩短图像延迟的一种现有技术是:基于手机屏幕在使用VR应用时会横向放置,屏幕的刷新顺序为从左到右的特点,提出使用一个Frontbuffer进行清染。当屏幕左侧(对应左眼显示内容)正在刷新的时候,更新屏幕右侧图像(对应右眼显示内容)对应的buffer数据,当屏幕右侧正在刷新的时候,则更新屏幕左侧图像对应的buffer数据,从而绕过系统的软件方式的显示合成机制,缩短延迟。但是,这种技术仅适用于按照左右方向进行刷新的屏幕,而现在大多数虚拟现实设备使用的显示屏幕都是按照从上到下的顺序进行刷新的,无法使用这种现有技术进行渲染。并且,该现有技术显示刷新时还容易发生图像撕裂问题,图像撕裂是指显示图像由当前帧和前面帧的两部分组合而成。
[0032]本发明的设计构思是:针对现有的Android机制存在的图像从绘制到显示的延迟导致虚拟现实设备用户体验不佳的问题,本发明直接使用Frontbuffer进行渲染来绕过系统的显示合成机制,省略了双缓冲技术中缓冲区之间切换的时间以及Surf aceFl inger服务占用的处理时间,从而缩短了延迟。另外,针对现有技术显示刷新时还容易发生图像撕裂问题以及不能适用于从上到下的顺序进行刷新的屏幕的问题,本发明的技术方案通过重新设置该Frontbuffer的存储空间,以得到两个大小与虚拟现实设备的显示屏分辨率大小相等的两个缓冲部,然后,保证设备的硬件显示驱动能够交替显示两个缓冲部的内容,而应用可以直接绘制图像到这两个缓冲部。这样既缩短了图像延迟,改善了用户体验,又使得虚拟现实设备可以采用按照从上到下进行刷新的显示屏幕并且不会出现图像撕裂,提高了产品的竞争力。
[0033]实施例一
[0034]图1是本发明一个实施例的一种缩短图像延迟的方法的流程图,参见图1,该方法包括:
[0035]步骤Sll,根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部;这里的设备为虚拟现实设备。
[0036]步骤S12,利用系统的显示驱动根据帧同步信号交替读取第一缓冲部和第二缓冲部,以得到当前帧图像并将当前帧图像刷新到显示屏幕上;
[0037]步骤S13,利用系统的显示驱动发送通知消息给系统的应用,使得应用能够将下一帧图像同步绘制到与显示驱动当前读取的缓冲部不同的缓冲部中。
[0038]由图1所示的缩短图像延迟的方法可知,本实施例中通过使用一个前端帧缓冲区(SPFrontbuffer),并重新设定帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部。然后,设置硬件显示驱动的输出方式为交替读取这两个缓冲部,以及通知应用直接绘制图像到这两个缓冲部中。这样,一方面,避开了现有技术的SurfaceFlinger软件合成机制,节约了使用双缓冲技术时的缓存切换和等待的时间以及SurfaceFlinger服务占用的处理时间,从而缩短了延迟,优化了用户体验。另一方面,也使得虚拟现实设备的屏幕可以采用从上到下的刷新方式并且不会出现图像撕裂,拓宽了虚拟现实设备的应用范围,使Android系统与虚拟现实设备更兼容。
[0039]实施例二
[0040]这里对现有技术的Android的显示合成机制进行简单介绍,实际应用中对应用的窗口 Surface进行合成可以采用两种方式,一种是采用软件的形式来合成,还一种是采用硬件的方式,软件的方式就是Surf aceFl inger,而硬件的方式就是Overlay。因为硬件合成内容相对简单,处理时间短,所以本实施例中,采用硬件合成的方式来避开软件合成方式。简单地说,Overlay就是将硬件所能接受的格式数据和控制信息送到帧缓冲区,由硬件显示驱动来负责合成Over lay buff er和主屏buff er中的内容。具体到虚拟现实设备中的一个应用,从捕捉到用户头部位置发生变化,到绘制出相应的图像并最终在显示屏上显示出来所需要的时间仅仅等于硬件显示驱动刷新的时间,相比软件Surf aceFl inger方式能够大大缩短图像延迟。
[0041]基于此,对本实施例的这种缩短图像延迟的方法的实现原理和过程说明如下。图2是本发明另一个实施例的一种缩短图像延迟的方法的原理示意图,参见图2,本实施例中,
[0042]首先,对原有的Android系统的前端帧缓冲区(8卩,Frontbuffer)的大小进行修改,将其纵向扩大为显示分辨率的两倍,然后将扩大后的Front buffer划分为第一缓冲部(或称为half 0)和第二缓冲部(或称为half I)两个部分,每个部分的大小都与显示屏分辨率相同。
[0043]然后,在系统中App (Appl icat1n,应用)绘制一个部分,而Di splay显示另一个部分。每当Vsync帧同步信号到来时,则进行一次切换。
[0044]参见图2,举例而言,第一帧时App绘制图像到half O,而硬件显示驱动Display读取并显示half I的内容,当帧同步Vsync信号到来时,App开始在half I做绘制,而Display读取并显示half O的内容。通过这种方式,可以绕开系统的软件方式的显示合成机制,只要保证App在Vsync信号前完成绘制,则绘制的内容在Vsync信号后就会往屏幕上进行刷新。
[0045]如此,虚拟现实设备的应用从绘制图像到显示的所需要的时间就被大大缩短,SP缩短了延迟。并且,由于显示驱动是根据帧同步信号交替读取两个缓冲部的内容,所以也不会出现图像撕裂问题。
[0046]为了让App知道Display当前是在显示half O还是half I,从而避免App绘制到正在显示的那部分上。在本实施例的一种实现方式是由显示驱动向应用提供查询接口,使得应用通过该查询接口获知显示驱动当前读取的缓冲部。例如,显示驱动接收应用通过查询接口发送的1CTL控制码形式的查询请求,并根据查询请求返回相应的帧同步信号的时间和缓冲部标识,使得应用根据相应的帧同步信号的时间和读取的缓冲部标识计算出显示驱动当前读取的缓冲部。
[0047]具体的,Display提供一个接口供App查询。App通过接口以1CTL控制码的形式发给显示驱动,然后显示驱动返回上一次Vsync到达的时间以及上一次Vsync信号后刷新的是half O还是half I。这样App根据当前时间和得到的上一次Vsync信号到达时间相差几个Vsync周期,即可计算出当前Di sp lay显示的是哪个部分(S卩当前显示的是half O还是halfI)ο
[0048]需要说明的是,本实施例中,示意出了根据Android设备显示屏的大小,在存储空间中纵向扩大系统原有帧缓冲区的大小的实现方式。但是,本发明实施例不限于此,还可以根据Android设备显示屏的大小,在存储空间中横向扩大系统原有帧缓冲区的大小;或者,不扩充原有帧缓冲区Frontbuffer的大小,而是根据Android设备显示屏的大小,在存储空间中的与系统原有帧缓冲区分离的空间中分配一个大小与Android设备显示屏大小相等的新的缓冲部。只要显示驱动能够交替显示两个buffer的内容,而App可以直接绘制这两个buffer 即可。
[0049]另外,如何修改系统中帧缓冲区的大小不是本实施例的重点,可以采用现有技术手段来实现,这里不再赘述。
[0050]实施例三
[0051]图3是本发明一个实施例的一种缩短图像延迟的装置的结构框图,参见图3,该缩短图像延迟的装置30包括:
[0052]帧缓冲区设定单元301,用于根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部;这里的设备可以是基于Android系统的虚拟现实设备。
[0053]显示驱动单元302,用于根据帧同步信号交替读取第一缓冲部和第二缓冲部以得到当前帧图像并将当前帧图像按照从上到下的顺序刷新到显示屏幕上,同时向系统中的应用绘制单元303发送通知消息;
[0054]应用绘制单元303,用于根据显示驱动单元302的通知消息,将下一帧图像同步绘制到与显示驱动当前读取的缓冲部不同的缓冲部中。
[0055]本实施例中,显示驱动单元302,具体用于向应用绘制单元提供查询接口,以使得应用绘制单元通过该查询接口获知显示驱动当前读取的缓冲部。
[0050]本实施例中,显示驱动单元302,还用于接收应用绘制单元通过查询接口发送的1CTL控制码形式的查询请求,并返回相应的帧同步信号时间和读取的缓冲部标识,使得应用绘制单元根据相应的帧同步信号的时间和读取的缓冲部标识计算出显示驱动当前读取的缓冲部。
[0057]本实施例中,帧缓冲区设定单元301,具体用于根据Android设备显示屏的大小,在存储空间中纵向扩大系统原有帧缓冲区的大小;或者,根据Android设备显示屏的大小,在存储空间中横向扩大系统原有帧缓冲区的大小;或者,根据Android设备显示屏的大小,在存储空间中与系统原有帧缓冲区分离的空间中,分配一个大小与Android设备显示屏大小相等的新的缓冲部。
[0058]需要说明的是,本实施例中的缩短图像延迟的装置的工作过程是与前述缩短图像延迟的方法的实现步骤相对应的,因而本实施例中对缩短图像延迟的装置的工作过程没有描述的部分可以参见本发明前述实施例的相关说明,这里不再赘述。
[0059]综上所述,本发明的这种缩短图像延迟的方法和装置,首先通过使用一个帧缓冲区(如Frontbuf f er)直接进行清染,来绕过Andro id现有的软件方式的显示合成机制,从而避免了现有使用双缓冲技术和软件合成处理时,两个帧缓冲区之间需要切换和等待、以及处理流程较多的问题,缩短了图像从绘制到显示的处理时间,进而缩短了图像延迟,优化了用户体验。
[0060]其次,为了让虚拟现实设备可以采用从上到下刷新的屏幕,并避免可能出现的画面撕裂问题,本发明实施例还提出将一个帧缓冲区进行修改和扩充,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部,并将设备的显示驱动的输出方式设置为根据帧同步信号交替读取两个缓冲部中的图像输出,同时通知应用交替绘制图像到这两个缓冲部中。
[0061]如此,既避免了刷新时可能发生的图像撕裂问题,又实现了可以将图像按从上到下的顺序刷新到显示屏幕上,拓宽了虚拟现实设备的应用范围,提高了产品的竞争力。
[0062]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【主权项】
1.一种缩短图像延迟的方法,应用在基于Android系统的虚拟现实设备中,其特征在于,该方法包括: 根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部; 利用系统的显示驱动根据帧同步信号交替读取所述第一缓冲部和第二缓冲部,以得到当前帧图像并将所述当前帧图像刷新到显示屏幕上; 利用系统的显示驱动发送通知消息给系统的应用,使得所述应用能够将下一帧图像同步绘制到与所述显示驱动当前读取的缓冲部不同的缓冲部中。2.根据权利要求1所述的方法,其特征在于,所述利用系统的显示驱动发送通知消息给系统的应用包括: 所述显示驱动向所述应用提供查询接口,使得所述应用通过该查询接口获知所述显示驱动当前读取的缓冲部。3.根据权利要求2所述的方法,其特征在于,所述显示驱动向所述应用提供查询接口以使得所述应用通过该查询接口获知所述显示驱动当前读取的缓冲部包括: 所述显示驱动接收所述应用通过所述查询接口发送的1CTL控制码形式的查询请求,并根据所述查询请求返回相应的帧同步信号的时间和缓冲部标识,使得所述应用根据相应的帧同步信号的时间和读取的缓冲部标识计算出所述显示驱动当前读取的缓冲部。4.根据权利要求1所述的方法,其特征在于,所述根据设备显示屏的大小设定系统的帧缓冲区的大小包括: 根据设备显示屏的大小,在存储空间中纵向扩大系统原有帧缓冲区的大小; 或者,根据设备显示屏的大小,在存储空间中横向扩大系统原有帧缓冲区的大小; 或者,根据设备显示屏的大小,在存储空间中的与系统原有帧缓冲区分离的空间中,分配一个大小与设备显示屏大小相等的新的缓冲部。5.—种缩短图像延迟的装置,应用在基于Android系统的虚拟现实设备中,其特征在于,该装置包括: 帧缓冲区设定单元,用于根据设备显示屏的大小设定系统的帧缓冲区的大小,得到大小均与显示屏大小相等的第一缓冲部和第二缓冲部; 显示驱动单元,用于根据帧同步信号交替读取所述第一缓冲部和第二缓冲部以得到当前帧图像并将所述当前帧图像按照从上到下的顺序刷新到显示屏幕上,同时向系统中的应用绘制单元发送通知消息; 所述应用绘制单元,用于根据所述显示驱动单元的通知消息,将下一帧图像同步绘制到与所述显示驱动当前读取的缓冲部不同的缓冲部中。6.根据权利要求5所述的装置,其特征在于,所述显示驱动单元,具体用于向所述应用绘制单元提供查询接口,使得所述应用绘制单元通过该查询接口获知所述显示驱动当前读取的缓冲部。7.根据权利要求6所述的装置,其特征在于,所述显示驱动单元,具体用于接收所述应用绘制单元通过所述查询接口发送的1CTL控制码形式的查询请求,并返回相应的帧同步信号时间和读取的缓冲部标识,使得所述应用绘制单元根据相应的帧同步信号的时间和读取的缓冲部标识计算出所述显示驱动当前读取的缓冲部。8.根据权利要求5所述的装置,其特征在于,所述帧缓冲区设定单元,具体用于根据设备显示屏的大小,在存储空间中纵向扩大系统原有帧缓冲区的大小; 或者,根据设备显示屏的大小,在存储空间中横向扩大系统原有帧缓冲区的大小; 或者,根据设备显示屏的大小,在存储空间中与系统原有帧缓冲区分离的空间中,分配一个大小与设备显示屏大小相等的新的缓冲部。
【文档编号】G09G5/14GK106098022SQ201610399454
【公开日】2016年11月9日
【申请日】2016年6月7日
【发明人】李立纲
【申请人】北京小鸟看看科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1