嵌入式課程設(shè)計(jì)報(bào)告_第1頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告_第2頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告_第3頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告_第4頁(yè)
嵌入式課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

嵌入式課程設(shè)計(jì)報(bào)告一、課程設(shè)計(jì)目的1.1掌握l(shuí)inux開發(fā)環(huán)境的搭建;1.2鞏固嵌入式交叉編譯的開發(fā)思想;1.3掌握嵌入式GUI軟件設(shè)計(jì)技。,.

課程設(shè)計(jì)規(guī)定輸入信號(hào)為1路AV視頻信號(hào),規(guī)定系統(tǒng)能對(duì)1路輸入信號(hào)進(jìn)行實(shí)時(shí)采集,數(shù)字化解決,壓縮,存儲(chǔ),要保證一定的錄像質(zhì)量.根據(jù)設(shè)計(jì)題目的規(guī)定,選擇擬定ARM芯片型號(hào),視頻采集芯片型號(hào),完畢系統(tǒng)硬件設(shè)計(jì)和程序設(shè)計(jì).課程設(shè)計(jì)內(nèi)容

設(shè)計(jì)原理ARM10系列微解決器為低功耗的32位RISC解決器,最適合用于對(duì)價(jià)位和功耗要求較高的消費(fèi)類應(yīng)用.ARM10系列微解決器的重要應(yīng)用領(lǐng)域?yàn)?工業(yè)控制,Internet設(shè)備,調(diào)制解調(diào)器設(shè)備,移動(dòng)電話等多種多媒體和嵌入式應(yīng)用.視頻監(jiān)控系統(tǒng)總體設(shè)計(jì)一方面需要對(duì)系統(tǒng)進(jìn)行總體規(guī)劃,將系統(tǒng)劃提成幾個(gè)功能模塊,擬定各個(gè)模塊的實(shí)現(xiàn)方法.整個(gè)視頻監(jiān)控系統(tǒng)采用C/S結(jié)構(gòu),從主體上分為兩部分:服務(wù)器端和客戶端.服務(wù)器端重要涉及S3C4510平臺(tái)上運(yùn)營(yíng)的采集,壓縮,傳輸程序,客戶端是PC機(jī)上運(yùn)營(yíng)的接受,解壓,回放程序.視頻監(jiān)控終端從攝像頭捕獲實(shí)時(shí)的視頻信息,壓縮之后通過(guò)以太網(wǎng)傳輸?shù)揭曨l監(jiān)控服務(wù)器上.視頻圖像采集和打包發(fā)送在服務(wù)器端完畢,圖像的接受解包和回放將在客戶端完畢.采集圖像數(shù)據(jù)壓縮打包發(fā)送接受系統(tǒng)的硬件設(shè)計(jì)系統(tǒng)采用模塊化設(shè)計(jì)方案,重要涉及以下幾個(gè)模塊:主控制器模塊,儲(chǔ)存電路模塊,外圍接口電路模塊,電源和復(fù)位電路,S3C4510主控器模塊主控器模塊是整個(gè)系統(tǒng)的核心,采用的S3C4510B解決器.Samsung公司的S3C4510B是基于以太網(wǎng)應(yīng)用系統(tǒng)的高性價(jià)比16/32位RISC微控制器,內(nèi)含一個(gè)由ARM公司設(shè)計(jì)的16/32位ARM7TDMIRISC解決器核,ARM7TDMI為低功耗,高性能的16/32核,系統(tǒng)存儲(chǔ)電路模塊主控器還需一些外圍存儲(chǔ)單元如NandFlash,和SDRAM.NandFlash中包含Linux的Bootloader,系統(tǒng)內(nèi)核,文獻(xiàn)系統(tǒng),應(yīng)用程序以及環(huán)境變量和系統(tǒng)配置文獻(xiàn)等;SDRAM讀寫速度快,系統(tǒng)運(yùn)營(yíng)時(shí)把它作為內(nèi)存單元使用.外圍電路模塊外圍電路重要是以下幾個(gè)電路,復(fù)位電路圖,電源電路圖以及JTAG電路,三、課程設(shè)計(jì)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀、PC機(jī)、ov511攝像頭;軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0、MINICOM、AMR-LINUX開發(fā)環(huán)境。四、設(shè)計(jì)方案本次課程設(shè)計(jì)采用arm10開發(fā)平臺(tái)。該平臺(tái)采用Samsung公司的解決器S3C2410。該解決器內(nèi)部集成了ARM公司ARM920T解決器核的32位微控制器,資源豐富,帶獨(dú)立的16KB的指令Cache和16KB數(shù)據(jù)Cache、LCD控制器、RAM控制器、NAND閃存控制器、3路UART、4路DMA、4路帶PWM的Timer、并行I/O口、8路10位ADC、TouchScreen接口、I2C接口、I2S接口、2個(gè)USB接口控制器、2路SPI,主頻最高可達(dá)203MHz。在解決器豐富資源的基礎(chǔ)上,還進(jìn)行了相關(guān)的配置和擴(kuò)展,平臺(tái)配置了16MB16位的Flash和64MB32位的SDRAM。通過(guò)以太網(wǎng)控制器芯片DM9000E擴(kuò)展了一個(gè)網(wǎng)口,此外引出了一個(gè)HOSTUSB接口。通過(guò)在USB接口上外接一個(gè)帶USB口的攝像頭,將采集到的視頻圖像數(shù)據(jù)放入輸入緩沖區(qū)中。然后,對(duì)緩沖區(qū)中的視頻數(shù)據(jù)進(jìn)行壓縮成幀,并把每一幀圖片在網(wǎng)頁(yè)中顯示出來(lái),每秒鐘刷新兩次,得到一個(gè)動(dòng)態(tài)的視頻界面,然后通過(guò)局域網(wǎng)訪問(wèn)該主機(jī)的網(wǎng)頁(yè),得到網(wǎng)絡(luò)視頻信息。本次課程設(shè)計(jì)重要是完畢得到視頻圖片及網(wǎng)頁(yè)刷新的過(guò)程。本次設(shè)計(jì)規(guī)定在局域網(wǎng)環(huán)境中進(jìn)行。五、開發(fā)環(huán)境配置5.1攝像頭驅(qū)動(dòng)加載在Linux下,設(shè)備驅(qū)動(dòng)程序可以當(dāng)作Linux內(nèi)核與外部設(shè)備之間的接口。設(shè)備驅(qū)動(dòng)程序向應(yīng)用程序屏蔽了硬件實(shí)現(xiàn)了的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文獻(xiàn)同樣來(lái)操作外部設(shè)備,可以使用和操作文獻(xiàn)中相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口函數(shù)來(lái)完畢對(duì)硬件設(shè)備的打開、關(guān)閉、讀寫和I/O控制操作,而驅(qū)動(dòng)程序的重要任務(wù)也就是要實(shí)現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。本系統(tǒng)平臺(tái)使用的嵌入式arm-Linux系統(tǒng)在內(nèi)核重要功能上與Linux操作系統(tǒng)沒本質(zhì)區(qū)別。Video4Linux(簡(jiǎn)V4L)是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),它為針對(duì)視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù),這些視頻設(shè)備涉及現(xiàn)今市場(chǎng)上流行的TV卡、視頻捕獲卡和USB攝像頭等。ov511的驅(qū)動(dòng),2.4的內(nèi)核中就有,所以我們只需重新編譯內(nèi)核,將下邊的選項(xiàng)都選上,然后重新燒寫內(nèi)核就可以了。也就是直接靜態(tài)加載。

(1)在armlinux的kernel目錄下makemenuconfig。

(2)一方面(*)選擇Multimediadevice->下的Videoforlinux。加載video4linux模塊,為視頻采集設(shè)備提供編程接口;

(3)然后在usbsupport->目錄下(*)選擇supportforusb和usbcameraov511support。這使得在內(nèi)核中加入了對(duì)采用OV511接口芯片的USB數(shù)字?jǐn)z像頭的驅(qū)動(dòng)支持。

(4)保存配置退出。

(5)makedep;makezImage就生成了帶有ov511驅(qū)動(dòng)的內(nèi)核。

接下來(lái)就通過(guò)uboot將內(nèi)核燒到flash里去。這時(shí)你將攝像頭插上,系統(tǒng)就會(huì)提醒發(fā)現(xiàn)攝像頭-ov511+,這說(shuō)明驅(qū)動(dòng)正常。:-),驅(qū)動(dòng)加載就成功了。5.2安裝jpeg庫(kù)在地址/graphics/jpeg/jpegsrc.v6b.tar.gz中下載jpeg庫(kù)的壓縮包。

#tar-zxvfjpegsrc.v6b.tar.gz//解壓庫(kù)文獻(xiàn)

#cdjpeg-6b

#./configure--prefix=/usr/local/jpeg6--enable-shared//生成MAKEFILE文獻(xiàn)#make//編譯安裝文獻(xiàn)#mkdir/usr/local/jpeg6#mkdir/usr/local/jpeg6/include#mkdir/usr/local/jpeg#mkdir/usr/local/jpeg/lib#mkdir/usr/local/jpeg/bin#mkdir/usr/local/jpeg/man#mkdir/usr/local/jpeg/man/man1//建立生成安裝文獻(xiàn)的目錄#makeinstall-lib/生成安裝文獻(xiàn)#makeinstall//開始安裝文獻(xiàn)設(shè)計(jì)過(guò)程6.1硬件設(shè)計(jì)系統(tǒng)的主體設(shè)計(jì)思想是將視頻前端和嵌入式Web服務(wù)器整合在一起,攝像頭通過(guò)USB接口和嵌入式系統(tǒng)板的USBHOST相連,攝像頭采集來(lái)的視頻信號(hào)通過(guò)壓縮后,通過(guò)內(nèi)部總線傳送到內(nèi)置的Web服務(wù)器,客戶端采用瀏覽器/服務(wù)器結(jié)構(gòu)(即B/S結(jié)構(gòu)),可以通過(guò)IE瀏覽器訪問(wèn)視頻Web服務(wù)器,以便查看所監(jiān)控的視頻畫面,并且,用戶還可以控制平臺(tái)對(duì)鏡頭的動(dòng)作或?qū)ο到y(tǒng)進(jìn)行配置控制。網(wǎng)絡(luò)視頻采集系統(tǒng)是由視頻監(jiān)控終端和視頻監(jiān)控中心組成,終端使用嵌入式系統(tǒng)加上USB攝像頭,在Linux操作系統(tǒng)上運(yùn)營(yíng)USB攝像頭的驅(qū)動(dòng)和相應(yīng)的視頻采集解決傳輸程序,得到視頻監(jiān)控畫面,并畫面通過(guò)網(wǎng)絡(luò)傳輸,監(jiān)控中心運(yùn)營(yíng)監(jiān)控軟件端,通過(guò)Internet瀏覽器來(lái)瀏覽終端送來(lái)的監(jiān)控畫面,其硬件連接圖如下所示:網(wǎng)絡(luò)視頻采集硬件連接圖從圖中可以看出,PC機(jī)部分可以直接采用IE瀏覽器,不需要在PC機(jī)上運(yùn)營(yíng)其他的軟件,重要設(shè)計(jì)工作是開發(fā)板端的設(shè)計(jì)。視頻監(jiān)控終端重要有兩個(gè)部分組成,硬件部分涉及攝像頭和開發(fā)平臺(tái)的選擇;軟件部分涉及系統(tǒng)級(jí)軟件(BootLoader,嵌入式操作系統(tǒng),USB驅(qū)動(dòng)程序)與用戶級(jí)軟件(應(yīng)用程序)。6.2軟件設(shè)計(jì)Video4linux為應(yīng)用程序提供了一系列的接口函數(shù),通過(guò)這些函數(shù),可以執(zhí)行打開、讀寫、關(guān)閉等基本操作。設(shè)備驅(qū)動(dòng)提供了read、write、open、close等函數(shù)的具體實(shí)現(xiàn),在內(nèi)核這些函數(shù)都可以調(diào)用。視頻采集流程圖如下所示:視頻采集流程圖運(yùn)用V4L編寫的視頻采集程序重要代碼如下,下列代碼包含采集編碼程序一些關(guān)鍵函數(shù)。程序中定義的數(shù)據(jù)結(jié)構(gòu)struct_v4l_struct{intfd;//保存打開視頻文獻(xiàn)的設(shè)備描述符structvideo_capabilitycapability;structvideo_picturepicture;structvideo_mmapmmap;structvideo_mbufmbuf;unsignedchar*map;//用于指向圖像數(shù)據(jù)的指針intframe_current;intframe_using[VIDEO_MAX_FRAME];//這兩個(gè)變量用于雙緩沖};typedefstruct_v4l_structv4l_device;這些數(shù)據(jù)結(jié)構(gòu)都是由Video4Linux支持的,它們的用途如下:*video_capability包含攝像頭的基本信息,例如設(shè)備名稱、支持的最大最小分辨率、信號(hào)源信息等;*voide_picture包含設(shè)備采集圖像的各種屬性,如brightness(亮度)、hue(色調(diào))、contrast(對(duì)比度)、whiteness(色度)、color(深度)等;*video_mmap用于內(nèi)存映射;*voido_mbuf運(yùn)用mmap進(jìn)行映射的幀信息,事實(shí)上是輸入到攝像頭存儲(chǔ)器緩沖中的幀信息,涉及size(幀的大?。?、frames(最多支持的幀數(shù))、offsets(每幀相對(duì)基址的偏移)。程序中用到的重要系統(tǒng)調(diào)用函數(shù)有:open("/dev/voideo0",intflags)、close(fd)、mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffset)、munmap(void*start,size_tlength)和ioctl(intfd,intcmd,…)。前面提到Linux系統(tǒng)中把設(shè)備當(dāng)作設(shè)備文獻(xiàn),在用戶空間可以通過(guò)標(biāo)準(zhǔn)的I/O系統(tǒng)調(diào)用函數(shù)操作設(shè)備文獻(xiàn),從而達(dá)成與設(shè)備通信交互的目的。當(dāng)然,在設(shè)備驅(qū)動(dòng)中要提供對(duì)這些函數(shù)的相應(yīng)支持。這里說(shuō)明一下ioctl(intfd,intcmd,…)函數(shù),它在用戶程序中用來(lái)控制I/O通道,其中,fd代表設(shè)備文獻(xiàn)描述符,cmd代表用戶程序?qū)υO(shè)備的控制命令,省略號(hào)一般是一個(gè)表達(dá)類型長(zhǎng)度的參數(shù),也可沒有。(2)采集程序?qū)崿F(xiàn)過(guò)程一方面打開視頻設(shè)備,攝像頭在系統(tǒng)中相應(yīng)的設(shè)備文獻(xiàn)為/dev/video0,采用系統(tǒng)調(diào)用函數(shù)grab_fd=open("/dev/video0",O_RDWR),grab_fd是設(shè)備打開后返回的文獻(xiàn)描述符(打開錯(cuò)誤返回-1),以后的系統(tǒng)調(diào)用函數(shù)就可使用它來(lái)對(duì)設(shè)備文獻(xiàn)進(jìn)行操作了。接著,運(yùn)用ioct1(grab_fd,VIDIOCGCAP,&grab_cap)函數(shù)讀取structvideo_capability中有關(guān)攝像頭的信息。該函數(shù)成功返回后,這些信息從內(nèi)核空間拷貝到用戶程序空間grab_cap各成員分量中,使用printf函數(shù)就可得到各成員分量信息,例如printf("maxheight=%d",grab_fd.maxheight)獲得最大垂直分辨率的大小。不規(guī)則用ioct1(grab_fd,VIDIOCGPICT,&grab_pic)函數(shù)讀取攝像頭緩沖中voideo_picture信息。在用戶空間程序中可以改變這些信息,具體方法為先給分量賦新值,再調(diào)用VIDIOCSPICTioct1函數(shù),例如:grab_fd.depth=3;if(ioct1(grab_fd,VIDIOCSPICT,&grab_pic)<0){perror("VIDIOCSPICT");return-1;};完畢以上初始化設(shè)備工作后,就可以對(duì)視頻圖像截取了,有兩種方法:一種是read()直接讀取;此外一種mmap()內(nèi)存映射。Read()通過(guò)內(nèi)核緩沖區(qū)來(lái)讀取數(shù)據(jù);而mmap()通過(guò)把設(shè)備文獻(xiàn)映射到內(nèi)存中,繞過(guò)了內(nèi)核緩沖區(qū),最快的磁盤訪問(wèn)往往還是慢于最慢的內(nèi)存訪問(wèn),所以mmap()方式加速了I/O訪問(wèn)。此外,mmap()系統(tǒng)調(diào)用使得進(jìn)程之間通過(guò)映射同一文獻(xiàn)實(shí)現(xiàn)共享內(nèi)存,各進(jìn)程可以像訪問(wèn)普通內(nèi)存同樣對(duì)文獻(xiàn)進(jìn)行訪問(wèn),訪問(wèn)時(shí)只需要使用指針而不用調(diào)用文獻(xiàn)操作函數(shù)。由于mmap()的以上優(yōu)點(diǎn),所以在程序?qū)崿F(xiàn)中采用了內(nèi)存映射方式,即mmap()方式。運(yùn)用mmap()方式視頻裁取具體進(jìn)行操作如下。①先使用ioct1(grab_fd,VIDIOCGMBUF,&grab_vm)函數(shù)獲得攝像頭存儲(chǔ)緩沖區(qū)的幀信息,之后修改voideo_mmap中的設(shè)立,例如重新設(shè)立圖像幀的垂直及水平分辨率、彩色顯示格式??蛇\(yùn)用如下語(yǔ)句grab_buf.height=240;grab_buf.width=320;字串8grab_buf.format=VIDEO_PALETTE_RGB24;②接著把攝像頭相應(yīng)的設(shè)備文獻(xiàn)映射到內(nèi)存區(qū),具體使用grab_data=(unsignedchar*)mmap(0,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grad_fd,0)操作。這樣設(shè)備文獻(xiàn)的內(nèi)容就映射到內(nèi)存區(qū),該映射內(nèi)容區(qū)可讀可寫并且不同進(jìn)程間可共享。該函數(shù)成功時(shí)返回映像內(nèi)存區(qū)的指針,挫敗時(shí)返回值為-1。下面對(duì)單幀采集和連續(xù)幀采集進(jìn)行說(shuō)明:*單幀采集。在上面獲取的攝像頭存儲(chǔ)緩沖區(qū)幀信息中,最多可支持的幀數(shù)(frames的值)一般為兩幀。對(duì)于單幀采集只需設(shè)立grab_buf.frame=0,即采集其中的第一幀,使用ioctl(grab_fd,VIDIOCMCAPTURE,&grab_buf)函數(shù),若調(diào)用成功,則激活設(shè)備真正開始一幀圖像的截取,是非阻塞的。接著使用ioct1(grab_fd,VIDIOCSYNC,&frame)函數(shù)鑒定該幀圖像是否截取完畢,成功返回表達(dá)截取完畢,之后就可把圖像數(shù)據(jù)保存成文獻(xiàn)的形式。測(cè)試與實(shí)現(xiàn)(1)仔細(xì)檢查設(shè)備的連接,打開電源;(2)在PC機(jī)上的瀏覽器中地址欄輸入開發(fā)板地址,網(wǎng)頁(yè)自動(dòng)跳到開發(fā)板的首頁(yè);(3)在頁(yè)面上可見攝像頭采集到的視頻信息。經(jīng)驗(yàn)證,本次設(shè)計(jì)基本達(dá)成設(shè)計(jì)規(guī)定。設(shè)計(jì)心得本次課程設(shè)計(jì)通過(guò)運(yùn)用嵌入式技術(shù),圖形解決技術(shù)等,完畢了網(wǎng)絡(luò)視頻的采集過(guò)程,進(jìn)一步熟悉了交叉編譯的開發(fā)方法,在開發(fā)的過(guò)程中,碰到很多問(wèn)題,如驅(qū)動(dòng)無(wú)法加載,程序調(diào)試犯錯(cuò)等,通過(guò)重新編譯開發(fā)板內(nèi)核、安裝圖形解決庫(kù)等,解決了多個(gè)問(wèn)題,在解決問(wèn)題的過(guò)程中,我們對(duì)嵌入式的開發(fā)過(guò)程多了一些細(xì)節(jié)的結(jié)識(shí),為以后的連續(xù)學(xué)習(xí)鞏固了基礎(chǔ)。在設(shè)計(jì)過(guò)程中,我們分工合作,一起進(jìn)步,不只從理論上對(duì)嵌入式有了更深的結(jié)識(shí),同時(shí)從實(shí)踐中驗(yàn)證了學(xué)習(xí)的理論知識(shí),對(duì)嵌入式有了更深一步的結(jié)識(shí)。源程序清單#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ioctl.h>#include<sys/mman.h>#include<errno.h>#include<linux/videodev.h>#include<jpeglib.h>#include<unistd.h>#include<math.h>#include<errno.h>#include<string.h>#include<signal.h>#include<pthread.h>#include<sys/time.h>#include<sys/mman.h>#include<getopt.h>#defineWIDTH640#defineHEIGHT480#defineDEFAULT_DEVICE"/dev/v4l/video1"intwrite_jpeg(char*filename,unsignedchar*buf,intquality,intwidth,intheight,intgray){structjpeg_compress_structcinfo;structjpeg_error_mgrjerr;FILE*fp;inti;unsignedchar*line;intline_length;if(NULL==(fp=fopen(filename,"w"))){fprintf(stderr,"grab:can'topen%s:%s\n",filename,strerror(errno));return-1;}cinfo.err=jpeg_std_error(&jerr);jpeg_create_compress(&cinfo);jpeg_stdio_dest(&cinfo,fp);cinfo.image_width=width;cinfo.image_height=height;cinfo.input_components=gray?1:3;cinfo.in_color_space=gray?JCS_GRAYSCALE:JCS_RGB;jpeg_set_defaults(&cinfo);jpeg_set_quality(&cinfo,quality,TRUE);jpeg_start_compress(&cinfo,TRUE);line_length=gray?width:width*3;for(i=0,line=buf;i<height;i++,line+=line_length)jpeg_write_scanlines(&cinfo,&line,1);jpeg_finish_compress(&(cinfo));jpeg_destroy_compress(&(cinfo));fclose(fp);/////////////////////////////////////////////////////////////////////charfn1[30]="/var/www/pic001.jpg";charfn2[30]="/var/www/pic002.jpg";if(NULL==(fp=fopen(fn1,"r"))){fclose(fp);remove(fn1);}rename(fn2,fn1);/////////////////////////////////////////////////////////////////////return0;}//這個(gè)函數(shù)很通用,它的作用是把buf中的數(shù)據(jù)壓縮成jpeg格式。struct_v4l_struct{intfd;//保存打開視頻文獻(xiàn)的設(shè)備描述符structvideo_capabilitycapability;structvideo_picturepicture;structvideo_mmapmmap;structvideo_mbufmbuf;unsignedchar*map;//用于指向圖像數(shù)據(jù)的指針intframe_current;intframe_using[VIDEO_MAX_FRAME];//這兩個(gè)變量用于雙緩沖};typedefstruct_v4l_structv4l_device;externintv4l_open(char*,v4l_device*);externintv4l_close(v4l_device*);externintv4l_get_capability(v4l_device*);externintv4l_get_picture(v4l_device*);externintv4l_get_mbuf(v4l_device*);externintv4l_set_picture(v4l_device*,int,int,int,int,int);externintv4l_grab_picture(v4l_device*,unsignedint);externintv4l_mmap_init(v4l_device*);externintv4l_grab_init(v4l_device*,int,int,int);externintv4l_grab_frame(v4l_device*,int);externintv4l_grab_sync(v4l_device*);intv4l_open(char*dev,v4l_device*vd){dev=DEFAULT_DEVICE;if((vd->fd=open(dev,O_RDWR))<0){perror("v4l_open");return-1;}if(v4l_get_capability(vd))return-1;if(v4l_get_picture(vd))return-1;//這兩個(gè)函數(shù)就是即將要完畢的獲取設(shè)備信息的函數(shù)return0;}intv4l_get_capability(v4l_device*vd){if(ioctl(vd->fd,VIDIOCGCAP,&(vd->capability))<0){perror("v4l_get_capability:");return-1;}return0;}intv4l_get_picture(v4l_device*vd){if(ioctl(vd->fd,VIDIOCGPICT,&(vd->picture))<0){perror("v4l_get_picture:");return-1;}return0;}intv4l_get_mbuf(v4l_device*vd){if(ioctl(vd->fd,VIDIOCGMBUF,&(vd->mbuf))<0){perror("v4l_get_mbuf:");return-1;}return0;}intv4l_set_picture(v4l_device*vd,intbr,inthue,intcol,intcont,intwhite){/*if(br)*/vd->picture.brightness=25000;/*if(hue)*/vd->picture.hue=25000;/*if(col)*/vd->picture.colour=65535;/*if(cont)*/vd->picture.contrast=30000;/*if(white)*/vd->picture.whiteness=25000;if(ioctl(vd->fd,VIDIOCSPICT,&(vd->picture))<0){perror("v4l_set_picture:");return-1;}return0;}intv4l_grab_picture(v4l_device*vd,unsignedintsize){if(read(vd->fd,&(vd->map),size)==0)return-1;return0;}intv4l_mmap_init(v4l_device*vd){if(v4l_get_mbuf(vd)<0)return-1;if((vd->map=mmap(0,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,0))<0){perror("v4l_mmap_init:mmap");return-1;}return0;}intv4l_grab_init(v4l_device*vd,intwidth,intheight,intpal){vd->mmap.width=width;vd->mmap.height=height;pal=vd->picture.palette;vd->mmap.format=pal;vd->frame_current=0;vd->frame_using[0]=FALSE;vd->frame_using[1]=FALSE;returnv4l_grab_frame(vd,0);}//真正獲得圖像的函數(shù)externintv4l_grab_frame(v4l_device*,int);intv4l_grab_frame(v4l_device*vd,intframe){if(vd->frame_using[frame]){fprintf(stderr,"v4l_grab_frame:frame%disalreadyused.\n",frame);return-1;}vd->mmap.frame=frame;if(ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->mmap))<0){perror("v4l_grab_frame");return-1;}vd->frame_using[frame]=TRUE;vd->frame_current=frame;return0;}//在截取圖像后還要進(jìn)行同步操作,就是調(diào)用externintv4l_grab_sync(v4l_device*);該函數(shù)如下intv4l_grab_sync(v4l_device*vd){if(ioctl(vd->fd,VIDIOCSYNC,&(vd->frame_current))<0){perror("v4l_grab_sync")

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論