專利名稱:嵌入式Linux平臺(tái)下的顯示方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖形和視頻的顯示方法,具體涉及ー種嵌入式Linux平臺(tái)下的顯示方法。
背景技術(shù):
嵌入式Linux技術(shù)以其高效、穩(wěn)定以及占用資源少等特性廣泛應(yīng)用于消費(fèi)類電子、多媒體終端等領(lǐng)域。一直以來,如何能將圖形用戶界面(GUI)高效的顯示出來是嵌入式Linux平臺(tái)下的一大弱項(xiàng)。傳統(tǒng)的顯示方法是基于X Window系統(tǒng)的,如圖1所示。X window采用Client/Server模式,底層與輸入輸出設(shè)備驅(qū)動(dòng)進(jìn)行通信,如鍵盤、鼠標(biāo)以及顯卡;中間層是X Server,它是X window系統(tǒng)的核心,上層是ー個(gè)個(gè)的X Client端,可以是ー個(gè)獨(dú)立的應(yīng)用程序,如瀏覽器,也可以是ー個(gè)圖形庫(kù),比如Qt、GTK庫(kù)等。X Client與X Server通信遵循Xll協(xié)議,簡(jiǎn)單來講,X Server監(jiān)聽X Client端發(fā)送過來的圖形輸出請(qǐng)求,并負(fù)責(zé)完成相應(yīng)的操作,最后給X Client端ー個(gè)響應(yīng)。由于X window系統(tǒng)過于龐大和復(fù)雜,并不適合于應(yīng)用在嵌入式Linux系統(tǒng)中,雖然可以對(duì)其進(jìn)行裁剪,但是裁剪難度不小,穩(wěn)定性也無法得到保證。另外,X window系統(tǒng)由于采用C/S模式,顯示數(shù)據(jù)必然要經(jīng)過額外的拷貝花銷,大大降低了顯示的實(shí)時(shí)性。同吋,X window沒有提供圖形層和視頻層的分離機(jī)制,應(yīng)用層瀏覽器不能同時(shí)顯示圖形層和視頻層,因?yàn)檎紦?jù)了同一存儲(chǔ)空間,瀏覽器在順序訪問存儲(chǔ)空間讀取數(shù)據(jù)來顯示時(shí),視頻層覆蓋在前的圖形層,或者圖形層覆蓋了在前的視頻層,即不是“透明的”。但是,在實(shí)際的應(yīng)用中,用戶往往希望混合顯示視頻數(shù)據(jù)以及圖形⑶I,因此需要一種圖形層和視頻層彼此不相干擾的同時(shí)顯示的方法。
發(fā)明內(nèi)容
為了能夠在嵌入式Linux平臺(tái)下高效的進(jìn)行圖形和視頻的顯示,本發(fā)明提供ー種嵌入式Linux平臺(tái)下的顯示方法,包括:設(shè)置顯卡輸出的分辨率;根據(jù)所述分辨率、圖形層顯示格式和視頻層顯示格式,計(jì)算用于存儲(chǔ)圖形和視頻的存儲(chǔ)空間的大??;將所述存儲(chǔ)空間劃分為圖形層存儲(chǔ)空間和視頻層存儲(chǔ)空間;配置顯卡的寄存器,以使能所述圖形層存儲(chǔ)空間和所述視頻層存儲(chǔ)空間的分離;嵌入式Linux系統(tǒng)中的用戶的顯示實(shí)體訪問顯卡,從所述圖形層存儲(chǔ)空間讀寫圖形數(shù)據(jù),從所述視頻層存儲(chǔ)空間讀寫視頻數(shù)據(jù)。采用本技術(shù)方案后可以獲得以下有益的技術(shù)效果:I)繞開X window系統(tǒng),大大減少系統(tǒng)的復(fù)雜性,增加了穩(wěn)定性與可靠性;2)由于直接通過用戶的顯示實(shí)體將顯示數(shù)據(jù)直接寫入到顯卡的緩存中去,避免了中間環(huán)節(jié)的數(shù)據(jù)拷貝,顯示性能以及實(shí)時(shí)性大為提高;
3)將顯卡的圖形實(shí)體與視頻實(shí)體分離開來,用戶的顯示實(shí)體可以獨(dú)立對(duì)圖形實(shí)體和視頻實(shí)體進(jìn)行控制。
圖1為現(xiàn)有技術(shù)的采用X Window系統(tǒng)的顯示方法。圖2為本發(fā)明的嵌入式Linux平臺(tái)下的顯示方法的流程圖。
具體實(shí)施例方式總體來說,本發(fā)明的技術(shù)方案涉及嵌入式Linux內(nèi)核層的顯卡以及用戶的顯示實(shí)體兩部分。如圖2所示,在嵌入式Linux系統(tǒng)中,根據(jù)顯卡的分辨率、圖形層顯示格式和視頻層顯示格式計(jì)算用于存儲(chǔ)圖形和視頻的存儲(chǔ)空間大小,可選地,也可以根據(jù)兩種顯示格式中占用空間較大的一個(gè)來計(jì)算存儲(chǔ)空間。圖形層顯示格式和視頻層顯示格式可以采用同一格式。將該存儲(chǔ)空間劃分為圖形層存儲(chǔ)空間和視頻層存儲(chǔ)空間。這兩個(gè)存儲(chǔ)空間不重疊,而且可以是鄰接的。所述圖形層存儲(chǔ)空間的大小根據(jù)圖形層顯示格式的一個(gè)像素所占用的字節(jié)而設(shè)定,所述視頻層存儲(chǔ)空間的大小根據(jù)視頻層顯示格式的一個(gè)像素所占用的字節(jié)而設(shè)定。嵌入式Linux系統(tǒng)中用戶的顯示實(shí)體訪問顯卡,從所述圖形層存儲(chǔ)空間讀寫圖形數(shù)據(jù),從所述視頻層存儲(chǔ)空間讀寫視頻數(shù)據(jù),也可以往上述兩個(gè)存儲(chǔ)空間內(nèi)寫入數(shù)據(jù)。以具有frame buffer功能的顯卡為例,將frame buffer映射到用戶的顯示實(shí)體,該顯示實(shí)體就可以像寫內(nèi)存的方式一樣將顯示數(shù)據(jù)寫入到顯卡的frame buffer中去,或者從frame buffer中讀取數(shù)據(jù)來顯示。同時(shí),修改顯卡的驅(qū)動(dòng)參數(shù),設(shè)置相關(guān)的寄存器,將顯卡的圖形層與視頻層進(jìn)行分離,具體而言,是將各自的存儲(chǔ)空間進(jìn)行分離,不再占用相同的一段存儲(chǔ)空間。分離后,圖形層存儲(chǔ)空間與視頻層存儲(chǔ)空間在frame buffer中的起始地址不同并且不會(huì)重疊,這樣對(duì)于用戶的顯示實(shí)體來說,就可以獨(dú)立的控制顯卡的圖形層以及視頻層的輸出和輸入。下面以Intel Sandy Bridge平臺(tái)i5_2300的CPU為例(顯卡集成在CPU中),介紹本發(fā)明的技術(shù)方案的實(shí)現(xiàn)步驟:I)在顯卡的GRUB啟動(dòng)參數(shù)中設(shè)置顯卡輸出的分辨率設(shè)置,比如video =VGA-1:1280x1024060 ;2)在內(nèi)核顯卡驅(qū)動(dòng)參數(shù)中根據(jù)先前GRUB中的設(shè)置,計(jì)算出frame buffer的空間范圍,比如分辨率是1280x1024的情況下,并且存在圖形層以及視頻層,每個(gè)像素按照ARGB格式表示,占用4個(gè)字節(jié),則圖形層和視頻層共占用的字節(jié)數(shù)為=1280x1024x4x2。如果視頻層采用YUYV格式,則圖形層和視頻層共占用的字節(jié)數(shù)為1280x1024x4+1280x1024x2。然后,采用i0remap_WC函數(shù)將這樣大小的字節(jié)空間的顯卡顯存映射出來,得到的虛擬地址即是frame buffer的首地址;3)分別設(shè)置圖形層以及視頻層的相關(guān)寄存器,以使能圖形層和視頻層,所述相關(guān)寄存器包括:起始地址寄存器、stride寄存器、顯示格式寄存器(顯示格式一般包括ARGB以及YUYV等)以及key color寄存器,以使得圖形層和視頻層對(duì)于彼此可以是“透明的”,特別是動(dòng)態(tài)的視頻層數(shù)據(jù)不會(huì)被圖形層數(shù)據(jù)覆蓋,而無法顯示出來。根據(jù)不同的廠商芯片,設(shè)置的寄存器也不同,具體需要根據(jù)寄存器的用戶手冊(cè)來配置,但是基本原理就是在使能圖形層存儲(chǔ)空間和視頻層存儲(chǔ)空間的分離,比如Inteli5-2300CPU中key color寄存器的定義為:
Bit ~
31: 24 保留位
23: 16 RGB通道中R通道的目標(biāo)比較值 15: 8RGB通道中G通道的目標(biāo)比較值 7: 0 RGB通道中B通道的目標(biāo)比較值如果設(shè)置上面寄存器中R通道值為a,G通道值為b,B通道值為c,那么圖形層像素點(diǎn)值為(a<<16|b<<8|c)的點(diǎn)將是透明的,即它顯示的圖像為視頻層該位置的值。4)在設(shè)置上述寄存器時(shí),對(duì)于圖形層來說,選擇ARGB的顯示格式,而對(duì)于視頻層來說,一般選擇YUYV格式,這樣不僅可以避免格式轉(zhuǎn)換(因?yàn)橐话憬獯a庫(kù)的輸出就是YV12格式),還可以減少需要拷貝到顯卡的存儲(chǔ)空間里去的數(shù)據(jù)量;5)在用戶層為應(yīng)用實(shí)體創(chuàng)建“/dev/fbO”設(shè)備樹文件;6)用戶的應(yīng)用實(shí)體讀取GRUB配置文件中的參數(shù),利用mmap函數(shù)將“/dev/fbO”進(jìn)行內(nèi)存映射,得到的地址即是frame buffer可被應(yīng)用實(shí)體訪問的起始地址,大小空間為前面所述一致,即圖形層存儲(chǔ)空間+視頻層存儲(chǔ)空間。圖形層存儲(chǔ)空間與視頻層存儲(chǔ)空間是連續(xù)的,這樣各自的起始地址為:圖形層空間起始地址=frame buffer起始地址;視頻層空間起始地址=frame buffer起始地址+圖形層空間大小。用戶的顯示實(shí)體根據(jù)圖形層空間以及視頻層空間的起始地址分別進(jìn)行圖形數(shù)據(jù)和視頻數(shù)據(jù)的刷新。如此,這樣對(duì)于用戶的應(yīng)用實(shí)體來說,就可以獨(dú)立的控制顯卡的圖形以及視頻輸出。上述實(shí)施例用來解釋說明本發(fā)明,而不是對(duì)本發(fā)明進(jìn)行限制,在本發(fā)明的精神和權(quán)利要求的保護(hù)范圍內(nèi),對(duì)本發(fā)明作出的任何修改和改變,都落入本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種嵌入式Linux平臺(tái)下的顯示方法,其特征在于,包括: 設(shè)置顯卡輸出的分辨率; 根據(jù)所述分辨率、圖形層顯示格式和視頻層顯示格式,計(jì)算用于存儲(chǔ)圖形和視頻的存儲(chǔ)空間的大??; 將所述存儲(chǔ)空間劃分為圖形層存儲(chǔ)空間和視頻層存儲(chǔ)空間; 配置顯卡的寄存器,以使能所述圖形層存儲(chǔ)空間和所述視頻層存儲(chǔ)空間的分離; 嵌入式Linux系統(tǒng)中的用戶的顯示實(shí)體訪問顯卡,從所述圖形層存儲(chǔ)空間讀寫圖形數(shù)據(jù),從所述視頻層存儲(chǔ)空間讀寫視頻數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在干, 所述圖形層存儲(chǔ)空間的大小根據(jù)圖形層顯示格式的一個(gè)像素所占用的字節(jié)而設(shè)定, 所述視頻層存儲(chǔ)空間的大小根據(jù)視頻層顯示格式的一個(gè)像素所占用的字節(jié)而設(shè)定。
3.根據(jù)權(quán)利要求1所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在于,所述圖形層存儲(chǔ)空間和所述視頻層存儲(chǔ)空間是鄰接的。
4.根據(jù)權(quán)利要求1所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在于,所述存儲(chǔ)空間位于嵌入式Linux平臺(tái)的frame buffer中。
5.根據(jù)權(quán)利要求4所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在于,采用ioremap_wc函數(shù)將顯卡顯存的所述存儲(chǔ)空間映射出來,得到frame buffer的首地址。
6.根據(jù)權(quán)利要求5所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在于,利用_ap函數(shù)將frame buffer映射為用戶的顯示實(shí)體可訪問的起始地址。
7.根據(jù)權(quán)利要求1所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在于,所述圖形層顯示格式為ARGB,所述視頻層顯示格式為YUYV。
8.根據(jù)權(quán)利要求1所述的嵌入式Linux平臺(tái)下的顯示方法,其特征在于,所述寄存器包括:起始地址寄存器、stride寄存器、顯示格式寄存器和key color寄存器。
全文摘要
本發(fā)明涉及一種嵌入式Linux平臺(tái)下的顯示方法,包括設(shè)置顯卡輸出的分辨率;根據(jù)所述分辨率、圖形層顯示格式和視頻層顯示格式,計(jì)算用于存儲(chǔ)圖形和視頻的存儲(chǔ)空間的大??;將所述存儲(chǔ)空間劃分為圖形層存儲(chǔ)空間和視頻層存儲(chǔ)空間;配置顯卡的寄存器,以使能所述圖形層存儲(chǔ)空間和所述視頻層存儲(chǔ)空間的分離;嵌入式Linux系統(tǒng)中的用戶的顯示實(shí)體訪問顯卡,從所述圖形層存儲(chǔ)空間讀寫圖形數(shù)據(jù),從所述視頻層存儲(chǔ)空間讀寫視頻數(shù)據(jù)。通過本發(fā)明,將顯卡的圖形層與視頻層分離開來,用戶層顯示設(shè)備可以獨(dú)立對(duì)每一層進(jìn)行控制。大大減少系統(tǒng)的復(fù)雜性,增加了穩(wěn)定性與可靠性。
文檔編號(hào)G06F9/44GK103092578SQ201110335119
公開日2013年5月8日 申請(qǐng)日期2011年10月28日 優(yōu)先權(quán)日2011年10月28日
發(fā)明者彭席漢, 張興明, 傅利泉, 朱江明, 吳軍, 吳堅(jiān) 申請(qǐng)人:浙江大華技術(shù)股份有限公司