新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于S3C2410的的圖像采集系統(tǒng)

基于S3C2410的的圖像采集系統(tǒng)

作者: 時(shí)間:2012-03-09 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/149480.htm

啟動(dòng)時(shí),首先需要加載各種驅(qū)動(dòng)模塊,然后向注冊(cè)了生產(chǎn)廠商號(hào)碼(VendorID)和產(chǎn)品號(hào)(Pro-ductID)。當(dāng)USB設(shè)備連接到主機(jī)上,會(huì)檢測(cè)它的VendorID和ProductID,如果與驅(qū)動(dòng)模塊的注冊(cè)內(nèi)容匹配,則將該驅(qū)動(dòng)程序與設(shè)備掛接起來[5]。當(dāng)插入攝像頭時(shí),系統(tǒng)會(huì)調(diào)用zc301_probe函數(shù)。參數(shù)dev指定了設(shè)備信息,probe函數(shù)驗(yàn)證所有可選配置的有效性,并調(diào)用usbvideo模塊的sbvideo_Regis-terVideodevice()函數(shù)向videodev系統(tǒng)注冊(cè)。

當(dāng)系統(tǒng)完成驅(qū)動(dòng)注冊(cè)后,調(diào)用staticintzc301_init(structusb_zc301*zc301)和staticvoidzc301_start(structusb_301*zc301)函數(shù)完成對(duì)設(shè)備的初始化過程:填寫各個(gè)寄存器值、啟動(dòng)攝像頭。系統(tǒng)運(yùn)行到這一步,基本完成了對(duì)攝像頭驅(qū)動(dòng)加載及設(shè)備初始化。接下來需要通過讀取用戶設(shè)定的規(guī)格,其中包括:格式、分辨率、顏色深度、對(duì)比度和亮度等參數(shù)。這些數(shù)值的讀取都是通過以下函數(shù)實(shí)現(xiàn)的:

在得到這些參數(shù)值后,再調(diào)用一套函數(shù),實(shí)現(xiàn)參數(shù)的設(shè)置。每個(gè)參數(shù)設(shè)置函數(shù)和之前的參數(shù)取值函數(shù)是一一對(duì)應(yīng)的。具體函數(shù)如下:

通過調(diào)用上面的函數(shù),我們基本得到了所需的參數(shù)值,這樣我們就可以啟動(dòng)攝像頭了。

當(dāng)然我們還需要staticvoidzc301_shutdown(structusb_zc301*zc301)來關(guān)閉攝像頭。

至此,攝像頭驅(qū)動(dòng)的驅(qū)動(dòng)基本完成。通過這些函數(shù)的設(shè)置我們可以把具體的硬件電路抽象化為數(shù)據(jù)結(jié)構(gòu)中的參數(shù)值。接下來我們可以通過V4L驅(qū)動(dòng)來調(diào)用這些函數(shù),實(shí)現(xiàn)對(duì)參數(shù)的賦值、打開設(shè)備、和關(guān)閉設(shè)備等一系列的過程。

重新編譯、運(yùn)行內(nèi)核時(shí),在串口反饋信息中會(huì)顯示USB攝像頭驅(qū)動(dòng)程序成功加載。如圖3所示。

圖3串口反饋信息3Video4Linux下的圖像編程:

Video4Linux,簡(jiǎn)稱V4L,是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),它為針對(duì)視頻設(shè)備的應(yīng)用程序編程提供一系列半標(biāo)準(zhǔn)的接口。V4L利用這個(gè)接口,增加一些額外的功能,同時(shí)向外提供了一個(gè)屬于自己的API。我們可以通過調(diào)用V4L的API來實(shí)現(xiàn)各種功能。在Linux下,視頻設(shè)備的正常使用依賴于對(duì)Video4Linux標(biāo)準(zhǔn)的支持。目前的V4L涵蓋了視、音頻流捕捉及處理等內(nèi)容,USB攝像頭也屬于它支持的范疇。

V4L中定義的主要數(shù)據(jù)結(jié)構(gòu):

這些數(shù)據(jù)結(jié)構(gòu)都是由Video4Linux支持的,它們的用途如下:

(1)video_capability包含攝像頭的基本信息,例如設(shè)備名稱、支持的最大最小分辨率、信號(hào)源信息等,分別對(duì)應(yīng)著結(jié)構(gòu)體中成員變量name、maxwidth、maxheight、minwidth、minheight、channels(信號(hào)源個(gè)數(shù))、type等;

(2)voide_picture包含設(shè)備采集圖像的各種屬性,如brightness(亮度)、hue(色調(diào))、contrast(對(duì)比度)、whiteness(色度)、depth(深度)等;

(3)video_mmap用于內(nèi)存映射;

(4)voido_mbuf利用mmap進(jìn)行映射的幀信息,實(shí)際上是輸入到攝像頭存儲(chǔ)器緩沖中的幀信息,包括size(幀的大?。?、frAMEs(最多支持的幀數(shù))、offsets(每幀相對(duì)基址的偏移)。

系統(tǒng)在采集圖像之前,需要初始化這些數(shù)據(jù)結(jié)構(gòu)中的參數(shù)值,系統(tǒng)才能夠按照要求采集圖像數(shù)據(jù)。

在USB攝像頭被驅(qū)動(dòng)后,只需要再編寫一個(gè)對(duì)視頻流采集的應(yīng)用程序就可以了。根據(jù)嵌入式系統(tǒng)開發(fā)特征,先在宿主機(jī)上編寫應(yīng)用程序,再使用交叉編譯器進(jìn)行編譯鏈接,生成在目標(biāo)平臺(tái)的可執(zhí)行文件。宿主機(jī)與目標(biāo)板通信采用打印終端的方式進(jìn)行交叉調(diào)試,成功后移植到目標(biāo)平臺(tái)。

V4L圖像采集編程流程:

(1)打開視頻設(shè)備;

(2)讀取設(shè)備信息;

(3)更改設(shè)備當(dāng)前設(shè)置;

(4)視頻采集得到圖像信息;



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉