<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于S3C2410的嵌入式視頻采集系統(tǒng)設(shè)計(jì)(二)

          基于S3C2410的嵌入式視頻采集系統(tǒng)設(shè)計(jì)(二)

          作者: 時(shí)間:2013-05-26 來源:網(wǎng)絡(luò) 收藏
          通過調(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所示。

            基于S3C2410的嵌入式視頻采集系統(tǒng)設(shè)計(jì)(二)

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

            Video4Linux,簡稱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):

            基于S3C2410的嵌入式視頻采集系統(tǒng)設(shè)計(jì)(二)

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

           ?。?)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(深度)等;

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

           ?。?)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è)備;

           ?。?)讀取設(shè)備信息;

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

           ?。?)得到圖像信息;

           ?。?)對(duì)采集到的圖像進(jìn)行處理;

           ?。?)關(guān)閉視頻設(shè)備。
          本文編寫采集程序是在安裝Linux操作系統(tǒng)的宿主機(jī)PC機(jī)上進(jìn)行的,之后再移植到開發(fā)板上。下面是具體論述。

            之前我們講到了在V4L中定義的主要數(shù)據(jù)結(jié)構(gòu)及其功能。對(duì)應(yīng)著這些內(nèi)容,我們需要對(duì)這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行定義,以抽象化一個(gè)視頻設(shè)備。以下是具體的定義內(nèi)容:

            基于S3C2410的嵌入式視頻采集系統(tǒng)設(shè)計(jì)(二)

            攝像頭、采集圖像和關(guān)閉攝像頭的操作。采集程序中定義了如下的函數(shù),以實(shí)現(xiàn)前面講到的功能。

            intinit_videoIn(structvdIn*vd,char*device,intwidth,intheight,intgrabmethod);初始化攝像頭設(shè)備。*vd包含了之前定義的數(shù)據(jù)結(jié)構(gòu)中的基本信息。另外還要對(duì)攝像頭采集圖像的大小、采集模式等參數(shù)進(jìn)行賦值。

            intv4lGrab(structvdIn*vd,char*filename);采集圖像主程序。*filename為圖像的文件名,我們可以通過對(duì)文件名的設(shè)置來確定圖像保存的位置。

            intclose_v4l(structvdIn*vd);關(guān)閉攝像頭intget_jpegsize(unsignedchar*buf,intinsize);采集圖像的大小。

            因?yàn)槲覀兪峭ㄟ^調(diào)用采集主函數(shù)intv4lGrab(structvdIn*vd,char*filename)來實(shí)現(xiàn)圖像的采集和保存的,所以需要詳細(xì)的講解一下該函數(shù)的構(gòu)成。以下是該函數(shù)的具體內(nèi)容:

            基于S3C2410的嵌入式視頻采集系統(tǒng)設(shè)計(jì)(二)

            首先,我們需要定義幾個(gè)參數(shù),如下:

            FILE*fp;定義一個(gè)文件類型指針,指向我們采集到的圖像文件intlen;

            定義一個(gè)整型變量,記錄從內(nèi)存中讀取的數(shù)據(jù)量intsize;

            定義一個(gè)整型變量,指明一幀圖像的數(shù)據(jù)量interreur=0;定義一個(gè)整型變量,指明運(yùn)行時(shí)的錯(cuò)誤返回值intjpegsize;定義一個(gè)整型變量,指明我們需要的圖像大小。

            接著我們調(diào)用read(vd-》fd,vd-》pFramebuffer,size)函數(shù),把存放于圖像緩沖區(qū)的數(shù)據(jù)讀入到指定的臨時(shí)文件中。之后根據(jù)我們對(duì)圖像的大小、亮度、對(duì)比度等要求轉(zhuǎn)化之前采集到的圖像數(shù)據(jù),最后我們打開一個(gè)文件,把圖像數(shù)據(jù)寫入到該文件中并保存。

            4 結(jié)論

            本文設(shè)計(jì)了一種系統(tǒng),該系統(tǒng)小巧,并且在保證當(dāng)前信息完整的情況下,盡可能少的占用存儲(chǔ)容量,實(shí)現(xiàn)了該系統(tǒng)的圖像采集、存儲(chǔ)和重現(xiàn)功能。在硬件規(guī)劃上,采用實(shí)用簡單的USB接口通信。且系統(tǒng)中預(yù)留了豐富的外設(shè)接口,便于今后的擴(kuò)展升級(jí)。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          關(guān)鍵詞: S3C2410 嵌入式 視頻采集

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();