一種縮短圖像延遲的方法和裝置的制造方法
【專利摘要】本發(fā)明公開了一種縮短圖像延遲的方法和裝置,該方法包括:根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部;利用系統(tǒng)的顯示驅(qū)動(dòng)根據(jù)幀同步信號(hào)交替讀取第一緩沖部和第二緩沖部,以得到當(dāng)前幀圖像并將當(dāng)前幀圖像刷新到顯示屏幕上;利用系統(tǒng)的顯示驅(qū)動(dòng)發(fā)送通知消息給系統(tǒng)的應(yīng)用,使得應(yīng)用能夠?qū)⑾乱粠瑘D像同步繪制到與顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。本發(fā)明設(shè)置了第一緩沖部和第二緩沖部,使得顯示驅(qū)動(dòng)能夠交替顯示兩個(gè)緩沖部的內(nèi)容,而應(yīng)用可以直接繪制圖像到這兩個(gè)緩沖部,從而縮短圖像從渲染到顯示的延遲,優(yōu)化了用戶體驗(yàn)。
【專利說(shuō)明】
一種縮短圖像延遲的方法和裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及虛擬現(xiàn)實(shí)技術(shù)領(lǐng)域,具體涉及一種縮短圖像延遲的方法和裝置。
【背景技術(shù)】
[0002]近年來(lái),隨著虛擬現(xiàn)實(shí)(Virtual Reality,簡(jiǎn)稱VR)技術(shù)的逐步成熟,各種虛擬現(xiàn)實(shí)設(shè)備陸續(xù)出現(xiàn)。因?yàn)锳ndroid開源的特性以及完善的生態(tài)系統(tǒng),很多虛擬現(xiàn)實(shí)設(shè)備都基于Android系統(tǒng)開發(fā)而成。
[0003]現(xiàn)有Android應(yīng)用的顯示過(guò)程一般包含兩個(gè)部分:應(yīng)用側(cè)繪制和系統(tǒng)側(cè)渲染。例如,Andro id應(yīng)用調(diào)用SurfaceFlinger服務(wù)把經(jīng)過(guò)測(cè)量、布局和繪制后的Surf ace清染到顯示屏幕上。一般在繪制圖像的時(shí)候,都會(huì)采用一種稱為“雙緩沖”的技術(shù)。雙緩沖意味著要使用兩個(gè)緩沖區(qū)(SharedBufferStack),其中一個(gè)稱為FrontBuffer,另外一個(gè)稱為BackBuffer。顯不端 Di sp lay 處理 FrontBuf fer,CPU (Central Processing Unit,中央處理器)和GPU(Graphics Processing Unit,圖形處理器)處理BackBuffer?;陲@示刷新機(jī)制,圖像總是先在BackBuffer中繪制,然后再和FrontBuffer交換,清染到顯示屏幕上。
[0004]在虛擬現(xiàn)實(shí)系統(tǒng)中,有一個(gè)非常關(guān)鍵的指標(biāo)就是運(yùn)動(dòng)到顯示的延遲,例如,從用戶頭部位置發(fā)生變化,到應(yīng)用根據(jù)這個(gè)變化繪制出相應(yīng)的圖像并最終在顯示屏上顯示出來(lái)所需要的時(shí)間。為了得到較佳的用戶體驗(yàn),這個(gè)時(shí)間必須非常小,讓用戶完全感覺(jué)不到是最好的。如果延遲太大的話,會(huì)讓用戶感覺(jué)圖像抖動(dòng)以及出現(xiàn)眩暈感,用戶體驗(yàn)很差。但是,因?yàn)锳ndroid系統(tǒng)并非為虛擬現(xiàn)實(shí)設(shè)備而設(shè)計(jì),所以Android現(xiàn)有的圖像顯示技術(shù)決定了虛擬現(xiàn)實(shí)設(shè)備的圖像從渲染到顯示會(huì)出現(xiàn)比較大的延遲,導(dǎo)致用戶體驗(yàn)不佳。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供了一種縮短圖像延遲的方法和裝置,用以解決現(xiàn)有的基于Android的虛擬現(xiàn)實(shí)設(shè)備中圖像從渲染到顯示存在比較大的延遲,導(dǎo)致用戶體驗(yàn)不佳的問(wèn)題。
[0006]根據(jù)本發(fā)明的一個(gè)方面,提供了一種縮短圖像延遲的方法,應(yīng)用在基于Android系統(tǒng)的虛擬現(xiàn)實(shí)設(shè)備中,該方法包括:
[0007]根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部;
[0008]利用系統(tǒng)的顯示驅(qū)動(dòng)根據(jù)幀同步信號(hào)交替讀取第一緩沖部和第二緩沖部,以得到當(dāng)前幀圖像并將當(dāng)前幀圖像按照從上到下的順序刷新到顯示屏幕上;
[0009]利用系統(tǒng)的顯示驅(qū)動(dòng)發(fā)送通知消息給系統(tǒng)的應(yīng)用,使得應(yīng)用能夠?qū)⑾乱粠瑘D像同步繪制到與顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。
[0010]可選地,利用系統(tǒng)的顯示驅(qū)動(dòng)發(fā)送通知消息給系統(tǒng)的應(yīng)用包括:
[0011]顯示驅(qū)動(dòng)向應(yīng)用提供查詢接口,使得應(yīng)用通過(guò)該查詢接口獲知顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0012]可選地,顯示驅(qū)動(dòng)向應(yīng)用提供查詢接口以使得應(yīng)用通過(guò)該查詢接口獲知顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部包括:
[0013]顯示驅(qū)動(dòng)接收應(yīng)用通過(guò)查詢接口發(fā)送的1CTL控制碼形式的查詢請(qǐng)求,并根據(jù)查詢請(qǐng)求返回相應(yīng)的幀同步信號(hào)的時(shí)間和緩沖部標(biāo)識(shí),使得應(yīng)用根據(jù)相應(yīng)的幀同步信號(hào)的時(shí)間和讀取的緩沖部標(biāo)識(shí)計(jì)算出顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0014]可選地,根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖部的大小包括:
[0015]根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中縱向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大??;
[0016]或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中橫向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大?。?br>[0017]或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中的與系統(tǒng)原有幀緩沖區(qū)分離的空間中,分配一個(gè)大小與設(shè)備顯示屏大小相等的新的緩沖部。
[0018]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種縮短圖像延遲的裝置,應(yīng)用在基于Android系統(tǒng)的虛擬現(xiàn)實(shí)設(shè)備中,該裝置包括:
[0019]幀緩沖區(qū)設(shè)定單元,用于根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部;
[0020]顯示驅(qū)動(dòng)單元,用于根據(jù)幀同步信號(hào)交替讀取第一緩沖部和第二緩沖部以得到當(dāng)前幀圖像并將當(dāng)前幀圖像按照從上到下的順序刷新到顯示屏幕上,同時(shí)向系統(tǒng)中的應(yīng)用繪制單元發(fā)送通知消息;
[0021]應(yīng)用繪制單元,用于根據(jù)顯示驅(qū)動(dòng)單元的通知消息,將下一幀圖像同步繪制到與顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。
[0022]可選地,顯示驅(qū)動(dòng)單元,具體用于向應(yīng)用繪制單元提供查詢接口,以使得應(yīng)用繪制單元通過(guò)該查詢接口獲知顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0023]可選地,顯示驅(qū)動(dòng)單元,具體用于接收應(yīng)用繪制單元通過(guò)查詢接口發(fā)送的1CTL控制碼形式的查詢請(qǐng)求,并返回相應(yīng)的幀同步信號(hào)時(shí)間和讀取的緩沖部標(biāo)識(shí),使得應(yīng)用繪制單元根據(jù)相應(yīng)的幀同步信號(hào)的時(shí)間和讀取的緩沖部標(biāo)識(shí)計(jì)算出顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0024]可選地,幀緩沖區(qū)設(shè)定單元,具體用于根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中縱向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大??;
[0025]或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中橫向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大小;
[0026]或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中與系統(tǒng)原有幀緩沖區(qū)分離的空間中,分配一個(gè)大小與設(shè)備顯示屏大小相等的新的緩沖部。
[0027]本發(fā)明的有益效果是:本發(fā)明的這種縮短圖像延遲的方法和裝置,通過(guò)對(duì)一個(gè)幀緩沖區(qū)進(jìn)行修改和擴(kuò)充,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部,并將設(shè)備的顯示驅(qū)動(dòng)的輸出方式設(shè)置為根據(jù)幀同步信號(hào)交替讀取兩個(gè)緩沖部中的圖像輸出,同時(shí)通知應(yīng)用交替繪制圖像到這兩個(gè)緩沖部中。如此,只使用一個(gè)幀緩沖區(qū)(如Frontbuffer)直接進(jìn)行渲染,繞過(guò)了Android現(xiàn)有的軟件方式的顯示合成機(jī)制,從而避免了現(xiàn)有技術(shù)使用雙緩沖技術(shù)和軟件合成處理時(shí),雙緩沖技術(shù)需要切換和等待、以及處理流程較多的問(wèn)題,縮短了圖像從繪制到顯示的處理時(shí)間,進(jìn)而縮短了圖像延遲,優(yōu)化了用戶體驗(yàn)。此外,通過(guò)設(shè)置顯示驅(qū)動(dòng)根據(jù)幀同步信號(hào)交替讀取兩個(gè)緩沖部也避免了可能出現(xiàn)的畫面撕裂問(wèn)題,拓寬了虛擬現(xiàn)實(shí)設(shè)備的應(yīng)用范圍,提高了產(chǎn)品的競(jìng)爭(zhēng)力。
【附圖說(shuō)明】
[0028]圖1是本發(fā)明一個(gè)實(shí)施例的一種縮短圖像延遲的方法的流程圖;
[0029]圖2是本發(fā)明另一個(gè)實(shí)施例的一種縮短圖像延遲的方法的原理示意圖;
[0030]圖3是本發(fā)明一個(gè)實(shí)施例的一種縮短圖像延遲的裝置的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0031]縮短圖像延遲的一種現(xiàn)有技術(shù)是:基于手機(jī)屏幕在使用VR應(yīng)用時(shí)會(huì)橫向放置,屏幕的刷新順序?yàn)閺淖蟮接业奶攸c(diǎn),提出使用一個(gè)Frontbuffer進(jìn)行清染。當(dāng)屏幕左側(cè)(對(duì)應(yīng)左眼顯示內(nèi)容)正在刷新的時(shí)候,更新屏幕右側(cè)圖像(對(duì)應(yīng)右眼顯示內(nèi)容)對(duì)應(yīng)的buffer數(shù)據(jù),當(dāng)屏幕右側(cè)正在刷新的時(shí)候,則更新屏幕左側(cè)圖像對(duì)應(yīng)的buffer數(shù)據(jù),從而繞過(guò)系統(tǒng)的軟件方式的顯示合成機(jī)制,縮短延遲。但是,這種技術(shù)僅適用于按照左右方向進(jìn)行刷新的屏幕,而現(xiàn)在大多數(shù)虛擬現(xiàn)實(shí)設(shè)備使用的顯示屏幕都是按照從上到下的順序進(jìn)行刷新的,無(wú)法使用這種現(xiàn)有技術(shù)進(jìn)行渲染。并且,該現(xiàn)有技術(shù)顯示刷新時(shí)還容易發(fā)生圖像撕裂問(wèn)題,圖像撕裂是指顯示圖像由當(dāng)前幀和前面幀的兩部分組合而成。
[0032]本發(fā)明的設(shè)計(jì)構(gòu)思是:針對(duì)現(xiàn)有的Android機(jī)制存在的圖像從繪制到顯示的延遲導(dǎo)致虛擬現(xiàn)實(shí)設(shè)備用戶體驗(yàn)不佳的問(wèn)題,本發(fā)明直接使用Frontbuffer進(jìn)行渲染來(lái)繞過(guò)系統(tǒng)的顯示合成機(jī)制,省略了雙緩沖技術(shù)中緩沖區(qū)之間切換的時(shí)間以及Surf aceFl inger服務(wù)占用的處理時(shí)間,從而縮短了延遲。另外,針對(duì)現(xiàn)有技術(shù)顯示刷新時(shí)還容易發(fā)生圖像撕裂問(wèn)題以及不能適用于從上到下的順序進(jìn)行刷新的屏幕的問(wèn)題,本發(fā)明的技術(shù)方案通過(guò)重新設(shè)置該Frontbuffer的存儲(chǔ)空間,以得到兩個(gè)大小與虛擬現(xiàn)實(shí)設(shè)備的顯示屏分辨率大小相等的兩個(gè)緩沖部,然后,保證設(shè)備的硬件顯示驅(qū)動(dòng)能夠交替顯示兩個(gè)緩沖部的內(nèi)容,而應(yīng)用可以直接繪制圖像到這兩個(gè)緩沖部。這樣既縮短了圖像延遲,改善了用戶體驗(yàn),又使得虛擬現(xiàn)實(shí)設(shè)備可以采用按照從上到下進(jìn)行刷新的顯示屏幕并且不會(huì)出現(xiàn)圖像撕裂,提高了產(chǎn)品的競(jìng)爭(zhēng)力。
[0033]實(shí)施例一
[0034]圖1是本發(fā)明一個(gè)實(shí)施例的一種縮短圖像延遲的方法的流程圖,參見圖1,該方法包括:
[0035]步驟Sll,根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部;這里的設(shè)備為虛擬現(xiàn)實(shí)設(shè)備。
[0036]步驟S12,利用系統(tǒng)的顯示驅(qū)動(dòng)根據(jù)幀同步信號(hào)交替讀取第一緩沖部和第二緩沖部,以得到當(dāng)前幀圖像并將當(dāng)前幀圖像刷新到顯示屏幕上;
[0037]步驟S13,利用系統(tǒng)的顯示驅(qū)動(dòng)發(fā)送通知消息給系統(tǒng)的應(yīng)用,使得應(yīng)用能夠?qū)⑾乱粠瑘D像同步繪制到與顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。
[0038]由圖1所示的縮短圖像延遲的方法可知,本實(shí)施例中通過(guò)使用一個(gè)前端幀緩沖區(qū)(SPFrontbuffer),并重新設(shè)定幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部。然后,設(shè)置硬件顯示驅(qū)動(dòng)的輸出方式為交替讀取這兩個(gè)緩沖部,以及通知應(yīng)用直接繪制圖像到這兩個(gè)緩沖部中。這樣,一方面,避開了現(xiàn)有技術(shù)的SurfaceFlinger軟件合成機(jī)制,節(jié)約了使用雙緩沖技術(shù)時(shí)的緩存切換和等待的時(shí)間以及SurfaceFlinger服務(wù)占用的處理時(shí)間,從而縮短了延遲,優(yōu)化了用戶體驗(yàn)。另一方面,也使得虛擬現(xiàn)實(shí)設(shè)備的屏幕可以采用從上到下的刷新方式并且不會(huì)出現(xiàn)圖像撕裂,拓寬了虛擬現(xiàn)實(shí)設(shè)備的應(yīng)用范圍,使Android系統(tǒng)與虛擬現(xiàn)實(shí)設(shè)備更兼容。
[0039]實(shí)施例二
[0040]這里對(duì)現(xiàn)有技術(shù)的Android的顯示合成機(jī)制進(jìn)行簡(jiǎn)單介紹,實(shí)際應(yīng)用中對(duì)應(yīng)用的窗口 Surface進(jìn)行合成可以采用兩種方式,一種是采用軟件的形式來(lái)合成,還一種是采用硬件的方式,軟件的方式就是Surf aceFl inger,而硬件的方式就是Overlay。因?yàn)橛布铣蓛?nèi)容相對(duì)簡(jiǎn)單,處理時(shí)間短,所以本實(shí)施例中,采用硬件合成的方式來(lái)避開軟件合成方式。簡(jiǎn)單地說(shuō),Overlay就是將硬件所能接受的格式數(shù)據(jù)和控制信息送到幀緩沖區(qū),由硬件顯示驅(qū)動(dòng)來(lái)負(fù)責(zé)合成Over lay buff er和主屏buff er中的內(nèi)容。具體到虛擬現(xiàn)實(shí)設(shè)備中的一個(gè)應(yīng)用,從捕捉到用戶頭部位置發(fā)生變化,到繪制出相應(yīng)的圖像并最終在顯示屏上顯示出來(lái)所需要的時(shí)間僅僅等于硬件顯示驅(qū)動(dòng)刷新的時(shí)間,相比軟件Surf aceFl inger方式能夠大大縮短圖像延遲。
[0041]基于此,對(duì)本實(shí)施例的這種縮短圖像延遲的方法的實(shí)現(xiàn)原理和過(guò)程說(shuō)明如下。圖2是本發(fā)明另一個(gè)實(shí)施例的一種縮短圖像延遲的方法的原理示意圖,參見圖2,本實(shí)施例中,
[0042]首先,對(duì)原有的Android系統(tǒng)的前端幀緩沖區(qū)(8卩,F(xiàn)rontbuffer)的大小進(jìn)行修改,將其縱向擴(kuò)大為顯示分辨率的兩倍,然后將擴(kuò)大后的Front buffer劃分為第一緩沖部(或稱為half 0)和第二緩沖部(或稱為half I)兩個(gè)部分,每個(gè)部分的大小都與顯示屏分辨率相同。
[0043]然后,在系統(tǒng)中App (Appl icat1n,應(yīng)用)繪制一個(gè)部分,而Di splay顯示另一個(gè)部分。每當(dāng)Vsync幀同步信號(hào)到來(lái)時(shí),則進(jìn)行一次切換。
[0044]參見圖2,舉例而言,第一幀時(shí)App繪制圖像到half O,而硬件顯示驅(qū)動(dòng)Display讀取并顯示half I的內(nèi)容,當(dāng)幀同步Vsync信號(hào)到來(lái)時(shí),App開始在half I做繪制,而Display讀取并顯示half O的內(nèi)容。通過(guò)這種方式,可以繞開系統(tǒng)的軟件方式的顯示合成機(jī)制,只要保證App在Vsync信號(hào)前完成繪制,則繪制的內(nèi)容在Vsync信號(hào)后就會(huì)往屏幕上進(jìn)行刷新。
[0045]如此,虛擬現(xiàn)實(shí)設(shè)備的應(yīng)用從繪制圖像到顯示的所需要的時(shí)間就被大大縮短,SP縮短了延遲。并且,由于顯示驅(qū)動(dòng)是根據(jù)幀同步信號(hào)交替讀取兩個(gè)緩沖部的內(nèi)容,所以也不會(huì)出現(xiàn)圖像撕裂問(wèn)題。
[0046]為了讓App知道Display當(dāng)前是在顯示half O還是half I,從而避免App繪制到正在顯示的那部分上。在本實(shí)施例的一種實(shí)現(xiàn)方式是由顯示驅(qū)動(dòng)向應(yīng)用提供查詢接口,使得應(yīng)用通過(guò)該查詢接口獲知顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。例如,顯示驅(qū)動(dòng)接收應(yīng)用通過(guò)查詢接口發(fā)送的1CTL控制碼形式的查詢請(qǐng)求,并根據(jù)查詢請(qǐng)求返回相應(yīng)的幀同步信號(hào)的時(shí)間和緩沖部標(biāo)識(shí),使得應(yīng)用根據(jù)相應(yīng)的幀同步信號(hào)的時(shí)間和讀取的緩沖部標(biāo)識(shí)計(jì)算出顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0047]具體的,Display提供一個(gè)接口供App查詢。App通過(guò)接口以1CTL控制碼的形式發(fā)給顯示驅(qū)動(dòng),然后顯示驅(qū)動(dòng)返回上一次Vsync到達(dá)的時(shí)間以及上一次Vsync信號(hào)后刷新的是half O還是half I。這樣App根據(jù)當(dāng)前時(shí)間和得到的上一次Vsync信號(hào)到達(dá)時(shí)間相差幾個(gè)Vsync周期,即可計(jì)算出當(dāng)前Di sp lay顯示的是哪個(gè)部分(S卩當(dāng)前顯示的是half O還是halfI)ο
[0048]需要說(shuō)明的是,本實(shí)施例中,示意出了根據(jù)Android設(shè)備顯示屏的大小,在存儲(chǔ)空間中縱向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大小的實(shí)現(xiàn)方式。但是,本發(fā)明實(shí)施例不限于此,還可以根據(jù)Android設(shè)備顯示屏的大小,在存儲(chǔ)空間中橫向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大??;或者,不擴(kuò)充原有幀緩沖區(qū)Frontbuffer的大小,而是根據(jù)Android設(shè)備顯示屏的大小,在存儲(chǔ)空間中的與系統(tǒng)原有幀緩沖區(qū)分離的空間中分配一個(gè)大小與Android設(shè)備顯示屏大小相等的新的緩沖部。只要顯示驅(qū)動(dòng)能夠交替顯示兩個(gè)buffer的內(nèi)容,而App可以直接繪制這兩個(gè)buffer 即可。
[0049]另外,如何修改系統(tǒng)中幀緩沖區(qū)的大小不是本實(shí)施例的重點(diǎn),可以采用現(xiàn)有技術(shù)手段來(lái)實(shí)現(xiàn),這里不再贅述。
[0050]實(shí)施例三
[0051]圖3是本發(fā)明一個(gè)實(shí)施例的一種縮短圖像延遲的裝置的結(jié)構(gòu)框圖,參見圖3,該縮短圖像延遲的裝置30包括:
[0052]幀緩沖區(qū)設(shè)定單元301,用于根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部;這里的設(shè)備可以是基于Android系統(tǒng)的虛擬現(xiàn)實(shí)設(shè)備。
[0053]顯示驅(qū)動(dòng)單元302,用于根據(jù)幀同步信號(hào)交替讀取第一緩沖部和第二緩沖部以得到當(dāng)前幀圖像并將當(dāng)前幀圖像按照從上到下的順序刷新到顯示屏幕上,同時(shí)向系統(tǒng)中的應(yīng)用繪制單元303發(fā)送通知消息;
[0054]應(yīng)用繪制單元303,用于根據(jù)顯示驅(qū)動(dòng)單元302的通知消息,將下一幀圖像同步繪制到與顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。
[0055]本實(shí)施例中,顯示驅(qū)動(dòng)單元302,具體用于向應(yīng)用繪制單元提供查詢接口,以使得應(yīng)用繪制單元通過(guò)該查詢接口獲知顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0050]本實(shí)施例中,顯示驅(qū)動(dòng)單元302,還用于接收應(yīng)用繪制單元通過(guò)查詢接口發(fā)送的1CTL控制碼形式的查詢請(qǐng)求,并返回相應(yīng)的幀同步信號(hào)時(shí)間和讀取的緩沖部標(biāo)識(shí),使得應(yīng)用繪制單元根據(jù)相應(yīng)的幀同步信號(hào)的時(shí)間和讀取的緩沖部標(biāo)識(shí)計(jì)算出顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。
[0057]本實(shí)施例中,幀緩沖區(qū)設(shè)定單元301,具體用于根據(jù)Android設(shè)備顯示屏的大小,在存儲(chǔ)空間中縱向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大小;或者,根據(jù)Android設(shè)備顯示屏的大小,在存儲(chǔ)空間中橫向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大小;或者,根據(jù)Android設(shè)備顯示屏的大小,在存儲(chǔ)空間中與系統(tǒng)原有幀緩沖區(qū)分離的空間中,分配一個(gè)大小與Android設(shè)備顯示屏大小相等的新的緩沖部。
[0058]需要說(shuō)明的是,本實(shí)施例中的縮短圖像延遲的裝置的工作過(guò)程是與前述縮短圖像延遲的方法的實(shí)現(xiàn)步驟相對(duì)應(yīng)的,因而本實(shí)施例中對(duì)縮短圖像延遲的裝置的工作過(guò)程沒(méi)有描述的部分可以參見本發(fā)明前述實(shí)施例的相關(guān)說(shuō)明,這里不再贅述。
[0059]綜上所述,本發(fā)明的這種縮短圖像延遲的方法和裝置,首先通過(guò)使用一個(gè)幀緩沖區(qū)(如Frontbuf f er)直接進(jìn)行清染,來(lái)繞過(guò)Andro id現(xiàn)有的軟件方式的顯示合成機(jī)制,從而避免了現(xiàn)有使用雙緩沖技術(shù)和軟件合成處理時(shí),兩個(gè)幀緩沖區(qū)之間需要切換和等待、以及處理流程較多的問(wèn)題,縮短了圖像從繪制到顯示的處理時(shí)間,進(jìn)而縮短了圖像延遲,優(yōu)化了用戶體驗(yàn)。
[0060]其次,為了讓虛擬現(xiàn)實(shí)設(shè)備可以采用從上到下刷新的屏幕,并避免可能出現(xiàn)的畫面撕裂問(wèn)題,本發(fā)明實(shí)施例還提出將一個(gè)幀緩沖區(qū)進(jìn)行修改和擴(kuò)充,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部,并將設(shè)備的顯示驅(qū)動(dòng)的輸出方式設(shè)置為根據(jù)幀同步信號(hào)交替讀取兩個(gè)緩沖部中的圖像輸出,同時(shí)通知應(yīng)用交替繪制圖像到這兩個(gè)緩沖部中。
[0061]如此,既避免了刷新時(shí)可能發(fā)生的圖像撕裂問(wèn)題,又實(shí)現(xiàn)了可以將圖像按從上到下的順序刷新到顯示屏幕上,拓寬了虛擬現(xiàn)實(shí)設(shè)備的應(yīng)用范圍,提高了產(chǎn)品的競(jìng)爭(zhēng)力。
[0062]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種縮短圖像延遲的方法,應(yīng)用在基于Android系統(tǒng)的虛擬現(xiàn)實(shí)設(shè)備中,其特征在于,該方法包括: 根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部; 利用系統(tǒng)的顯示驅(qū)動(dòng)根據(jù)幀同步信號(hào)交替讀取所述第一緩沖部和第二緩沖部,以得到當(dāng)前幀圖像并將所述當(dāng)前幀圖像刷新到顯示屏幕上; 利用系統(tǒng)的顯示驅(qū)動(dòng)發(fā)送通知消息給系統(tǒng)的應(yīng)用,使得所述應(yīng)用能夠?qū)⑾乱粠瑘D像同步繪制到與所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述利用系統(tǒng)的顯示驅(qū)動(dòng)發(fā)送通知消息給系統(tǒng)的應(yīng)用包括: 所述顯示驅(qū)動(dòng)向所述應(yīng)用提供查詢接口,使得所述應(yīng)用通過(guò)該查詢接口獲知所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述顯示驅(qū)動(dòng)向所述應(yīng)用提供查詢接口以使得所述應(yīng)用通過(guò)該查詢接口獲知所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部包括: 所述顯示驅(qū)動(dòng)接收所述應(yīng)用通過(guò)所述查詢接口發(fā)送的1CTL控制碼形式的查詢請(qǐng)求,并根據(jù)所述查詢請(qǐng)求返回相應(yīng)的幀同步信號(hào)的時(shí)間和緩沖部標(biāo)識(shí),使得所述應(yīng)用根據(jù)相應(yīng)的幀同步信號(hào)的時(shí)間和讀取的緩沖部標(biāo)識(shí)計(jì)算出所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小包括: 根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中縱向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大??; 或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中橫向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大??; 或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中的與系統(tǒng)原有幀緩沖區(qū)分離的空間中,分配一個(gè)大小與設(shè)備顯示屏大小相等的新的緩沖部。5.—種縮短圖像延遲的裝置,應(yīng)用在基于Android系統(tǒng)的虛擬現(xiàn)實(shí)設(shè)備中,其特征在于,該裝置包括: 幀緩沖區(qū)設(shè)定單元,用于根據(jù)設(shè)備顯示屏的大小設(shè)定系統(tǒng)的幀緩沖區(qū)的大小,得到大小均與顯示屏大小相等的第一緩沖部和第二緩沖部; 顯示驅(qū)動(dòng)單元,用于根據(jù)幀同步信號(hào)交替讀取所述第一緩沖部和第二緩沖部以得到當(dāng)前幀圖像并將所述當(dāng)前幀圖像按照從上到下的順序刷新到顯示屏幕上,同時(shí)向系統(tǒng)中的應(yīng)用繪制單元發(fā)送通知消息; 所述應(yīng)用繪制單元,用于根據(jù)所述顯示驅(qū)動(dòng)單元的通知消息,將下一幀圖像同步繪制到與所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部不同的緩沖部中。6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述顯示驅(qū)動(dòng)單元,具體用于向所述應(yīng)用繪制單元提供查詢接口,使得所述應(yīng)用繪制單元通過(guò)該查詢接口獲知所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述顯示驅(qū)動(dòng)單元,具體用于接收所述應(yīng)用繪制單元通過(guò)所述查詢接口發(fā)送的1CTL控制碼形式的查詢請(qǐng)求,并返回相應(yīng)的幀同步信號(hào)時(shí)間和讀取的緩沖部標(biāo)識(shí),使得所述應(yīng)用繪制單元根據(jù)相應(yīng)的幀同步信號(hào)的時(shí)間和讀取的緩沖部標(biāo)識(shí)計(jì)算出所述顯示驅(qū)動(dòng)當(dāng)前讀取的緩沖部。8.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述幀緩沖區(qū)設(shè)定單元,具體用于根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中縱向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大小; 或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中橫向擴(kuò)大系統(tǒng)原有幀緩沖區(qū)的大小; 或者,根據(jù)設(shè)備顯示屏的大小,在存儲(chǔ)空間中與系統(tǒng)原有幀緩沖區(qū)分離的空間中,分配一個(gè)大小與設(shè)備顯示屏大小相等的新的緩沖部。
【文檔編號(hào)】G09G5/14GK106098022SQ201610399454
【公開日】2016年11月9日
【申請(qǐng)日】2016年6月7日
【發(fā)明人】李立綱
【申請(qǐng)人】北京小鳥看看科技有限公司