《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于Linux+ARM的多格式視頻圖像采集系統(tǒng)的設(shè)計
基于Linux+ARM的多格式視頻圖像采集系統(tǒng)的設(shè)計
2014年微型機與應(yīng)用第21期
趙楠楠1,2 ,楊秀虎1
(1.遼寧科技大學(xué) 電子與信息工程學(xué)院,遼寧 鞍山 114051; 2.國家金融安全及系統(tǒng)裝備工程技術(shù)研究中心,遼寧 鞍山 114051)
摘要: 設(shè)計了基于S3C2440微處理器的視頻圖像采集系統(tǒng),詳細分析了該系統(tǒng)的啟動過程。在一塊裸板上搭建起整個視頻圖像采集系統(tǒng)。結(jié)合V4L2技術(shù)完成了支持YUV、MJPEG圖像格式的USB攝像頭和支持RGB圖像格式的CMOS攝像頭的多格式視頻圖像采集系統(tǒng)。測試結(jié)果表明,該系統(tǒng)可以在LCD顯示屏上動態(tài)顯示多格式攝像頭所采集到的視頻圖像,且視頻圖像具有清晰度高、流暢性好、穩(wěn)定性強等特點,具有進一步推廣使用的廣闊前景。
Abstract:
Key words :

  摘 要: 設(shè)計了基于S3C2440微處理器的視頻圖像采集系統(tǒng),詳細分析了該系統(tǒng)的啟動過程。在一塊裸板上搭建起整個視頻圖像采集系統(tǒng)。結(jié)合V4L2技術(shù)完成了支持YUV、MJPEG圖像格式的USB攝像頭和支持RGB圖像格式的CMOS攝像頭的多格式視頻圖像采集系統(tǒng)。測試結(jié)果表明,該系統(tǒng)可以在LCD顯示屏上動態(tài)顯示多格式攝像頭所采集到的視頻圖像,且視頻圖像具有清晰度高、流暢性好、穩(wěn)定性強等特點,具有進一步推廣使用的廣闊前景。

  關(guān)鍵詞u-boot與系統(tǒng)啟動;V4L2;多格式視頻圖像采集;video2lcd

0 引 言

  當(dāng)下隨著多媒體技術(shù)、集成電子技術(shù)、計算機技術(shù)的高速發(fā)展,視頻圖像采集技術(shù)也不斷發(fā)展,它的應(yīng)用場合也更加廣泛。尤其近年來,隨著嵌入式技術(shù)的發(fā)展,ARM處理器運算的能力不斷地增強以及處理圖像的技術(shù)不斷地提高,使基于ARM的圖像采集廣泛地應(yīng)用于各個領(lǐng)域[1-4]。視頻圖像采集更是成為了研究熱點。嵌入式這一技術(shù)的發(fā)展使得視頻采集系統(tǒng)具有了體積小、成本低、性能高等特點,能夠擴展到很多領(lǐng)域[5]?;谶@樣的背景,本文進行了一套有益研究。

  本系統(tǒng)采用三星公司S3C2440微處理器搭建一個全新的視頻圖像采集系統(tǒng),包括分析改進u-boot源代碼,使之支持所用JZ2440開發(fā)板,支持開發(fā)板的串口、網(wǎng)卡功能,支持Nand啟動等,且大大簡化冗余代碼,編譯出簡潔高效的u-boot.bin文件,能夠?qū)崿F(xiàn)快速燒寫和擦除,從而實現(xiàn)系統(tǒng)快速啟動。在搭建好開發(fā)環(huán)境之后,結(jié)合V4L2技術(shù)分析數(shù)據(jù)采集系統(tǒng)流程,編寫應(yīng)用程序veido2lcd完成支持YUV、MJPEG圖像格式的USB攝像頭和支持RGB圖像格式的CMOS攝像頭的多格式視頻圖像采集系統(tǒng),最后對系統(tǒng)進行測試和分析。

1 開發(fā)環(huán)境搭建

  1.1 系統(tǒng)軟硬件平臺

  視頻圖像采集系統(tǒng)最終是要移植到嵌入式系統(tǒng)的,所以要搭建嵌入式平臺來完成交叉編譯等工作,文中采用支持V4L2的Linux系統(tǒng)。硬件平臺采用三星公司的ARM9開發(fā)板JZ2440,其硬件特性如下:

  CPU處理器: 16/32 bit S3C2440A;

  Flash存儲器: 512 MB NandFlash,64 MB NorFlash;

  內(nèi)存支持: 64 MB SDRAM,4 KB片內(nèi)SRAM

  USB總線與接口: 1個USB Host,1個USB Slave;

  網(wǎng)卡支持: DM9000;

  LCD顯示屏: 4.3英寸TFT LCD屏;

  攝像頭支持: YUV格式的USB攝像頭,MJPEG格式的USB攝像頭,RGB格式的CMOS攝像頭。

  1.2 系統(tǒng)交叉編譯工具的安裝

  Linux開發(fā)所用的交叉編譯工具是arm-linux-gcc-4.3.2,設(shè)置環(huán)境變量:PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin"完成安裝交叉編譯工具鏈。

  它不能夠適應(yīng)現(xiàn)有硬件環(huán)境,需要對其進行如下修改:

  (1) 修改U-boot源代碼以支持S3C2440開發(fā)板

  在單板相關(guān)的配置文件boards.cfg中添加:

  ssmdk2440 arm arm920t - samsung s3c24x0

  (2) 配置時鐘參數(shù)以適應(yīng)于S3C2440

  需要對CPU的MPLL進行設(shè)置,否則內(nèi)存不能正常使用。在start.S里增加對MPLL的設(shè)置:

 ?、僭O(shè)置CPU為異步總線模式;

 ?、谠O(shè)置分頻系數(shù)和MPLLCON寄存器將系統(tǒng)時鐘頻率設(shè)定為400 MHz。

  (3) 支持S3C2440的硬件配置

  在include/configs/smdk2440.h中去掉宏CONFIG_S3C2410,增加配置宏CONFIG_S3C2440以支持S3C2440的相關(guān)硬件配置,比如串口波特率正常。

  (4) 支持Nand啟動

  由于Nand啟動時只能復(fù)制最前面的4 KB代碼到SDRAM,這要求重定位之前的啟動代碼應(yīng)該少于4 KB。原來的代碼在鏈接時加了"-pie"選項, 使得生成的u-boot.bin里多了"*(.rel*)"、 "*(.dynsym)"、導(dǎo)致編譯出來的u-boot非常大,不能支持Nand啟動,需修改代碼來減小u-boot。

 ?、偃サ?"-pie"選項

  在arch/arm/config.mk:75:LDFLAGS_u-boot += -pie中去掉該行以減少代碼。

 ?、谛薷膇nclude/configs/smdk2440.h中的連接地址:

  #define CONFIG_SYS_TEXT_BASE 0x33f80000

  將鏈接地址改為0x33f00000,這是因為SDRAM大小為64 MB,它的基地址是0x30000000,尾址是0x34000000,在0x33f00000~0x34000000之間1 MB空間足夠用來存放u-boot代碼。

 ?、坌薷膕tart.S,實現(xiàn)代碼的重定位,即上電后把NandFlash內(nèi)前4 KB的代碼復(fù)制到片內(nèi)SRAM,然后由這4 KB代碼實現(xiàn)將NandFlash上的u-boot代碼復(fù)制到SDRAM上鏈接地址以0x33f00000開始的地方。

  (5) 支持DM9000網(wǎng)卡

  在smdk2440.h中增加宏定義define CONFIG_DRIVER_DM9000完成S3C2440對網(wǎng)卡DM9000的支持。

  將修改好的u-boot重新make,編譯通過,生成新的u-boot.bin文件。

  以Nor方式啟動開發(fā)板,通過tftp工具將編譯好的u-boot.bin文件燒寫到開發(fā)板,然后關(guān)閉開發(fā)板,撥為Nand啟動方式重啟開發(fā)板,啟動后效果如圖1所示,這樣就完成了一個支持Nand啟動,支持DM9000網(wǎng)卡的u-boot的移植。

001.jpg

2 視頻圖像采集系統(tǒng)設(shè)計

  2.1 Linux內(nèi)核下的V4L2驅(qū)動框架

  在Linux系統(tǒng)下,通過VideoforLinux實現(xiàn)對Linux視頻采集設(shè)備的支持通常將其稱為V4L[6]。它是Linux內(nèi)核中有關(guān)視頻設(shè)備的驅(qū)動程序。Linux內(nèi)核提供Video4Linux2 應(yīng)用程序接口,在程序開發(fā)時首先是基于Video4Linux2 API函數(shù)來設(shè)計程序[7]。

  視頻圖像的采集流程如圖2所示。

002.jpg

  首先使用open函數(shù)打開攝像頭設(shè)備,以獲取該攝像設(shè)備的文件描述符,接著調(diào)用攝像頭設(shè)備的接口函數(shù)vidioc_querycap()來獲取設(shè)備的參數(shù)信息,從而確定接入的是圖像捕捉設(shè)備。由于V4L2所支持的視頻格式有多種,而所接入攝像頭設(shè)備支持YUV、MJPEG、RGB三種格式中的哪一種也是事先未知的,所以V4L2中包含對格式的一系列的操作,包括枚舉、獲得、測試、設(shè)置等接口函數(shù),完成對攝像頭設(shè)備所支持圖像格式的獲取、測試和設(shè)置工作。比如確定了攝像頭為MJPEG格式之后,V4L2就要為視頻流數(shù)據(jù)申請緩沖區(qū)并查詢緩沖區(qū)信息。為了加快對I/O的訪問速度,使用mmap()函數(shù)將攝像頭相應(yīng)的設(shè)備文件映射到內(nèi)存區(qū)并且把獲得的緩沖區(qū)通過函數(shù)vidioc_qbuf()放入隊列中。準(zhǔn)備工作完成之后通過執(zhí)行vidioc_streamon()啟動視頻流數(shù)據(jù)的采集。這里使用poll機制等待數(shù)據(jù)的到來,有了數(shù)據(jù)之后就可以執(zhí)行vidioc_dqbuf()函數(shù)從緩沖區(qū)隊列中獲取一幀視頻流數(shù)據(jù),當(dāng)不再采集的時候就可以調(diào)用vidioc_streamoff()停止視頻流的采集。

  2.2 應(yīng)用程序video2lcd骨架

  要使視頻數(shù)據(jù)顯示到LCD顯示屏上,需要將攝像頭采集到的視頻數(shù)據(jù)經(jīng)過格式轉(zhuǎn)換、縮放、合并、顯示等操作才能最終顯示到LCD顯示屏上。整個過程的流程圖如圖3所示。

003.jpg

  ⑴數(shù)據(jù)格式的轉(zhuǎn)換:由于LCD顯示屏只能支持RGB一種格式,而攝像頭采集到的數(shù)據(jù)有YUV、MJPEG、 RGB三種格式,故需要進行數(shù)據(jù)格式的轉(zhuǎn)換(RGB格式不需要進行轉(zhuǎn)換的)。函數(shù)static int Yuv2RgbConvert(PT_VideoBuf ptVideoBufIn, PT_VideoBuf ptVideoBufOut)用來把內(nèi)存里的YUV圖像轉(zhuǎn)換為RGB圖像。函數(shù)static int Mjpeg2RgbConvert(PT_VideoBuf ptVideoBufIn, PT_VideoBuf ptVideoBufOut)用來將內(nèi)存里的MJPEG圖像轉(zhuǎn)換為RGB圖像。

  ⑵圖像的縮放:由于攝像頭采集到的圖像分辨率與LCD的分辨率并不吻合,為了得到清晰流暢的視頻圖像,需要進行圖像大小的縮放。函數(shù)int picZoom(PT_PixelDatas ptOriginPic, PT_PixelDatas ptZoomPic) 用來實現(xiàn)這一功能。

 ?、菆D像轉(zhuǎn)入緩存:即將縮放后的圖像轉(zhuǎn)入FrameBuffer,使用函數(shù)intPicMerge(iTopLeftX, iTopLeftY, &ptVideoBufCur->tPixelDatas, PT_PixelDatas ->ptFrameBuffer)來完成。緩存Framebuffer中的數(shù)據(jù)就可以直接在LCD屏幕上顯示。

  當(dāng)完成以上工作后,video2lcd應(yīng)用程序就編寫完成,它能夠?qū)z像頭采集到的視頻圖像數(shù)據(jù)清晰流暢地顯示在LCD屏幕上,同時支持YUV、MJPEG、RGB三種格式的視頻圖像的采集,支持多款USB攝像頭的同時也支持CMOS攝像頭。將交叉編譯通過后的video2lcd傳輸?shù)介_發(fā)板的文件系統(tǒng)。

3 應(yīng)用測試與分析

  以Nand方式啟動開發(fā)板,首先將支持YUV格式的USB攝像頭插到開發(fā)板的USB接口,這在串口界面執(zhí)行命令:./video2lcd /dev/video0,回車之后就可以看到LCD顯示屏上有視頻圖像了,晃動攝像頭可見視頻圖像清晰流暢,以同樣的操作分別將支持MJPEG格式的USB攝像頭和支持RGB格式的CMOS攝像頭接到開發(fā)板上,觀察視頻圖像。圖4即為USB攝像頭采集到的MJPEG格式的視頻圖像以及CMOS攝像頭采集到的RGB格式視頻圖像在4.3英寸LCD屏幕上的顯示效果圖,通過與筆記本上圖像的對比可見,視頻圖像非常清晰且視頻流暢。

004.jpg

4 結(jié)束語

  基于S3C2440微處理器和ov7740視頻處理芯片搭建了嵌入式視頻圖像采集平臺,為開發(fā)實現(xiàn)多格式視頻圖像的實時采集與傳輸提供了可行方案。采用嵌入式技術(shù),使系統(tǒng)具有體積小、成本低、普適性高等特點。該方案具有廣泛的應(yīng)用價值。

參考文獻

  [1] 劉攀,王紅亮,孟令軍. 基于 FPGA 的數(shù)字圖像采集存儲系統(tǒng)的設(shè)計[J]. 電視技術(shù), 2010,34(6) :32-34.

  [2] 劉珂含,何培宇,關(guān)勝平,等. 基于TMS320VC5509A的圖像采集與識別系統(tǒng)[J]. 四川大學(xué)學(xué)報:自然科學(xué)版, 2008,45(1):48-52.

  [3] 嚴(yán)新忠,陳雨. 基于嵌入式ARM的圖像采集與傳輸設(shè)計[J].研究與開發(fā), 2009,28(11) :57-59.

  [4] 劉紅喜,李長江,孫俊喜. 基于DSP的圖像采集及處理系統(tǒng)的設(shè)計與實現(xiàn)[J]. 電子技術(shù)應(yīng)用,2009,35(2) :22-26.

  [5] 劉志華. 基于ARM和Linux的視頻圖像采集系統(tǒng)[J]. 微型機與應(yīng)用, 2014,33(3):12-14,17.

  [6] 鄒意然,王永威,趙龍. 嵌入式系統(tǒng)中USB攝像頭的圖像采集[J]. 微計算機信息, 2010,26(12-2):24-26.

  [7] COX A. Video 4 Linux programming [EB/OL]. [2014-08-04]http://www.redhat.com.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。