一種縮短圖像延遲的方法和裝置的制造方法
【專利摘要】本發明公開了一種縮短圖像延遲的方法和裝置,該方法包括:根據設備顯示屏的大小設定系統的幀緩沖區的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部;利用系統的顯示驅動根據幀同步信號交替讀取第一緩沖部和第二緩沖部,以得到當前幀圖像并將當前幀圖像刷新到顯示屏幕上;利用系統的顯示驅動發送通知消息給系統的應用,使得應用能夠將下一幀圖像同步繪制到與顯示驅動當前讀取的緩沖部不同的緩沖部中。本發明設置了第一緩沖部和第二緩沖部,使得顯示驅動能夠交替顯示兩個緩沖部的內容,而應用可以直接繪制圖像到這兩個緩沖部,從而縮短圖像從渲染到顯示的延遲,優化了用戶體驗。
【專利說明】
一種縮短圖像延遲的方法和裝置
技術領域
[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日
【發明人】李立綱
【申請人】北京小鳥看看科技有限公司