4.2.2基于SM501的2D加速顯示接口設計
顯示層的設計旨在提供一套可移植的、使用方便的2D顯示接口,包括基于區(qū)域內(nèi)部坐標的應用顯示層接口和基于屏幕坐標而與硬件無關的底層顯示接口。應用顯示層給顯示項目playitem提供簡單的基于區(qū)域坐標的顯示接口?;谄聊蛔鴺说牡讓语@示直接工作在SM501硬件之上,最大化利用了SM501硬件加速能力,同時還提供了可移植的接口。在移植到其他的2D硬件上只需要重新實現(xiàn)底層顯示接口即可。
由于硬件設計上SM501處于slave mode與S3C2440連接,SM501不能訪問系統(tǒng)內(nèi)存,所有要進行加速操作的顯示內(nèi)容必須存放在SM501的獨立顯存上,這樣不方便移植 DirectFB作為底層顯示接口。因此本文按照通用的2D顯示接口,獨立實現(xiàn)了一套基于屏幕坐標的通用底層2D顯示接口。
在實現(xiàn)上通過mmap把SM501的控制寄存器和獨立顯存全部從內(nèi)核空間映射到用戶空間,這樣在程序中可以直接訪問SM501的寄存器和管理本地顯存,避免了在顯示時應用程序與內(nèi)核之間的數(shù)據(jù)交換,顯示加速作用得以充分發(fā)揮?;趯M501的直接訪問,底層顯示層實現(xiàn)了一套基本接口,包括顯存分配與釋放和基本2D加速操作如畫線(line)、矩形填充(fill_rect),位圖復制(bitblt)、縮放(bitblt_stretch)、色空間轉(zhuǎn)換(CSC)等。其中對視頻播放性能影響最大的是縮放和色空間轉(zhuǎn)換。
SM501的繪圖引擎(Draw Engine)包括兩個部分,2D繪圖引擎和CSC顏色空間轉(zhuǎn)換模塊。2D繪圖引擎主要用來繪制直線(基于Bresenham算法),矩形填充,復制(Bitblt),旋轉(zhuǎn)復制(Rotation bitblt)??s放與顏色空間轉(zhuǎn)換功能都是通過CSC模塊來實現(xiàn)。CSC模塊可以實現(xiàn)YUV422,YUV420,RGB565,RGB888幾種色彩空間及格式轉(zhuǎn)換到RGB565和RGB888,色空間轉(zhuǎn)換隱含了縮放功能。
顯存分配與釋放管理是對映射到用戶空間的Frame buffer進行的。實現(xiàn)上使用空閑鏈表的方法,并且采用最先適應的原則。最先適應分配算法有利于保留更大的連續(xù)內(nèi)存塊給那些一次性內(nèi)存需求量大的分配請求。由于視頻解碼后色空間轉(zhuǎn)換和縮放必須使用硬件加速來實現(xiàn),因此總是預留1M的顯存空間給視頻顯示使用。在顯存不足的情況下,通過malloc分配系統(tǒng)內(nèi)存。相應的所有顯示層接口的地址參數(shù)均被設計成為自動識別地址屬于系統(tǒng)內(nèi)存還是獨立顯存,如果地址屬于系統(tǒng)內(nèi)存,則表明當前顯存不足,于是使用軟件的方法實現(xiàn)繪圖操作。在釋放顯存時,程序若識別參數(shù)地址為系統(tǒng)內(nèi)存,將調(diào)用free去完成釋放。
在多個顯示區(qū)域同時顯示的情況下,顯存的分配與釋放管理以及所有的基于硬件加速的2D操作均被互斥地調(diào)用,以避免多線程同時對SM501資源進行爭用帶來的與時間相關的執(zhí)行錯誤。
由于SM501加速操作只能使用本地幀存的物理地址,而通過mmap映射得到的是進程空間的虛擬地址,顯存分配得到的地址也是基于映射后的地址,因此寫入SM501寄存器中作為地址的操作數(shù)必須將進程空間地址轉(zhuǎn)化為實現(xiàn)的幀存物理地址。轉(zhuǎn)化方法就是用顯示分配函數(shù)得到的地址減去mmap得到的首地址。
建立在底層顯示層之上,軟件實現(xiàn)了與屏幕絕對坐標無關的基于區(qū)域內(nèi)部坐標的2D加速顯示接口。區(qū)域內(nèi)部坐標與區(qū)域本身在屏幕上的絕對坐標相加即可得出要顯示的絕對坐標。另外每個顯示區(qū)域都有對齊、縮放方式的選項??s放方式可以有不縮放,線性縮放,非線性縮放三種,對齊在X,Y方向上分別有三種對齊方式。因為實際顯示的內(nèi)容大小與顯示區(qū)域大小往往不是相同的,因此這兩種選項對實際顯示效果影響極大。如區(qū)域?qū)捀弑扰c顯示內(nèi)容寬高比相差較大時,非線性縮放將導致顯示內(nèi)容嚴重畸變,而線性縮放將顯示內(nèi)容保持為原來的寬高比。顯示層次如圖4.
圖3 顯示層次
4.2.3脫機系統(tǒng)的視頻播放器設計
這部分主要介紹針對SM501顯卡的解碼過程優(yōu)化設計,并給出優(yōu)化后的性能測試數(shù)據(jù)。LED脫機播放系統(tǒng)目前支持MPEG-4視頻格式的AVI文件播放。
MPEG-4是MPEG(運動圖像專家組)制定的視頻壓縮標準,是目前用得最廣泛的一種視頻編碼標準。MPEG組織于1999年1月正式公布了MPEG-4 V1.0版本。MPEG-4除采用第一代視頻編碼(MPEG-1,MPEG-2,H.263等)的核心技術,如變換編碼、運動估計與運動補償、量化、熵編碼外,還提出了一些新的有創(chuàng)見性的關鍵技術,包括視頻對象提取技術、VOP視頻編碼技術、視頻編碼可分級性技術、運動估計與運動補償技術等。
Xvid是開源的MEPG-4碼器,遵守GPL通用公共許可證,也是目前國際上公認的性能最佳的 MPEG-4編解器之一,支持MPEG-4 SP框架。本文移植了Xvidcore-1.1.3到arm-Linux環(huán)境,并且基于Xvid設計了自己的LED脫機系統(tǒng)視頻播放器。
AVI文件格式是Windows系統(tǒng)下最常用的一種視頻文件格式。AVI文件并不局限任何視頻編碼格式。AVI文件格式是基于RIFF(Resource Interchange File Format)文件格式的。RIFF基于“塊”為信息單位,每個塊由一個4字符組成的FOURCC字標識。整個文件由一個RIFF塊構成,RIFF塊和 LIST(列表)塊可以包含子塊。包含子塊的塊結構為:FOURCC+塊長度+塊類型+塊數(shù)據(jù)。不包含子塊的塊結構為:FOURCC+塊長度+數(shù)據(jù)。 AVI文件在RIFF的基礎上定義了自己的塊類型和數(shù)據(jù)。一個AVI RIFF文件由3大部分組成:RIFF文件頭,hdrl列表,movi列表,除此外還有一個可選的索引idxl塊。其中hdrl列表包含 avih 子塊和 strl 子列表,文件中有多少個流,hdrl 列表中就有多少個strl 子列表,strl子列表在 hdrl 中的次序就是流的序號。Movi列表中是實際的MPEG-4編碼流,avih子塊包含了AVI視頻文件的頭信息,比較重要的是幀頻。一般的AVI視頻文件只有一個視頻流。戶外LED屏幕對于音頻播放需求少,因此本文并不涉及音頻解碼。
Xvid解碼過程中要不斷輸入MPEG-4視頻編碼比特流,視頻流從AVI文件中的movi列表子塊中提取。AVI文件存儲在USB可移動存儲盤上,文件IO時間延遲會導致解碼過程產(chǎn)生間隙性的視頻播放停頓,因此有必要采用單獨的IO線程從AVI文件中不斷提取視頻流。IO線程與解碼線程構成一種生產(chǎn)者-消費者類型的線程同步關系,需要引入同步互斥量來保證其同步工作。
由于MPEG-4視頻編解碼的原始顏色空間是YUV420,如果直接輸出YUV420平面格式 Xvid不需要進行顏色空間轉(zhuǎn)換,其余輸出格式則需要經(jīng)過色空間轉(zhuǎn)換算法得到。Xvidcore-1.1.3解碼器輸出不同的顏色空間格式對整個解碼時間的影響非常顯著。表1是在S3C2440平臺下使用Xvidcore-1.1.3解碼同一MPEG-4視頻文件(分辨率320x176) 使用不同輸出格式的幀頻比較。
表1 Xvid不同輸出格式解碼速率比較表
本文使Xvid解碼直接輸出YUV420平面格式,避免了Xvid使用軟件算法進行色空間
轉(zhuǎn)換,然后使用SM501提供的YUV420轉(zhuǎn)RGBx888硬件色空間轉(zhuǎn)換命令完成視頻幀的顯示。這種方式下SM501與Xvid解碼器并行工作,發(fā)揮了最佳的效果。同時為了避免了對數(shù)據(jù)的二次復制,本文直接在SM501本地顯存中申請了空間作為解碼幀輸出地址,這些優(yōu)化使得整個解碼器的性能提高了2~3倍。 圖4表示了簡要的視頻播放軟件流程。
通過硬件縮放和象素復制,本文實現(xiàn)了1024×768分辨率下全屏流暢視頻顯示和多區(qū)域視頻同步顯示等普通嵌入式系統(tǒng)難以達到顯示效果。多個顯示區(qū)域下脫機播放系統(tǒng)AVI視頻文件播放性能測試結果如表2示。可以看到,由于有硬件2D加速支持,解碼速率與視頻實際顯示速率完全相等,區(qū)域大小以及多個區(qū)域同時顯示對系統(tǒng)性能沒有顯著影響。
表2 視頻播放器性能測試
測試結果表明該系統(tǒng)足以勝任大多數(shù)全彩類型商業(yè)廣告LED大屏幕脫機視頻播放。
圖4 優(yōu)化的視頻播放流程
5 結論
本文采用高速MCU和SM501嵌入式顯卡作為硬件平臺,突破了嵌入式系統(tǒng)在顯示性能上的瓶頸,接口明確。在軟件上移植了Linux2.6內(nèi)核作為軟件平臺,在效率和可移植性方面做了較好平衡,運用了良好的軟件設計思想,開發(fā)出具有開放式體系結構的 LED脫機播放軟件。該系統(tǒng)已經(jīng)成功應用于全彩LED顯示屏的脫機播放和控制。
評論
查看更多