王 洋,張洪濤
(1武漢船舶職業(yè)技術(shù)學(xué)院船舶與海洋工程學(xué)院,湖北 武漢430050;2湖北工業(yè)大學(xué)電氣與電子工程學(xué)院,湖北 武漢430068)
在手持類設(shè)備中,經(jīng)常需要讀取內(nèi)置/外置SD卡中存放的圖片文件,并將讀取的文件在屏幕上以文件列表的形式顯示出來,即文件回放功能。比如手機(jī)相冊中的圖片預(yù)覽功能、或者視頻文件的回放功能等。在實(shí)際開發(fā)測試中,經(jīng)常會(huì)有一個(gè)突出矛盾,當(dāng)SD卡中存放的文件過多時(shí),限于CPU的主頻,文件回放速度會(huì)很慢。
可變換圖像文件的英文縮寫是EXIF(Exchangeable image file format),它是存儲(chǔ)JPEG 圖片的標(biāo)準(zhǔn),最初是由日本電子工業(yè)發(fā)展協(xié)會(huì)(JEITA)制定。大多數(shù)的數(shù)碼相機(jī)廠商都已經(jīng)采用EXIF的標(biāo)準(zhǔn),EXIF格式簡單說,就是在JPEG格式上加上拍攝時(shí)的常見參數(shù),比如焦距、白平衡、拍攝時(shí)間等數(shù)據(jù)以及相機(jī)品牌、拍攝時(shí)錄制的聲音以及GPS數(shù)據(jù)和縮略圖等[1]。
經(jīng)過代碼分析,可以知道在QT中實(shí)現(xiàn)文件回放的思路首先是通過指定的路徑查找圖片,然后按照圖片的分辨率(比如640×480)逐行逐列讀取文件,此時(shí)如果圖片分辯率較大,則讀取的數(shù)據(jù)量將相應(yīng)變大,使得在同等硬件條件下讀取速度變慢,即預(yù)覽的效果會(huì)變差,比如手機(jī)相冊翻頁或者進(jìn)入手機(jī)相冊時(shí)等待時(shí)間變長。
假如文件回放時(shí)只是讀取縮略圖數(shù)據(jù),因?yàn)榭s略圖的大小和原圖相比將會(huì)成倍數(shù)變小,比如原圖大小為640×480,而縮略圖為160×120。此時(shí)根據(jù)推測,讀取速度將會(huì)大大提升。而在PC機(jī)中,圖片文件的預(yù)覽都是通過縮略圖來顯示的。故采用在EXIF中插入圖片的縮略圖方法,對嵌入式系統(tǒng)的文件預(yù)覽進(jìn)行驗(yàn)證。
在實(shí)際應(yīng)用中,使用一款手持類攝像儀來驗(yàn)證方案是否可行。
該攝像儀系統(tǒng)核心板DM365板采用TI達(dá)芬奇(DaVinci)TMS320DM365芯片,該芯片具有雙核視頻 處理引 擎 (HDVICP、MJCP),128MB 32-bit DDR2內(nèi)存,接口豐富(支持包括SD卡、SM 卡、MMC卡等),音視頻處理能力比較優(yōu)秀[2]。該平臺在音視頻領(lǐng)域應(yīng)用廣泛,因此實(shí)驗(yàn)結(jié)果有一定指導(dǎo)價(jià)值。
MMC/SD卡是日本松下、東芝及美國SanDisk公司于1999年8月共同研制的新一代記憶卡。本系統(tǒng)采用Sandisk的4G內(nèi)存卡,DM365主要通過自帶的SPI接口與SD卡進(jìn)行數(shù)據(jù)讀寫。
該系統(tǒng)的軟件系統(tǒng)采用Linux內(nèi)核2.6版本,該版本對SD卡的驅(qū)動(dòng)支持已經(jīng)比較完善。該系統(tǒng)SD卡的軟件框架見圖1,整個(gè)框架中最重要的部分是Core核心層,它提供一系列的接口函數(shù),對上將主機(jī)驅(qū)動(dòng)注冊到系統(tǒng),對下支持主機(jī)控制器控制方法及塊設(shè)備請求。本文主要介紹用戶空間部分即文件系統(tǒng)的應(yīng)用。
圖1 Linux SD卡驅(qū)動(dòng)代碼框架圖
系統(tǒng)中SD卡的文件系統(tǒng)采用FAT32格式,目前在嵌入式操作系統(tǒng)linux2.6.32中已支持大于4 G容量的SD卡,為了保證測試結(jié)果的穩(wěn)定性,在此采用的SD卡容量為4G。加載內(nèi)核前,首先運(yùn)行make menuconfig,在linux內(nèi)核編譯選項(xiàng)中勾選對SD/MMC接口的支持。配置選項(xiàng)見圖2。接著將編譯后的內(nèi)核燒寫到機(jī)器。
當(dāng)插入SD卡后,機(jī)器會(huì)識別加載的設(shè)備,輸入cat/proc/device,查看塊設(shè)備信息,然后發(fā)現(xiàn) mmc的設(shè)備,接著創(chuàng)建設(shè)備節(jié)點(diǎn) mknod/dev/mmc b 254 0。最后掛載SD卡。
圖2 Linux2.6.32內(nèi)核配置選項(xiàng)
應(yīng)用前要在機(jī)器中安裝jhead開源軟件,jhead是處理照片exif信息的命令行工具,因?yàn)闄C(jī)器操作系統(tǒng)為linux,而jhead是跨平臺工具,可以直接應(yīng)用。所使用的手持類設(shè)備拍攝的圖片是jpg格式圖片x.jpg,初始狀態(tài)沒有exif,故而首先通過jhead–mkexifx.jpg命令生成帶有exif頭的jpg圖片X.jpg,原圖大小為640×480像素,然后采用命令jhead–rtx.jpg XXX.jpg將160×120像素的縮略圖XXX.jpg嵌入到exif頭中。采用以上步驟實(shí)現(xiàn)文件回放圖片的處理工作。
如果用戶此時(shí)需要進(jìn)入機(jī)器的文件回放功能,就要使用QT來讀取exif中的縮略圖來實(shí)現(xiàn)文件回放功能。QT中具有能將縮略圖提取成QImage的類JpegThumbnailFetcher。該類提供了fetchThumbnail方法,返回值為QImage類型的縮略圖,將生成的QImage類型的圖片在Qlabel類中加載顯示。改進(jìn)后文件回放模塊的軟件流程見圖3。
圖3 文件回放功能軟件流程圖
為了對比采用新方法對于文件回放速度的改善效果,拿出兩種同型號手持設(shè)備,SD卡中存儲(chǔ)的圖片數(shù)量大小相同,在這里將4G卡存滿圖片后再讓機(jī)器讀取。分別采用兩種文件回放策略,一種為回放方式讀取原圖(分辨率640×480),另一種為本文所述直接讀取縮略圖(分辨率160×120)。拍攝100張圖片,觀察切換進(jìn)入文件回放模式的時(shí)間。經(jīng)過測試,發(fā)現(xiàn)回放速度得到較大提升,如果文件回放時(shí)一頁同時(shí)顯示20張圖片,那么顯示時(shí)間減少1~2s。
目前手持類視頻圖像設(shè)備正在大量普及,比如手機(jī)、攝像機(jī)等設(shè)備。隨著內(nèi)/外存存儲(chǔ)容量的提升,存儲(chǔ)的圖像視頻數(shù)量將會(huì)日益增多,作為提高文件回放速度的技術(shù)方法,該方法實(shí)現(xiàn)簡單,不需要額外增加硬件資源,效果明顯,具有工程應(yīng)用價(jià)值。
[1] 許 剛,董士崇 .EXIF格式淺析及讀?。跩].電腦開發(fā)與應(yīng)用,2008,18(03):39-41.
[2] 張晨鸝.基于DM365的音視頻服務(wù)器的設(shè)計(jì)[D].武漢:武漢理工大學(xué),2010.