嵌入式Linux視頻采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
在本系統(tǒng)中,程序主要用到的一些系統(tǒng)調(diào)用函數(shù)如下:open(“/dev/video0”,O_RDWR):設(shè)備的打開(kāi)。
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)打開(kāi)攝像頭首先對(duì)上面提到的類進(jìn)行初始化,接下來(lái)利用系統(tǒng)調(diào)用函數(shù)_fd=open(“devfile”,O_RDWR),該函數(shù)的功能是打開(kāi)參數(shù)devfile指定的設(shè)備,對(duì)于攝像頭用設(shè)備文件名“/dev/video0”表示,_fd是設(shè)備打開(kāi)后返回的文件描述符,以后可以直接使用它來(lái)對(duì)設(shè)備文件進(jìn)行操作。
2)獲取攝像頭參數(shù)通過(guò)ioctl(_fd,VIDIOCGCAP,capability)函數(shù)來(lái)讀取structvideo_capability結(jié)構(gòu)中有關(guān)攝像頭的信息。ioctl(int_fd,intcmd,。。。)主要是用來(lái)控制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()方式通過(guò)把設(shè)備文件映射到內(nèi)存,繞過(guò)了內(nèi)核緩沖區(qū),加速了I/O訪問(wèn)。完成內(nèi)存映射之后,就可以用mmap()方式實(shí)現(xiàn)對(duì)內(nèi)存映射區(qū)域視頻數(shù)據(jù)的單幀采集。此方式下真正做視頻截取的為VIDIOCMCAPTURE,調(diào)用函數(shù)ioctl(_fd,VIDIOCMCAPTURE,mmap),激活設(shè)備并真正開(kāi)始一幀圖像的截取,是非阻塞的,接著調(diào)用ioctl(_fd,VIDIOCSYNC,frame)函數(shù)等待一幀圖像截取結(jié)束,成功返回表示一幀截取已完成,接著可以做下一次的VIDIOCMCAPTURE操作。
經(jīng)過(guò)上述的幾個(gè)過(guò)程,系統(tǒng)完成了對(duì)USB攝像頭的驅(qū)動(dòng)、對(duì)視頻數(shù)據(jù)的采集工作,捕獲到的視頻幀被映射到內(nèi)存區(qū)域,如果要對(duì)視頻數(shù)據(jù)進(jìn)行壓縮等處理工作則可通過(guò)訪問(wèn)內(nèi)存映射區(qū)域進(jìn)行。
5結(jié)語(yǔ)作為網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的一部分,本方案基于目前市場(chǎng)上主流的ARM處理器與嵌入式Linux操作系統(tǒng),實(shí)現(xiàn)了視頻數(shù)據(jù)的實(shí)時(shí)采集,整個(gè)系統(tǒng)數(shù)字化、網(wǎng)絡(luò)化程度高,與傳統(tǒng)的采集系統(tǒng)相比有較大優(yōu)勢(shì)。經(jīng)辦公室局域網(wǎng)測(cè)試,該系統(tǒng)實(shí)時(shí)性好、穩(wěn)定可靠、圖像質(zhì)量也比較優(yōu)越,可廣泛應(yīng)用在交通、銀行、工業(yè)監(jiān)控及視頻會(huì)議等眾多領(lǐng)域。目前該項(xiàng)目產(chǎn)生的經(jīng)濟(jì)效益約為20萬(wàn)元。
本文作者創(chuàng)新點(diǎn):設(shè)計(jì)了一個(gè)基于嵌入式Linux的視頻采集系統(tǒng),詳細(xì)介紹了Video4Linux下USB攝像頭驅(qū)動(dòng)和視頻采集程序的實(shí)現(xiàn)過(guò)程。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論