王 洋,張洪濤
(1武漢船舶職業技術學院船舶與海洋工程學院,湖北 武漢430050;2湖北工業大學電氣與電子工程學院,湖北 武漢430068)
在手持類設備中,經常需要讀取內置/外置SD卡中存放的圖片文件,并將讀取的文件在屏幕上以文件列表的形式顯示出來,即文件回放功能。比如手機相冊中的圖片預覽功能、或者視頻文件的回放功能等。在實際開發測試中,經常會有一個突出矛盾,當SD卡中存放的文件過多時,限于CPU的主頻,文件回放速度會很慢。
可變換圖像文件的英文縮寫是EXIF(Exchangeable image file format),它是存儲JPEG 圖片的標準,最初是由日本電子工業發展協會(JEITA)制定。大多數的數碼相機廠商都已經采用EXIF的標準,EXIF格式簡單說,就是在JPEG格式上加上拍攝時的常見參數,比如焦距、白平衡、拍攝時間等數據以及相機品牌、拍攝時錄制的聲音以及GPS數據和縮略圖等[1]。
經過代碼分析,可以知道在QT中實現文件回放的思路首先是通過指定的路徑查找圖片,然后按照圖片的分辨率(比如640×480)逐行逐列讀取文件,此時如果圖片分辯率較大,則讀取的數據量將相應變大,使得在同等硬件條件下讀取速度變慢,即預覽的效果會變差,比如手機相冊翻頁或者進入手機相冊時等待時間變長。
假如文件回放時只是讀取縮略圖數據,因為縮略圖的大小和原圖相比將會成倍數變小,比如原圖大小為640×480,而縮略圖為160×120。此時根據推測,讀取速度將會大大提升。而在PC機中,圖片文件的預覽都是通過縮略圖來顯示的。故采用在EXIF中插入圖片的縮略圖方法,對嵌入式系統的文件預覽進行驗證。
在實際應用中,使用一款手持類攝像儀來驗證方案是否可行。
該攝像儀系統核心板DM365板采用TI達芬奇(DaVinci)TMS320DM365芯片,該芯片具有雙核視頻 處理引 擎 (HDVICP、MJCP),128MB 32-bit DDR2內存,接口豐富(支持包括SD卡、SM 卡、MMC卡等),音視頻處理能力比較優秀[2]。該平臺在音視頻領域應用廣泛,因此實驗結果有一定指導價值。
MMC/SD卡是日本松下、東芝及美國SanDisk公司于1999年8月共同研制的新一代記憶卡。本系統采用Sandisk的4G內存卡,DM365主要通過自帶的SPI接口與SD卡進行數據讀寫。
該系統的軟件系統采用Linux內核2.6版本,該版本對SD卡的驅動支持已經比較完善。該系統SD卡的軟件框架見圖1,整個框架中最重要的部分是Core核心層,它提供一系列的接口函數,對上將主機驅動注冊到系統,對下支持主機控制器控制方法及塊設備請求。本文主要介紹用戶空間部分即文件系統的應用。

圖1 Linux SD卡驅動代碼框架圖
系統中SD卡的文件系統采用FAT32格式,目前在嵌入式操作系統linux2.6.32中已支持大于4 G容量的SD卡,為了保證測試結果的穩定性,在此采用的SD卡容量為4G。加載內核前,首先運行make menuconfig,在linux內核編譯選項中勾選對SD/MMC接口的支持。配置選項見圖2。接著將編譯后的內核燒寫到機器。
當插入SD卡后,機器會識別加載的設備,輸入cat/proc/device,查看塊設備信息,然后發現 mmc的設備,接著創建設備節點 mknod/dev/mmc b 254 0。最后掛載SD卡。

圖2 Linux2.6.32內核配置選項
應用前要在機器中安裝jhead開源軟件,jhead是處理照片exif信息的命令行工具,因為機器操作系統為linux,而jhead是跨平臺工具,可以直接應用。所使用的手持類設備拍攝的圖片是jpg格式圖片x.jpg,初始狀態沒有exif,故而首先通過jhead–mkexifx.jpg命令生成帶有exif頭的jpg圖片X.jpg,原圖大小為640×480像素,然后采用命令jhead–rtx.jpg XXX.jpg將160×120像素的縮略圖XXX.jpg嵌入到exif頭中。采用以上步驟實現文件回放圖片的處理工作。
如果用戶此時需要進入機器的文件回放功能,就要使用QT來讀取exif中的縮略圖來實現文件回放功能。QT中具有能將縮略圖提取成QImage的類JpegThumbnailFetcher。該類提供了fetchThumbnail方法,返回值為QImage類型的縮略圖,將生成的QImage類型的圖片在Qlabel類中加載顯示。改進后文件回放模塊的軟件流程見圖3。

圖3 文件回放功能軟件流程圖
為了對比采用新方法對于文件回放速度的改善效果,拿出兩種同型號手持設備,SD卡中存儲的圖片數量大小相同,在這里將4G卡存滿圖片后再讓機器讀取。分別采用兩種文件回放策略,一種為回放方式讀取原圖(分辨率640×480),另一種為本文所述直接讀取縮略圖(分辨率160×120)。拍攝100張圖片,觀察切換進入文件回放模式的時間。經過測試,發現回放速度得到較大提升,如果文件回放時一頁同時顯示20張圖片,那么顯示時間減少1~2s。
目前手持類視頻圖像設備正在大量普及,比如手機、攝像機等設備。隨著內/外存存儲容量的提升,存儲的圖像視頻數量將會日益增多,作為提高文件回放速度的技術方法,該方法實現簡單,不需要額外增加硬件資源,效果明顯,具有工程應用價值。
[1] 許 剛,董士崇 .EXIF格式淺析及讀取[J].電腦開發與應用,2008,18(03):39-41.
[2] 張晨鸝.基于DM365的音視頻服務器的設計[D].武漢:武漢理工大學,2010.