本文介紹了一種基于嵌入式系統(tǒng)的全彩LED顯示屏脫機(jī)播放系統(tǒng)的設(shè)計(jì)方案。該方案旨在建立一套具有視頻播放,圖片、文字顯示,支持多區(qū)域顯示和流媒體播放,支持高分辨率的全彩LED屏幕的小型播放系統(tǒng)。系統(tǒng)硬件部分采用了S3C2440作為處理核心,并且使用嵌入式顯示芯片SM501提供2D圖形硬件加速功能。軟件部分移植了Linux 2.6內(nèi)核,開(kāi)發(fā)了一套建立在Linux內(nèi)核之上的高顯示性能的專用LED播放軟件。本文較好地解決了目前LED顯示屏脫機(jī)控制卡局限于支持單色或者偽彩LED、分辨率低、不能播放高質(zhì)量視頻的現(xiàn)狀。
1
高分辨率LED顯示屏的應(yīng)用日益廣泛,而目前國(guó)內(nèi)LED顯示屏的播放控制系統(tǒng)主要采用聯(lián)機(jī)方式來(lái)實(shí)現(xiàn),即PC機(jī)+視頻發(fā)送板,通過(guò)千兆以太網(wǎng)或者光纖,將視頻實(shí)時(shí)發(fā)送到LED顯示屏端的視頻接收板上完成顯示。這種方式具有良好的人機(jī)操作界面和優(yōu)秀的視頻顯示質(zhì)量,對(duì)于近距離LED顯示屏聯(lián)機(jī)播放是一種重要的顯示手段。而對(duì)于超長(zhǎng)距離、戶外LED顯示屏而言,聯(lián)機(jī)播放顯然需要付出很高的代價(jià)才能實(shí)現(xiàn),有些場(chǎng)合甚至無(wú)法實(shí)現(xiàn)。而脫機(jī)方式在這些場(chǎng)合則顯示出其獨(dú)特的優(yōu)勢(shì)。脫機(jī)方式的特點(diǎn)在于無(wú)人值守,專用性強(qiáng),占用資源少,經(jīng)濟(jì)便攜。同時(shí)可以通過(guò)一定的控制途徑如Internet、GSM網(wǎng)絡(luò)等可對(duì)播放過(guò)程及內(nèi)容進(jìn)行實(shí)時(shí)的干預(yù)和修改。目前國(guó)內(nèi)的脫機(jī)控制系統(tǒng)多由嵌入式系統(tǒng)如單片機(jī)、SOC、DSP、RISC處理器等實(shí)現(xiàn)。大多數(shù)脫機(jī)控制卡只能顯示較小的分辨率,支持偽彩或者單色,不能播放高質(zhì)量的視頻。本設(shè)計(jì)旨在實(shí)現(xiàn)具有高分辨率、高質(zhì)量視頻播放、流媒體播放、多區(qū)域顯示等功能的小型專用LED脫機(jī)播放系統(tǒng)。 本文將從系統(tǒng)的硬件結(jié)構(gòu)和原理、軟件各模塊設(shè)計(jì)與實(shí)現(xiàn)、性能測(cè)試及結(jié)論三個(gè)方面進(jìn)行說(shuō)明。
2 脫機(jī)播放系統(tǒng)的硬件結(jié)構(gòu)和工作原理
目前國(guó)內(nèi)LED屏脫機(jī)控制系統(tǒng)多采用高性能RISC處理器作為核心,典型的以ARM9為核心的SoC芯片工作頻率大多在200~600MHz之間。然而顯示方面的性能依然比較低下,大多數(shù)芯片,典型的如S3C24X0,通過(guò)內(nèi)部集成LCD控制器來(lái)實(shí)現(xiàn)顯示功能,一般只支持到640X480的顯示分辨率,16bit顏色深度。處理器芯片內(nèi)置的LCD控制器是在系統(tǒng)內(nèi)存中設(shè)置一小部分作為幀存(Frame Buffer),LCD控制器使用一個(gè)專用的高速DMA通道不斷地讀取幀存中的象素?cái)?shù)據(jù)到FIFO memory中,最后生成視頻時(shí)序輸出到外部LCD接口,因此視頻顯示直接占用系統(tǒng)總線帶寬。支持更高的分辨率和色彩深度意味著占用更多的系統(tǒng)帶寬,比如1024×768分辨下,24位深度,60Hz場(chǎng)頻的顯示輸出,顯示占用的系統(tǒng)帶寬在1.1Gbps以上。小型嵌入式系統(tǒng)有限的總線帶寬顯然不可能很好地支持高分辨率真彩顯示。
另一方面,對(duì)于一般的 2D圖形操作如象素復(fù)制、縮放、色空間轉(zhuǎn)換等需要軟件實(shí)現(xiàn),處理器對(duì)Frame Buffer的頻繁操作帶來(lái)的系統(tǒng)性能下降十分突出,極大的影響了CPU在視頻解碼方面的效率。
鑒于上述分析,使用普通的面向手持設(shè)備的嵌入式體系結(jié)構(gòu)無(wú)法滿足全彩大型LED屏幕的顯示要求,本文選擇了工業(yè)級(jí)ARM芯片S3C2440+SM501顯示加速協(xié)處理器的解決方案,從根本上解決了上述分析兩個(gè)影響顯示性能的關(guān)鍵問(wèn)題。
S3C2440是以ARM920T為核心,基本工作頻率400MHz,最高可達(dá)533MHz的一款工業(yè)級(jí)SoC.其內(nèi)部集成了RART,USB,I2 C,LCD,NAND,MMC/SD controller等多種常見(jiàn)IO設(shè)備控制器。
SM501是一款便攜式多媒體協(xié)處理器芯片,專門(mén)為嵌入式工業(yè)提供顯示功能,具有視頻和2D加速能力。它支持多種輸入/輸出接口,包括模擬RGB、數(shù)字LCD接口、8位并行接口、USB、UART、IrDA、Zoom Video、AC97或I2S、SSP、PWM和I2 C.SM501的2D引擎包括一個(gè)前端色彩空間轉(zhuǎn)換器,支持4∶1和1∶8的比例。LCD視頻流水線支持一個(gè)YUV色彩空間轉(zhuǎn)換。通過(guò)將優(yōu)化的128位的2D圖形引擎和一個(gè)與本地幀存儲(chǔ)器連接的高帶寬鏈接相結(jié)合,SM501提供面向工業(yè)的2D圖形加速功能。2D圖形引擎包含一個(gè)命令翻譯器(一個(gè)增強(qiáng)型的DMA引擎),對(duì)于工作在150 MHz的32位數(shù)據(jù)寬度的SDRAM,SM501的DMA引擎讀取2D操作數(shù)的帶寬可達(dá)600 MB/s.SM501支持的最大顯示分辨率為1280×1 024,可以輕松支持普通PC顯示分辨率1024×768.
整個(gè)硬件系統(tǒng)原理如圖1示。S3C2440與SM501在slave 模式下通過(guò)系統(tǒng)總線連接,SM501連接8MB的本地幀存,S3C2440可以通過(guò)系統(tǒng)總線直接訪問(wèn)SM501的本地幀存。系統(tǒng)掛接DM9000A 10/100M網(wǎng)絡(luò)芯片,上位機(jī)脫機(jī)控制軟件通過(guò)Internet網(wǎng)絡(luò)連接到脫機(jī)系統(tǒng)進(jìn)行實(shí)時(shí)控制。脫機(jī)系統(tǒng)通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)流媒體功能。
對(duì)于SM501輸出的數(shù)字視頻,采用FPGA進(jìn)行采集和分發(fā)。SM501與FPGA之間通過(guò)LCD數(shù)字接口連接,包含24 bit并行象素點(diǎn)RGB數(shù)據(jù)、象素時(shí)鐘pclk,行場(chǎng)同步及DE信號(hào)。FPGA采集LCD接口輸出的象素?cái)?shù)據(jù)并實(shí)時(shí)轉(zhuǎn)發(fā)到象素位置對(duì)應(yīng)的掃描板,一幀圖象傳輸完畢后,所有掃描板將同時(shí)更新顯示新圖像幀。每個(gè)掃描板控制的分辨率為256 × 256,脫機(jī)系統(tǒng)最大可以控制1024 × 768分辨率。FPGA內(nèi)部邏輯詳細(xì)設(shè)計(jì)不作為本文討論的主要內(nèi)容。
圖1 脫機(jī)播放系統(tǒng)硬件組成框圖
3 軟件系統(tǒng)
LED脫機(jī)播放軟件設(shè)計(jì)的基本要求包括:系統(tǒng)必須能夠勝任7× 24小時(shí)連續(xù)穩(wěn)定運(yùn)行,因此播放軟件必須具備健壯性。雖然S3C2440處理速度相對(duì)已經(jīng)較快,但是解碼對(duì)CPU時(shí)間的占用仍然是一個(gè)很突出的問(wèn)題,因此播放軟件必須具備高效性,尤其是盡最大可能發(fā)揮出SM501提供的2D加速顯示能力。另外由于SoC更新速度很快,硬件平臺(tái)必然會(huì)有更好選擇,因此軟件在保證高效率的前提下必須提高其可移植性。最后是建立開(kāi)放式的軟件架構(gòu),使之具備可擴(kuò)展、可升級(jí)性,以便于逐步開(kāi)發(fā)新的功能。
本文從以下兩個(gè)方面對(duì)軟件部分的設(shè)計(jì)進(jìn)行介紹:
1)建立嵌入式Linux系統(tǒng)平臺(tái)
2)LED顯示屏脫機(jī)專用播放軟件設(shè)計(jì)與實(shí)現(xiàn)
文章將簡(jiǎn)要介紹基于S3C2440平臺(tái)的嵌入式Linux系統(tǒng)平臺(tái)的搭建,然后著重介紹播放軟件在開(kāi)放性、可移植性、高效性方面所采用的設(shè)計(jì)方法。
4.1 建立嵌入式Linux系統(tǒng)平臺(tái)
Linux內(nèi)核具有體積小,效率高,成熟穩(wěn)定,源代碼開(kāi)放,資源豐富,內(nèi)核直接提供豐富的網(wǎng)絡(luò)協(xié)議,支持多種文件系統(tǒng)等諸多優(yōu)點(diǎn)。本課題移植了Linux2.6.18內(nèi)核,該版本內(nèi)核具有穩(wěn)定性好、開(kāi)發(fā)工具支持度好的優(yōu)點(diǎn)。這部分工作主要包括:
1)針對(duì)硬件平臺(tái)移植u-boot.
2)剪裁并交叉編譯Linux內(nèi)核。移植USB存儲(chǔ)盤(pán)、DM9000A網(wǎng)絡(luò)芯片、SM501顯卡的驅(qū)動(dòng)到內(nèi)核
3)交叉編譯busybox,生成ext2格式的Initrd文件系統(tǒng)鏡像
4)通過(guò)u-boot將內(nèi)核和Initrd鏡像燒寫(xiě)到Nand Flash上,設(shè)置內(nèi)核啟動(dòng)參數(shù)和u-boot啟動(dòng)命令來(lái)啟動(dòng)內(nèi)核
經(jīng)過(guò)上述工作,建立了一個(gè)小型化的嵌入式Linux平臺(tái)。限于篇幅,本文對(duì)嵌入式Linux平臺(tái)的建立細(xì)節(jié)問(wèn)題不深入介紹。
4.2 LED顯示屏脫機(jī)專用播放軟件設(shè)計(jì)與實(shí)現(xiàn)
LED顯示屏脫機(jī)播放軟件的主要設(shè)計(jì)目標(biāo)是支持視頻播放、圖片顯示、多區(qū)域顯示、流媒體播放、遠(yuǎn)程控制。由于整個(gè)軟件項(xiàng)目比較龐大,本文將只選擇幾個(gè)關(guān)鍵模塊進(jìn)行詳細(xì)說(shuō)明,并側(cè)重介紹軟件方面如何利用SM501來(lái)實(shí)現(xiàn)高性能顯示及視頻播放。對(duì)流媒體播放和遠(yuǎn)程控制部分不做介紹。
4.2.1 多區(qū)域顯示功能模塊的設(shè)計(jì)
隨著LED顯示屏幕分辨率的不斷增加,同一個(gè)顯示屏對(duì)信息容量的需求也相應(yīng)的增長(zhǎng),在面向廣告的LED屏中這種需求尤其突出。典型的LED多區(qū)域顯示情形是一個(gè)視頻區(qū)域,多個(gè)圖片區(qū)域,一個(gè)滾動(dòng)字幕區(qū)域。脫機(jī)播放系統(tǒng)主要面向戶外廣告屏,因此,必須重點(diǎn)考慮多區(qū)域顯示功能。
為了更好的支持LED屏幕多區(qū)域顯示,必須從傳統(tǒng)的全屏顯示概念中脫離出來(lái),建立基于區(qū)域(zone)顯示的概念,即顯示內(nèi)容總是在某個(gè)顯示區(qū)域上完成顯示,單屏顯示只是多區(qū)域顯示的一個(gè)特例。在結(jié)構(gòu)上區(qū)域按層次劃分,區(qū)域可以劃分為多個(gè)子區(qū)域。同級(jí)子區(qū)域的位置不能重疊。這樣,在理論上,可以支持任意的以矩形為單位的分區(qū)域顯示形式。多個(gè)區(qū)域并行顯示,通過(guò)多線程方式實(shí)現(xiàn)。
每個(gè)區(qū)域都包含一個(gè)播放列表(playlist)。每個(gè)播放列表由一系列顯示項(xiàng)目(playitem)組成。 顯示項(xiàng)目的概念是指在某個(gè)顯示區(qū)域上進(jìn)行一次完整的顯示過(guò)程。如一段視頻播放,一幅圖片定時(shí)顯示,文字的運(yùn)動(dòng)顯示等。程序采用了面向?qū)ο蟮脑O(shè)計(jì)思想,將不同類型的顯示項(xiàng)目的共性抽象出來(lái),以方便不斷擴(kuò)展的新的顯示項(xiàng)目和客戶定制的顯示內(nèi)容。
所有的顯示項(xiàng)目,無(wú)論其內(nèi)容如何,都可以抽象為一個(gè)隨時(shí)間變化的狀態(tài)機(jī)。每個(gè)顯示項(xiàng)目在時(shí)間的推移下在其所屬的區(qū)域中完成自身的顯示,也就是完成一個(gè)從初始化到結(jié)束的狀態(tài)轉(zhuǎn)換過(guò)程。因此,playitem是一個(gè)抽象基類。每種類型的顯示項(xiàng)目只需重新實(shí)現(xiàn)playitem提供的公共調(diào)用接口即可。
每個(gè)區(qū)域具有一個(gè)播放線程,該線程不斷地從playlist中取出一個(gè)顯示項(xiàng)目,執(zhí)行其狀態(tài)轉(zhuǎn)換接口完成顯示過(guò)程。這種設(shè)計(jì)允許不同類型的顯示項(xiàng)目混合排列在同一個(gè)顯示列表下,極大的增加了播放過(guò)程安排的靈活性。
多區(qū)域顯示設(shè)計(jì)模型如圖2示。
圖2 多區(qū)域顯示模型
4.2.2基于SM501的2D加速顯示接口設(shè)計(jì)
顯示層的設(shè)計(jì)旨在提供一套可移植的、使用方便的2D顯示接口,包括基于區(qū)域內(nèi)部坐標(biāo)的應(yīng)用顯示層接口和基于屏幕坐標(biāo)而與硬件無(wú)關(guān)的底層顯示接口。應(yīng)用顯示層給顯示項(xiàng)目playitem提供簡(jiǎn)單的基于區(qū)域坐標(biāo)的顯示接口?;谄聊蛔鴺?biāo)的底層顯示直接工作在SM501硬件之上,最大化利用了SM501硬件加速能力,同時(shí)還提供了可移植的接口。在移植到其他的2D硬件上只需要重新實(shí)現(xiàn)底層顯示接口即可。
由于硬件設(shè)計(jì)上SM501處于slave mode與S3C2440連接,SM501不能訪問(wèn)系統(tǒng)內(nèi)存,所有要進(jìn)行加速操作的顯示內(nèi)容必須存放在SM501的獨(dú)立顯存上,這樣不方便移植DirectFB作為底層顯示接口。因此本文按照通用的2D顯示接口,獨(dú)立實(shí)現(xiàn)了一套基于屏幕坐標(biāo)的通用底層2D顯示接口。
在實(shí)現(xiàn)上通過(guò)mmap把SM501的控制寄存器和獨(dú)立顯存全部從內(nèi)核空間映射到用戶空間,這樣在程序中可以直接訪問(wèn)SM501的寄存器和管理本地顯存,避免了在顯示時(shí)應(yīng)用程序與內(nèi)核之間的數(shù)據(jù)交換,顯示加速作用得以充分發(fā)揮?;趯?duì)SM501的直接訪問(wèn),底層顯示層實(shí)現(xiàn)了一套基本接口,包括顯存分配與釋放和基本2D加速操作如畫(huà)線(line)、矩形填充(fill_rect),位圖復(fù)制(bitblt)、縮放(bitblt_stretch)、色空間轉(zhuǎn)換(CSC)等。其中對(duì)視頻播放性能影響最大的是縮放和色空間轉(zhuǎn)換。
SM501的繪圖引擎(Draw Engine)包括兩個(gè)部分,2D繪圖引擎和CSC顏色空間轉(zhuǎn)換模塊。2D繪圖引擎主要用來(lái)繪制直線(基于Bresenham算法),矩形填充,復(fù)制(Bitblt),旋轉(zhuǎn)復(fù)制(Rotation bitblt)??s放與顏色空間轉(zhuǎn)換功能都是通過(guò)CSC模塊來(lái)實(shí)現(xiàn)。CSC模塊可以實(shí)現(xiàn)YUV422,YUV420,RGB565,RGB888幾種色彩空間及格式轉(zhuǎn)換到RGB565和RGB888,色空間轉(zhuǎn)換隱含了縮放功能。
顯存分配與釋放管理是對(duì)映射到用戶空間的Frame buffer進(jìn)行的。實(shí)現(xiàn)上使用空閑鏈表的方法,并且采用最先適應(yīng)的原則。最先適應(yīng)分配算法有利于保留更大的連續(xù)內(nèi)存塊給那些一次性內(nèi)存需求量大的分配請(qǐng)求。由于視頻解碼后色空間轉(zhuǎn)換和縮放必須使用硬件加速來(lái)實(shí)現(xiàn),因此總是預(yù)留1M的顯存空間給視頻顯示使用。在顯存不足的情況下,通過(guò)malloc分配系統(tǒng)內(nèi)存。相應(yīng)的所有顯示層接口的地址參數(shù)均被設(shè)計(jì)成為自動(dòng)識(shí)別地址屬于系統(tǒng)內(nèi)存還是獨(dú)立顯存,如果地址屬于系統(tǒng)內(nèi)存,則表明當(dāng)前顯存不足,于是使用軟件的方法實(shí)現(xiàn)繪圖操作。在釋放顯存時(shí),程序若識(shí)別參數(shù)地址為系統(tǒng)內(nèi)存,將調(diào)用free去完成釋放。
在多個(gè)顯示區(qū)域同時(shí)顯示的情況下,顯存的分配與釋放管理以及所有的基于硬件加速的2D操作均被互斥地調(diào)用,以避免多線程同時(shí)對(duì)SM501資源進(jìn)行爭(zhēng)用帶來(lái)的與時(shí)間相關(guān)的執(zhí)行錯(cuò)誤。
由于SM501加速操作只能使用本地幀存的物理地址,而通過(guò)mmap映射得到的是進(jìn)程空間的虛擬地址,顯存分配得到的地址也是基于映射后的地址,因此寫(xiě)入SM501寄存器中作為地址的操作數(shù)必須將進(jìn)程空間地址轉(zhuǎn)化為實(shí)現(xiàn)的幀存物理地址。轉(zhuǎn)化方法就是用顯示分配函數(shù)得到的地址減去mmap得到的首地址。
建立在底層顯示層之上,軟件實(shí)現(xiàn)了與屏幕絕對(duì)坐標(biāo)無(wú)關(guān)的基于區(qū)域內(nèi)部坐標(biāo)的2D加速顯示接口。區(qū)域內(nèi)部坐標(biāo)與區(qū)域本身在屏幕上的絕對(duì)坐標(biāo)相加即可得出要顯示的絕對(duì)坐標(biāo)。另外每個(gè)顯示區(qū)域都有對(duì)齊、縮放方式的選項(xiàng)??s放方式可以有不縮放,線性縮放,非線性縮放三種,對(duì)齊在X,Y方向上分別有三種對(duì)齊方式。因?yàn)閷?shí)際顯示的內(nèi)容大小與顯示區(qū)域大小往往不是相同的,因此這兩種選項(xiàng)對(duì)實(shí)際顯示效果影響極大。如區(qū)域?qū)捀弑扰c顯示內(nèi)容寬高比相差較大時(shí),非線性縮放將導(dǎo)致顯示內(nèi)容嚴(yán)重畸變,而線性縮放將顯示內(nèi)容保持為原來(lái)的寬高比。顯示層次如圖4.
圖3 顯示層次
4.2.3脫機(jī)系統(tǒng)的視頻播放器設(shè)計(jì)
這部分主要介紹針對(duì)SM501顯卡的解碼過(guò)程優(yōu)化設(shè)計(jì),并給出優(yōu)化后的性能測(cè)試數(shù)據(jù)。LED脫機(jī)播放系統(tǒng)目前支持MPEG-4視頻格式的AVI文件播放。
MPEG-4是MPEG(運(yùn)動(dòng)圖像專家組)制定的視頻壓縮標(biāo)準(zhǔn),是目前用得最廣泛的一種視頻編碼標(biāo)準(zhǔn)。MPEG組織于1999年1月正式公布了MPEG-4 V1.0版本。MPEG-4除采用第一代視頻編碼(MPEG-1,MPEG-2,H.263等)的核心技術(shù),如變換編碼、運(yùn)動(dòng)估計(jì)與運(yùn)動(dòng)補(bǔ)償、量化、熵編碼外,還提出了一些新的有創(chuàng)見(jiàn)性的關(guān)鍵技術(shù),包括視頻對(duì)象提取技術(shù)、VOP視頻編碼技術(shù)、視頻編碼可分級(jí)性技術(shù)、運(yùn)動(dòng)估計(jì)與運(yùn)動(dòng)補(bǔ)償技術(shù)等。
Xvid是開(kāi)源的MEPG-4碼器,遵守GPL通用公共許可證,也是目前國(guó)際上公認(rèn)的性能最佳的MPEG-4編解器之一,支持MPEG-4 SP框架。本文移植了Xvidcore-1.1.3到arm-Linux環(huán)境,并且基于Xvid設(shè)計(jì)了自己的LED脫機(jī)系統(tǒng)視頻播放器。
AVI文件格式是Windows系統(tǒng)下最常用的一種視頻文件格式。AVI文件并不局限任何視頻編碼格式。AVI文件格式是基于RIFF(Resource Interchange File Format)文件格式的。RIFF基于“塊”為信息單位,每個(gè)塊由一個(gè)4字符組成的FOURCC字標(biāo)識(shí)。整個(gè)文件由一個(gè)RIFF塊構(gòu)成,RIFF塊和LIST(列表)塊可以包含子塊。包含子塊的塊結(jié)構(gòu)為:FOURCC+塊長(zhǎng)度+塊類型+塊數(shù)據(jù)。不包含子塊的塊結(jié)構(gòu)為:FOURCC+塊長(zhǎng)度+數(shù)據(jù)。 AVI文件在RIFF的基礎(chǔ)上定義了自己的塊類型和數(shù)據(jù)。一個(gè)AVI RIFF文件由3大部分組成:RIFF文件頭,hdrl列表,movi列表,除此外還有一個(gè)可選的索引idxl塊。其中hdrl列表包含 avih 子塊和 strl 子列表,文件中有多少個(gè)流,hdrl 列表中就有多少個(gè)strl 子列表,strl子列表在 hdrl 中的次序就是流的序號(hào)。Movi列表中是實(shí)際的MPEG-4編碼流,avih子塊包含了AVI視頻文件的頭信息,比較重要的是幀頻。一般的AVI視頻文件只有一個(gè)視頻流。戶外LED屏幕對(duì)于音頻播放需求少,因此本文并不涉及音頻解碼。
Xvid解碼過(guò)程中要不斷輸入MPEG-4視頻編碼比特流,視頻流從AVI文件中的movi列表子塊中提取。AVI文件存儲(chǔ)在USB可移動(dòng)存儲(chǔ)盤(pán)上,文件IO時(shí)間延遲會(huì)導(dǎo)致解碼過(guò)程產(chǎn)生間隙性的視頻播放停頓,因此有必要采用單獨(dú)的IO線程從AVI文件中不斷提取視頻流。IO線程與解碼線程構(gòu)成一種生產(chǎn)者-消費(fèi)者類型的線程同步關(guān)系,需要引入同步互斥量來(lái)保證其同步工作。
由于MPEG-4視頻編解碼的原始顏色空間是YUV420,如果直接輸出YUV420平面格式Xvid不需要進(jìn)行顏色空間轉(zhuǎn)換,其余輸出格式則需要經(jīng)過(guò)色空間轉(zhuǎn)換算法得到。Xvidcore-1.1.3解碼器輸出不同的顏色空間格式對(duì)整個(gè)解碼時(shí)間的影響非常顯著。表1是在S3C2440平臺(tái)下使用Xvidcore-1.1.3解碼同一MPEG-4視頻文件(分辨率320x176) 使用不同輸出格式的幀頻比較。
表1 Xvid不同輸出格式解碼速率比較表
本文使Xvid解碼直接輸出YUV420平面格式,避免了Xvid使用軟件算法進(jìn)行色空間
轉(zhuǎn)換,然后使用SM501提供的YUV420轉(zhuǎn)RGBx888硬件色空間轉(zhuǎn)換命令完成視頻幀的顯示。這種方式下SM501與Xvid解碼器并行工作,發(fā)揮了最佳的效果。同時(shí)為了避免了對(duì)數(shù)據(jù)的二次復(fù)制,本文直接在SM501本地顯存中申請(qǐng)了空間作為解碼幀輸出地址,這些優(yōu)化使得整個(gè)解碼器的性能提高了2~3倍。 圖4表示了簡(jiǎn)要的視頻播放軟件流程。
通過(guò)硬件縮放和象素復(fù)制,本文實(shí)現(xiàn)了1024×768分辨率下全屏流暢視頻顯示和多區(qū)域視頻同步顯示等普通嵌入式系統(tǒng)難以達(dá)到顯示效果。多個(gè)顯示區(qū)域下脫機(jī)播放系統(tǒng)AVI視頻文件播放性能測(cè)試結(jié)果如表2示。可以看到,由于有硬件2D加速支持,解碼速率與視頻實(shí)際顯示速率完全相等,區(qū)域大小以及多個(gè)區(qū)域同時(shí)顯示對(duì)系統(tǒng)性能沒(méi)有顯著影響。
表2 視頻播放器性能測(cè)試
測(cè)試結(jié)果表明該系統(tǒng)足以勝任大多數(shù)全彩類型商業(yè)廣告LED大屏幕脫機(jī)視頻播放。
圖4 優(yōu)化的視頻播放流程
5 結(jié)論
本文采用高速MCU和SM501嵌入式顯卡作為硬件平臺(tái),突破了嵌入式系統(tǒng)在顯示性能上的瓶頸,接口明確。在軟件上移植了Linux2.6內(nèi)核作為軟件平臺(tái),在效率和可移植性方面做了較好平衡,運(yùn)用了良好的軟件設(shè)計(jì)思想,開(kāi)發(fā)出具有開(kāi)放式體系結(jié)構(gòu)的LED脫機(jī)播放軟件。該系統(tǒng)已經(jīng)成功應(yīng)用于全彩LED顯示屏的脫機(jī)播放和控制。
評(píng)論
查看更多