當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]嵌入式Linux視頻采集系統(tǒng)的設(shè)計與實(shí)現(xiàn)

摘要:本文以嵌入式微處理器S3C2410為核心,對Linux下的視頻采集技術(shù)進(jìn)行了詳細(xì)分析。信號采集使用USB攝像頭,介紹了Video4Linux編程接口的使用方法,給出了Linux下視頻采集的實(shí)現(xiàn)過程。

1引言多媒體通信技術(shù)的發(fā)展為信息的獲取和傳輸提供了豐富的手段,視頻采集是其中不可缺少的重要組成部分。視頻采集的手段多種多樣,隨著人們對降低系統(tǒng)成本和提高可靠性的迫切需求,基于嵌入式的視頻采集系統(tǒng)成為新的研發(fā)熱點(diǎn)。本方案以S3C2410微控制器作為硬件平臺,通過移植具有實(shí)現(xiàn)硬件功能的Linux操作系統(tǒng),實(shí)現(xiàn)了對視頻數(shù)據(jù)的實(shí)時采集和存儲。

2系統(tǒng)構(gòu)成系統(tǒng)平臺采用三星公司的處理器S3C2410,該處理器內(nèi)部集成了ARM920T處理器核,為32位微控制器,帶獨(dú)立的16KB指令Cache和16KB數(shù)據(jù)Cache,LCD控制器,RAM控制器,NANDFlash控制器,并行I/O口,8路10位ADC,主頻最高可達(dá)203MHZ。在處理器豐富資源的基礎(chǔ)上進(jìn)行了相關(guān)的配置和擴(kuò)展,平臺配置了64Mbytes8位的NAND閃存和64Mbytes32位的SDRAM,通過以太網(wǎng)控制器芯片CS8900A擴(kuò)展了一個網(wǎng)口,另外引出一個串行接口和兩個HOST/DEVICEUSB接口。通過在USB接口上外接一個USB攝像頭,將采集到的視頻圖像數(shù)據(jù)放入存儲器緩沖區(qū)中,或者用JPEG壓縮處理程序處理緩沖區(qū)的圖像數(shù)據(jù)并保存,數(shù)據(jù)可存儲在NAND閃存中等待遠(yuǎn)程主機(jī)的訪問,也可通過CS8900A擴(kuò)展的網(wǎng)絡(luò)接口將視頻數(shù)據(jù)直接發(fā)送到遠(yuǎn)程網(wǎng)中的控制主機(jī)上。圖1為系統(tǒng)的硬件圖,其中USB口接數(shù)碼攝像頭,串口、網(wǎng)口作為輸入輸出設(shè)備,NAND閃存和SDRAM作為存儲設(shè)備,JTAG口用來把嵌入式Linux操作系統(tǒng)和應(yīng)用程序燒寫進(jìn)Flash存儲器。

圖1視頻采集系統(tǒng)硬件框圖3嵌入式Linux概述Linux具有內(nèi)核小,效率高,源代碼開放,微內(nèi)核直接提供網(wǎng)絡(luò)支持等優(yōu)點(diǎn)。在中低端嵌入式網(wǎng)絡(luò)設(shè)備的應(yīng)用中,比起VxWorks等其他操作系統(tǒng)有許多優(yōu)勢,逐漸成為嵌入式操作系統(tǒng)的主流。但嵌入式系統(tǒng)的硬件資源畢竟有限,不能直接將其作為嵌入式硬件平臺上的操作系統(tǒng),需要針對具體的應(yīng)用進(jìn)行內(nèi)核的配置和裁減,使整個系統(tǒng)能夠存放到容量較小的Flash中。Linux的動態(tài)模塊加載方式使Linux的裁剪極為方便,高度模塊化使得添加和刪減非常容易。

系統(tǒng)采用交叉編譯調(diào)試,PC機(jī)作為宿主機(jī),對應(yīng)的嵌入式系統(tǒng)平臺叫做目標(biāo)板。嵌入式Linux提供了一套完整的工具鏈(toolchain),它利用GNU的gcc做編譯器,用gdb、xgdb做調(diào)試工具,能夠很方便地實(shí)現(xiàn)從操作系統(tǒng)內(nèi)核到用戶態(tài)應(yīng)用軟件各個級別的調(diào)試。嵌入式Linux的移植過程如圖2所示,在此不作具體闡述。

圖2Linux系統(tǒng)開發(fā)流程圖4軟件設(shè)計4。1攝像頭驅(qū)動在Linux環(huán)境下,所有的外設(shè)都被看成一類稱為“設(shè)備文件”的特殊文件,系統(tǒng)中所有硬件都可以用一個特殊的設(shè)備文件來表示。在本系統(tǒng)中,USB攝像頭被作為一種字符設(shè)備來對待,用/dev/video0來表示。相對于應(yīng)用程序來講,硬件是不透明的,設(shè)備驅(qū)動程序屏蔽了硬件在實(shí)現(xiàn)上的細(xì)節(jié),應(yīng)用程序必須依靠相應(yīng)驅(qū)動程序中定義的通信接口實(shí)現(xiàn)對硬件的操作。

Video4Linux(簡稱V4L)是Linux系統(tǒng)關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動程序,它為針對視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù)。對于USB接口攝像頭,驅(qū)動程序中提供了基本的I/O操作接口函數(shù)open、read、write、close的實(shí)現(xiàn),對中斷的處理實(shí)現(xiàn),內(nèi)存映射功能以及對I/O通道的控制接口函數(shù)ioctl的實(shí)現(xiàn)等,并在structfile_operations數(shù)據(jù)結(jié)構(gòu)中定義了這些函數(shù),當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行例如read、write等操作時,嵌入式Linux內(nèi)核通過strcutfile_operations數(shù)據(jù)結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。

驅(qū)動程序基本結(jié)構(gòu)如下:1)驅(qū)動的注冊與注銷通過在驅(qū)動程序的初始化過程中調(diào)用register_chrdev()或register_blkdev()函數(shù)來添加驅(qū)動程序并分配主設(shè)備號;通過調(diào)用unregister_chrdev()或unregister_blkdev()函數(shù)從內(nèi)核中注銷設(shè)備,同時釋放其占用的主設(shè)備號。

2)設(shè)備文件的打開與釋放調(diào)用file_operations結(jié)構(gòu)體中的Open()函數(shù)打開設(shè)備;調(diào)用file_operations結(jié)構(gòu)中的函數(shù)release()關(guān)閉設(shè)備。

3)設(shè)備的讀/寫操作使用函數(shù)read()和write()完成對設(shè)備的讀和寫。

4)設(shè)備的控制操作通過設(shè)備驅(qū)動程序中的函數(shù)ioctl()來完成。ioctl()的用法與具體設(shè)備密切關(guān)聯(lián),因此需要根據(jù)設(shè)備的情況進(jìn)行具體分析。

5)設(shè)備的中斷和輪流查詢處理由于有些硬件設(shè)備不支持中斷,那么在對其讀寫時需要輪流查詢設(shè)備狀態(tài),以便決定是否繼續(xù)進(jìn)行數(shù)據(jù)傳輸。如果硬件設(shè)備支持中斷,則可以按中斷方式進(jìn)行操作。

4。2視頻采集在USB攝像頭驅(qū)動被加載成功后,還要編寫視頻流采集應(yīng)用程序。攝像頭中各種I/O口的控制依靠Video4Linux提供的應(yīng)用程序接口函數(shù)實(shí)現(xiàn),主要有Open、Read、Write等。V4L下的視頻采集工作原理如圖3。在本系統(tǒng)中,將有關(guān)攝像頭的各種數(shù)據(jù)和結(jié)構(gòu)封裝成了一個類。

圖3V4L下視頻采集工作模型4。2。1Video4Linux定義的數(shù)據(jù)結(jié)構(gòu)structvideo_capabilitycapability:包含攝像頭設(shè)備的基本信息(設(shè)備名稱、支持的最大最小分辨率、信號源信息等),分別對應(yīng)著結(jié)構(gòu)體中成員變量name[32],maxwidth,maxheight,minwidth,minheight,channels(信號源個數(shù)),type等。

structvideo_windowwindow:包含采集到圖像的各種屬性,如brightness(亮度)、hue(色調(diào))、color(顏色)、contrast(對比度)、whiteness(色度)、depth(深度)等。

structvideo_channelchannel:關(guān)于各個信號源的屬性,如channel(信號源編號)、name(名稱)、tuners(信號源通道)、type(類型)、Norm(制式)等。

structvideo_picturepicture:包含關(guān)于capturearea的信息。

structvideo_mmapmmap:用于內(nèi)存映射。

structvideo_mbufmbuf:利用mmap進(jìn)行映射的幀信息,即輸入到攝像頭存儲緩沖區(qū)中的幀信息,包括size(幀的大小)、frames(最多支持的幀數(shù))、offsets(每幀相對基址的偏移)。[!--empirenews.page--]

在本系統(tǒng)中,程序主要用到的一些系統(tǒng)調(diào)用函數(shù)如下:open(“/dev/video0”,O_RDWR):設(shè)備的打開。

close(fd):設(shè)備的關(guān)閉。

mmap(voidaddr,size_tlen,intprot,intflags,intfd,off_toffset):設(shè)備緩沖區(qū)到內(nèi)存空間的映射。

munmap(voidaddr,size_tlen):采集工作結(jié)束后取消mmap和mbuf的綁定。

ioctl(intfd,intcmd,。。。):控制I/O通道。

4。2。2視頻采集程序的實(shí)現(xiàn)1)打開攝像頭首先對上面提到的類進(jìn)行初始化,接下來利用系統(tǒng)調(diào)用函數(shù)_fd=open(“devfile”,O_RDWR),該函數(shù)的功能是打開參數(shù)devfile指定的設(shè)備,對于攝像頭用設(shè)備文件名“/dev/video0”表示,_fd是設(shè)備打開后返回的文件描述符,以后可以直接使用它來對設(shè)備文件進(jìn)行操作。

2)獲取攝像頭參數(shù)通過ioctl(_fd,VIDIOCGCAP,&capability)函數(shù)來讀取structvideo_capability結(jié)構(gòu)中有關(guān)攝像頭的信息。ioctl(int_fd,intcmd,。。。)主要是用來控制I/O通道,函數(shù)成功返回后使用printf函數(shù)得到各成員分量信息,接著調(diào)用ioctl(_fd,VIDIOCGWIN,&window)和ioctl(_fd,VIDIOCGPICT,&picture)函數(shù)讀取structvideo_window信息和攝像頭緩沖區(qū)中的video_picture圖像信息。

3)設(shè)置攝像頭緩沖區(qū)中圖像參數(shù)在采集攝像頭視頻數(shù)據(jù)前,可根據(jù)需求修改圖像參數(shù)如分辨率等,具體方法為先給分量賦新值,再調(diào)用函數(shù)ioctl(_fd,VIDIOCSPICT,&picture)。

4)視頻數(shù)據(jù)的讀取與read()方式相比,mmap()方式通過把設(shè)備文件映射到內(nèi)存,繞過了內(nèi)核緩沖區(qū),加速了I/O訪問。完成內(nèi)存映射之后,就可以用mmap()方式實(shí)現(xiàn)對內(nèi)存映射區(qū)域視頻數(shù)據(jù)的單幀采集。此方式下真正做視頻截取的為VIDIOCMCAPTURE,調(diào)用函數(shù)ioctl(_fd,VIDIOCMCAPTURE,&mmap),激活設(shè)備并真正開始一幀圖像的截取,是非阻塞的,接著調(diào)用ioctl(_fd,VIDIOCSYNC,&frame)函數(shù)等待一幀圖像截取結(jié)束,成功返回表示一幀截取已完成,接著可以做下一次的VIDIOCMCAPTURE操作。

經(jīng)過上述的幾個過程,系統(tǒng)完成了對USB攝像頭的驅(qū)動、對視頻數(shù)據(jù)的采集工作,捕獲到的視頻幀被映射到內(nèi)存區(qū)域,如果要對視頻數(shù)據(jù)進(jìn)行壓縮等處理工作則可通過訪問內(nèi)存映射區(qū)域進(jìn)行。

5結(jié)語作為網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的一部分,本方案基于目前市場上主流的ARM處理器與嵌入式Linux操作系統(tǒng),實(shí)現(xiàn)了視頻數(shù)據(jù)的實(shí)時采集,整個系統(tǒng)數(shù)字化、網(wǎng)絡(luò)化程度高,與傳統(tǒng)的采集系統(tǒng)相比有較大優(yōu)勢。經(jīng)辦公室局域網(wǎng)測試,該系統(tǒng)實(shí)時性好、穩(wěn)定可靠、圖像質(zhì)量也比較優(yōu)越,可廣泛應(yīng)用在交通、銀行、工業(yè)監(jiān)控及視頻會議等眾多領(lǐng)域。目前該項目產(chǎn)生的經(jīng)濟(jì)效益約為20萬元。

本文作者創(chuàng)新點(diǎn):設(shè)計了一個基于嵌入式Linux的視頻采集系統(tǒng),詳細(xì)介紹了Video4Linux下USB攝像頭驅(qū)動和視頻采集程序的實(shí)現(xiàn)過程。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉