![音視頻采集系統(tǒng)的設(shè)計(jì)論文_第1頁](http://file4.renrendoc.com/view/4c8e52a1e4bd5fcd6f5ece8b17b331f1/4c8e52a1e4bd5fcd6f5ece8b17b331f11.gif)
![音視頻采集系統(tǒng)的設(shè)計(jì)論文_第2頁](http://file4.renrendoc.com/view/4c8e52a1e4bd5fcd6f5ece8b17b331f1/4c8e52a1e4bd5fcd6f5ece8b17b331f12.gif)
![音視頻采集系統(tǒng)的設(shè)計(jì)論文_第3頁](http://file4.renrendoc.com/view/4c8e52a1e4bd5fcd6f5ece8b17b331f1/4c8e52a1e4bd5fcd6f5ece8b17b331f13.gif)
![音視頻采集系統(tǒng)的設(shè)計(jì)論文_第4頁](http://file4.renrendoc.com/view/4c8e52a1e4bd5fcd6f5ece8b17b331f1/4c8e52a1e4bd5fcd6f5ece8b17b331f14.gif)
![音視頻采集系統(tǒng)的設(shè)計(jì)論文_第5頁](http://file4.renrendoc.com/view/4c8e52a1e4bd5fcd6f5ece8b17b331f1/4c8e52a1e4bd5fcd6f5ece8b17b331f15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
聊城大學(xué)本科畢業(yè)論文(設(shè)計(jì))目錄前言 31.系統(tǒng)的方案選擇與論證 41.1音頻部分 41.2圖像顯示部分 42.系統(tǒng)的總體設(shè)計(jì) 43.系統(tǒng)的硬件設(shè)計(jì) 53.1cortexA8實(shí)驗(yàn)儀概述 53.2USB2.0HOST接口 63.3串口 73.4攝像頭 83.5音頻輸出接口和麥克風(fēng) 93.6液晶屏輸出接口 104系統(tǒng)的軟件設(shè)計(jì) 114.1軟件開發(fā)平臺 114.1.1sourceinsight 114.1.2glade 124.2軟件設(shè)計(jì)概述 124.3系統(tǒng)主程序 124.4系統(tǒng)子程序 134.4.1錄音子程序 134.4.2拍照/錄像子程序 145設(shè)計(jì)創(chuàng)新 155.1創(chuàng)新之一 155.2創(chuàng)新之二 15結(jié)論 16參考文獻(xiàn) 17附錄 18致謝 50摘要本設(shè)計(jì)模擬手機(jī)的錄音、拍照、錄像功能,實(shí)現(xiàn)了音視頻數(shù)據(jù)的采集。使用cortexA8實(shí)驗(yàn)儀,通過話筒和攝像頭分別對聲音和圖像進(jìn)行采集。用話筒錄聲音,用喇叭播放聲音。用攝像頭實(shí)時顯示圖像,隨時可以拍照或錄制視頻,用液晶屏顯示拍下的圖片和錄下的視頻。完成了對音頻、視頻、圖片等數(shù)據(jù)的采集,轉(zhuǎn)換,存儲和應(yīng)用,整體上實(shí)現(xiàn)了數(shù)碼設(shè)備的娛樂功能[1]。關(guān)鍵詞:cortex;A8實(shí)驗(yàn)儀;話筒;攝像頭;液晶屏AbstractDesignsimulationmobilephonerecordings,photographs,videofunctions,toachievecollectionofaudioandvideodata.UsecortexA8experimentalinstrument,soundandimageswerecollectedbythemicrophoneandcamera.Recordsoundusingamicrophonewithspeakersplaythesound.Displaywithreal-timecameraimages,readytotakepicturesorrecordvideowiththeLCDdisplaycapturedimagesandrecordedvideos.Itcancollecttheaudio,video,photographs dataandtransformstorageandapply,whichrealizedtheentertainmentofdigitinstrument.KeywordscortexA8;experimental;instrument;microphone;camera;LCDscreen音視頻數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)前言隨著科學(xué)技術(shù)的飛速發(fā)展,越來越多的領(lǐng)域需要用到音視頻數(shù)據(jù)采集技術(shù),例如電視、電腦、視頻監(jiān)控,尤其是在手機(jī)數(shù)碼領(lǐng)域。拍照、聽音樂、看視頻是現(xiàn)在的智能手機(jī)必不可少的功能,人們在節(jié)假日外出旅游的時,可以隨時用手機(jī)拍下美麗的風(fēng)景,在業(yè)余時間可以用手機(jī)聽聽音樂,看看電影。綜上可知,音視頻數(shù)據(jù)采集技術(shù)已經(jīng)應(yīng)用到人們?nèi)粘I畹姆椒矫婷鎇2]。本設(shè)計(jì)是音視頻數(shù)據(jù)采集,模擬手機(jī)的拍照、錄音、錄像功能,使用凌陽公司提供的cortexA8實(shí)驗(yàn)儀,通過編寫程序使實(shí)驗(yàn)儀的話筒進(jìn)行錄音,并用喇叭播放錄制的音頻,把攝像頭插到實(shí)驗(yàn)儀上,通過編寫程序使攝像頭采集的圖像顯示在液晶屏上,并隨時可以進(jìn)行拍照。由自然音源通過采集電路(麥克風(fēng))得到的音頻信號是一種連續(xù)變化的模擬信號。但計(jì)算機(jī)只能處理和記載數(shù)字信號。音頻信號必須變換為數(shù)字信號之后,才能由計(jì)算機(jī)進(jìn)一步處理[3]。錄音時,先設(shè)置好采樣頻率、采樣位數(shù)、聲道數(shù),再啟動聲卡的AD芯片,將音頻的模擬信號轉(zhuǎn)化為數(shù)字信號,最后將音頻對應(yīng)的數(shù)字信號存儲到文件中。放音時需要依據(jù)錄音時聲卡的采樣頻率、采樣位數(shù)、聲道數(shù)去設(shè)置聲卡,再將音頻的數(shù)字信號通過聲卡的DA芯片轉(zhuǎn)化為音頻對應(yīng)的模擬信號[4]。 視頻是連續(xù)漸變的靜態(tài)圖像沿時間軸依次更換顯示而形成的畫面。顯示圖像時,若圖像每秒變化超過24次,根據(jù)余暉效應(yīng),此時人眼無法辨別單幅的靜態(tài)圖像,一張一張靜態(tài)的圖像看上去是連續(xù)的運(yùn)動的。通過V4L2編程框架,內(nèi)核為應(yīng)用程序提供了訪問音、視頻設(shè)備的統(tǒng)一接口。V4L2支持多種設(shè)備,其主要用于音頻的采集,視頻的輸入及輸出。在Linux中,通過V4L2接口操作視頻設(shè)備可以像訪問普通文件一樣對設(shè)備文件進(jìn)行讀寫[5]。本系統(tǒng)采用嵌入式技術(shù),控制精度和效率高,穩(wěn)定性好,操作方便,顯示直觀,很好的模擬了手機(jī)的拍照、錄音、錄像功能。1.系統(tǒng)的方案選擇與論證1.1音頻部分在此次設(shè)計(jì)中,對于音頻部分,音頻接口可以選用OSS或ALSA。方案一:采用OSS音頻接口來實(shí)現(xiàn)。OSS可移植性好,但具有聲卡獨(dú)占問題,不支持混音。兩個基于OSS的應(yīng)用程序不能同時驅(qū)動聲卡,也就沒法同時發(fā)出聲音。方案二:采用ALSA音頻接口來實(shí)現(xiàn)。ALSA具有聲卡共享的特性,支持混音,兼容OSS接口。兩個基于ALSA的不同應(yīng)用程序能同時驅(qū)動聲卡,就是說能同時發(fā)出聲音。ALSA是一個完全開放源代碼的音頻驅(qū)動程序集,除了像OSS那樣提供了一組內(nèi)核驅(qū)動程序模塊之外,ALSA還專門為簡化應(yīng)用程序的編寫提供了相應(yīng)的函數(shù)庫,與OSS提供的基于ioctl的原始編程接口相比,ALSA函數(shù)庫使用起來要更加方便一些[6]。利用該函數(shù)庫,開發(fā)人員可以方便快捷的開發(fā)出自己的應(yīng)用程序,細(xì)節(jié)則留給函數(shù)庫內(nèi)部處理。綜合分析,采用方案二作為音頻部分的音頻接口。1.2圖像顯示部分方案一:通過幀緩沖顯示圖像。幀緩沖是Linux系統(tǒng)為顯示設(shè)備提供的一個接口,它允許應(yīng)用程序通過此接口訪問圖形設(shè)備,而不需關(guān)心底層硬件的差異。幀緩沖把顯示設(shè)備描述成緩沖區(qū),往顯示緩沖區(qū)寫入數(shù)據(jù),屏幕上會有相應(yīng)的顯示。但圖像的大小不能隨意修改。方案二:通過gtk顯示圖像??梢宰杂芍付▓D像的大小,將攝像頭輸出的rgb數(shù)據(jù)通過函數(shù)gtk_draw_rgb_image();加載到繪圖區(qū),可以指定繪圖區(qū)的大小,從而改變圖像的大小。綜合分析,采用方案二來顯示圖像。2.系統(tǒng)的總體設(shè)計(jì)能夠錄音并存儲為音頻文件。(2)播放已經(jīng)存在的音頻文件。(3)視頻采集與顯示,能夠?qū)崟r從攝像頭中 獲取圖像并將攝像頭獲得的幀數(shù)據(jù)顯示到屏幕上。(4)視頻采集與顯示,能夠?qū)崟r從攝像頭中獲取圖像并將攝像頭獲得的幀數(shù)據(jù)顯示到屏幕上。(5)拍照,保存為bmp照片。(6)圖片瀏覽,能夠顯示存儲的bmp圖片。(7)錄像,存儲攝像頭獲得的數(shù)據(jù),保存為視頻。(8)播放錄像,能夠?qū)⒋鎯Φ囊曨l播放出來。3.系統(tǒng)的硬件設(shè)計(jì)3.1cortexA8實(shí)驗(yàn)儀概述該實(shí)驗(yàn)儀是凌陽教育繼S3c2440之后的又一力作,是一個標(biāo)準(zhǔn)的嵌入式開發(fā)平臺。處理器采用業(yè)界領(lǐng)先的cortexA8,其內(nèi)部集成了豐富的模塊,另外該芯片主頻高達(dá)833MHZ,您可以輕松上手linux、wince、android等操作系統(tǒng)的設(shè)計(jì)及開發(fā)。本開發(fā)板基于開發(fā)考慮,外設(shè)齊全,接口標(biāo)準(zhǔn),擴(kuò)展方便。整個開發(fā)板采用核心板加底板方法設(shè)計(jì),核心板采用八層板設(shè)計(jì),線路可靠穩(wěn)定,是嵌入式學(xué)習(xí)和研究的最佳選擇,該實(shí)驗(yàn)儀適合研究人員和電子愛好者用做評估與開發(fā)。核心板主要元件:CPU型號為S5PV210。DDR2內(nèi)存,一共4片,型號為K4T1G164Q。NANDFLASH,1G版本核心板為K9K8G08,256M版本核心板為K9F2G08。有線網(wǎng)絡(luò)芯片,10/100Mbps,SMSCLAN9220。AC97音頻編解碼芯片,WM9713,該芯片包含電阻式觸摸屏控制器。電源轉(zhuǎn)換芯片,為核心板器件提供所需要的各種電壓轉(zhuǎn)換。底板主要元器件:電源接口,輸入電壓為5V。電源上串聯(lián)有一個1.1A的自恢復(fù)保險絲。電源開關(guān),選用進(jìn)口優(yōu)質(zhì)電源開關(guān),可反復(fù)開關(guān)不低于10萬次。USB2.0OTG接口,采用miniUSB插座,支持480Mbps高速模式。HDMI高清顯示輸出,標(biāo)準(zhǔn)的TypeA型HDMI插座,機(jī)械強(qiáng)度高。CVBS視頻輸出端口,用于連接電視機(jī)。100M有線以太網(wǎng)接口[7]。2路RS232電平串口插座,DB9針式插座,和PC串口標(biāo)準(zhǔn)一致。TF卡插座,支持從TF卡啟動。板載USBWIFI模塊(板載和外接二選一),支持802.11n150Mbps。3路預(yù)留USB2.0HOST端口,可以外接U盤,鼠標(biāo),鍵盤等。音頻輸出接口,采用3.5mm耳機(jī)插座。板載麥克風(fēng)[17]。啟動模式設(shè)置開關(guān),可以設(shè)置多種啟動模式。4個用戶LED,由用戶程序控制LED的亮滅。攝像頭輸入接口,可以連接定制的攝像頭擴(kuò)展板。液晶輸出接口,可以外接各種液晶屏模塊。RTC時鐘電池[18]。GPIO擴(kuò)展接口,包含2路串口,1路SPI,一個GPIO。9個用戶按鍵,支持常用的功能操作[8]。1個復(fù)位按鍵。圖1CortexA8試驗(yàn)儀核心板加底板3.2USB2.0HOST接口S5PV210只有1路USB2.0HOST端口,底板上通過USBHUB芯片GL850G擴(kuò)展出4個USB2.0端口,其中一個用于板載WIFI接口,剩余3個是標(biāo)準(zhǔn)的USBA型接口插座,分別是J23,J24,J25。支持高速模式,也就是480Mbps。之前三星的S3C2440A和S3C6410的USBHOST最高只支持USB2.0全速(12Mbps)模式[9]。圖2USB實(shí)物圖圖3USB電路圖圖4USB插座信號定義1:VCC(5V),為接入USB端口的設(shè)備提供電源2:USBD-,也用DM表示,USB差分信號-3:USBD+,也用DP表示,USB差分信號+4:GND 電源地[15]3.3串口S5PV210一共有四個串口,其中2個通過SP3232電平轉(zhuǎn)換芯片連接到DB9插座。另外2個直接從CPU連接到開發(fā)板J17插座[16]。開發(fā)板上DB9插座:圖5串口實(shí)物圖圖6串口電路圖圖7串口管腳定義開發(fā)板的DB9串口信號定義和PC的串口定義完全一樣:2:RXD 接收信號,對于開發(fā)板來說是輸入信號3:TXD 發(fā)送信號,對于開發(fā)板來說是輸出信號5:GND 公共地3.4攝像頭參數(shù):高品質(zhì)CMOS感應(yīng)器。支持WindowsXPSP2/Vista等操作系統(tǒng)。支持手動式調(diào)焦。靜態(tài)圖像拍照:默認(rèn)分辨率為640x480。視頻錄像捕捉:默認(rèn)分辨率為640x480,軟件增值可達(dá)到500萬(2560x1920),YUY2輸出格式。USB2.0高速傳輸,高幀速(30-15fps)視頻播放,畫面流暢不停頓。自動白平衡、曝光。最小靈敏度:2.0V/Lux.Sec。閃爍控制:50Hz或60Hz自動識別。支持抓取、儲存靜態(tài)照片(JPG格式)功能。支持QQ、MSN、雅虎通等視頻聊天軟件,等視頻聊天室。工作溫度:-10~60℃。功耗:<0.5W。圖8攝像頭實(shí)物圖3.5音頻輸出接口和麥克風(fēng)音頻輸出端口(J11)為標(biāo)準(zhǔn)3.5mm立體聲耳機(jī)插座,接到AC97編解碼芯片WM9713的音頻輸出。麥克風(fēng)(MIC1)也是接到WM9713。圖9編解碼芯W(wǎng)M9713電路圖當(dāng)耳機(jī)插入耳機(jī)插座時候,耳機(jī)插頭的金屬部分會把耳機(jī)插座的第3腳和第4腳短接。第3腳是地線,這樣相當(dāng)于把第4腳接地,而第4腳和喇叭的功放使能引腳相連接,第4腳接地時候?yàn)榈碗娖?,喇叭功放就停止工作。也就是說,耳機(jī)插入插座會自動禁止喇叭的聲音[14]。3.6液晶屏輸出接口液晶屏輸出接口(J9)用于連接各種液晶屏,包含了液晶屏數(shù)據(jù)信號,背光電源和觸摸屏這3個部分。圖10液晶屏輸出接口液晶屏接口插座使用的是0.5mm間距40芯FPC插座,下接觸。插入FPC帶線時候,要把FPC帶線的金屬接觸面朝下。FPC插座左邊為第1腳(白色三角形)[13]。LCD的35腳LCDSEL是一個識別5寸和7寸液晶屏的引腳,電路板上有一個下拉電阻。對于5寸的液晶屏模塊,這個引腳是空腳,所以是低電平。對于7寸液晶屏,35腳是接高電平。因?yàn)?寸液晶屏和7寸液晶屏分辨率是一樣的,只是背光電流要求不同,所以LCDSEL用于控制背光電流的大小[12]。LCDSEL為低電平情況,Q9不導(dǎo)通,背光電流I=0.1/R=0.1/3.3=0.03A=30mA。LCDSEL為高電平情況,Q9導(dǎo)通,R27和R26并聯(lián),R=R27*R26/(R27+R26)=1R,背光電流I=0.1/R=0.1/1=0.1A=100mA[10]。圖11液晶屏電路圖4系統(tǒng)的軟件設(shè)計(jì)4.1軟件開發(fā)平臺4.1.1sourceinsightSourceInsight是一個面向項(xiàng)目開發(fā)的程序編輯器和代碼瀏覽器,它擁有內(nèi)置的對C/C++,C#和Java等程序的分析。SourceInsight能分析你的源代碼并在你工作的同時動態(tài)維護(hù)它自己的符號數(shù)據(jù)庫,并自動為你顯示有用的上下文信息。SourceInsight不僅僅是一個強(qiáng)大的程序編輯器,它還能顯示referencetrees,classinheritancediagrams和calltrees。SourceInsight提供了最快速的對源代碼的導(dǎo)航和任何程序編輯器的源信息。SourceInsight提供了快速和革新的訪問源代碼和源信息的能力。與眾多其它編輯器產(chǎn)品不同,SourceInsight能在你編輯的同時分析你的源代碼,為你提供實(shí)用的信息并立即進(jìn)行分析。SourceInsight是如今最好用的語言編輯器,支持幾乎所有的語言,如C、C++、ASM、PAS、ASP、HTML等常見的,還支持自己定義關(guān)鍵字,如果您是一個程序員或者網(wǎng)頁制作人,這個軟件對您都是有幫助的!SourceInsight為您提供了可快速訪問源代碼和源信息的功能。SourceInsight相較其它的編輯器產(chǎn)品來說,還可以幫您分析源代碼,并在您編輯的同時立刻提供給您有用的信息和分析。SourceInsight自動創(chuàng)建并維護(hù)它自己高性能的符號數(shù)據(jù)庫,包括函數(shù)、method、全局變量、結(jié)構(gòu)、類和工程源文件里定義的其它類型的符號。SourceInsight可以迅速地更新您的文件信息,即使在您編輯代碼的時候。而且符號數(shù)據(jù)庫的符號可以自動創(chuàng)建倒您的工程文件中。4.1.2gladeGlade是GTK+圖形用戶界面產(chǎn)生器。也就是說,Glade是個VisualProgrammingTool,和MicrosoftWindows平臺的VisualTools類似,只要用鼠標(biāo)拉一拉,它就會自動幫你產(chǎn)生Csourcecode。所以我們這些懶人,就不用再去為畫面的設(shè)計(jì)煩惱,用Glade設(shè)計(jì)好畫面,再用編輯器把程式碼稍為修減就OK了。(現(xiàn)在也有各種語言如C++、Ada95、Python、Perl等的GTK+介面,如果搭配其它工具,也可以自動產(chǎn)生C++,Ada95,PythonandPerl的程式碼)。4.2軟件設(shè)計(jì)概述在此次設(shè)計(jì)中,音視頻數(shù)據(jù)采集系統(tǒng)的軟件全部采用c語言編寫。采用模塊化的思想,將程序劃分為多個模塊,便于設(shè)計(jì)、調(diào)試。此次設(shè)計(jì)中程序的編寫環(huán)境是ubuntu操作系統(tǒng)。4.3系統(tǒng)主程序創(chuàng)建主界面及各個子界面,在主窗上添加視頻按鈕、音頻按鈕。實(shí)現(xiàn)界面間的切換,通過回調(diào)函數(shù)實(shí)現(xiàn)各個界面間的切換。創(chuàng)建主窗口顯示背景創(chuàng)建主窗口顯示背景創(chuàng)建拍照錄像窗口創(chuàng)建錄音放音窗口圖片瀏覽窗口視頻播放窗口開始圖12主程序流程圖4.4系統(tǒng)子程序4.4.1錄音子程序在錄音界面,增加錄音按鈕、播放按鈕、返回按鈕。當(dāng)點(diǎn)擊錄音按鈕時,開始錄音,再次點(diǎn)擊錄音按鈕停止,錄音通過創(chuàng)建線程來實(shí)現(xiàn)。實(shí)現(xiàn)放音(可以單獨(dú)去做界面),點(diǎn)擊放音按鈕或者直接點(diǎn)擊列表中的聲音文件名實(shí)現(xiàn)放音。返回按鈕可以返回主界面。初始化音頻設(shè)備/dev/dsp初始化錄音窗口初始化音頻設(shè)備/dev/dsp初始化錄音窗口打開音頻數(shù)據(jù)文件開線程,從設(shè)備中讀取數(shù)據(jù),并寫入文件保存音頻文件開線程,從文件中讀取數(shù)據(jù),寫入設(shè)備中關(guān)閉音頻文件4.4.2拍照/錄像子程序在錄像界面,當(dāng)進(jìn)入錄像窗口時即可初始化v4l2攝像頭設(shè)備。增加拍照按鈕,錄制視頻按鈕,圖片/視頻瀏覽按鈕,返回按鈕,以及圖像顯示“窗口”。獲取攝像頭數(shù)據(jù)在開發(fā)板屏幕顯示(創(chuàng)建線程函數(shù)去操作),通過GTK在屏幕實(shí)時顯示需要刷新繪圖區(qū)域,通過gtk_widget_queue_draw()就會自動調(diào)用曝光事件所連接的回調(diào)函數(shù),回調(diào)函數(shù)中刷新屏幕從而實(shí)現(xiàn)實(shí)時顯示。GTK中的繪圖函數(shù)只能夠顯示rgb格式的數(shù)據(jù)。需要將攝像頭yuv數(shù)據(jù)轉(zhuǎn)化成rgb數(shù)據(jù)[11]。實(shí)現(xiàn)拍照功能,點(diǎn)擊拍照按鈕,截取當(dāng)前攝像頭數(shù)據(jù)保存到圖片中。圖片格式轉(zhuǎn)換函數(shù):voidrgb24_to_bmp(unsignedchar*rgb24,char*bmp_name,intwidth,intheight);錄像功能實(shí)現(xiàn),點(diǎn)擊錄像按鈕時創(chuàng)建線程,獲取圖像并寫入視頻文件。由于rgb數(shù)據(jù)是原始數(shù)據(jù)未壓縮,直接存儲rgb數(shù)據(jù)會導(dǎo)致視頻文件很大,所以需要將rgb數(shù)據(jù)壓縮,即將rgb格式的數(shù)據(jù)轉(zhuǎn)化為jpg格式的數(shù)據(jù)進(jìn)行存儲。播放視頻,添加線程,當(dāng)點(diǎn)擊播放按鈕時,能夠讀取視頻文件中的圖像,并在窗口上顯示(讀出的數(shù)據(jù)為jpg格式,所以要將數(shù)據(jù)在轉(zhuǎn)化為rgb格式。當(dāng)退出拍照錄像窗口時,撤銷線程,關(guān)閉設(shè)備。圖片瀏覽窗口類似。拍照、錄像窗口拍照、錄像窗口選擇拍照or錄像創(chuàng)建線程:不斷從攝像頭中獲取圖像。創(chuàng)建線程:不斷觸發(fā)曝光事件顯示圖像。錄像,開線程將幀數(shù)據(jù)寫文件write_file初始化v4l2拍照保存圖片rgb24_to_bmprgb24_to_bmp關(guān)閉文件圖14拍照/錄像子程序流程圖5設(shè)計(jì)創(chuàng)新5.1創(chuàng)新之一在音視頻設(shè)計(jì)中,對窗體的設(shè)計(jì)加入了某些屬性,如單雙擊,滑動窗體等,利用這些屬性結(jié)合某些模塊如,時間的控制和調(diào)整,可以替換掉按鈕的單調(diào)操作,也使得界面變得簡潔優(yōu)雅。在利用窗體的單雙擊和滑動事件時要注意對窗體區(qū)域的劃分,對不同的模塊進(jìn)行控制。5.2創(chuàng)新之二利用時間的值來控制背景圖片的切換,例如每分鐘有六十秒,如果讓秒對29(也可以是其他值)取余,則每分鐘會取到兩次零值,這樣就會觸發(fā)兩次事件來切換圖片,也可以利用分鐘的值,從而達(dá)到更長時間的切圖效果。結(jié)論該音視頻數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì),通過話筒和攝像頭分別對聲音和圖像進(jìn)行采集,經(jīng)過開發(fā)板的處理,用喇叭播放聲音,用液晶屏顯圖像。在此次設(shè)計(jì)中,通過理論課的實(shí)踐和研討,取得了初步成果,完成了話筒和攝像頭采集數(shù)據(jù),喇叭和液晶屏顯示數(shù)據(jù)的過程。實(shí)踐中,錄制視頻和播放視頻是最難的部分,要把圖片按一定的格式存儲到文件里實(shí)現(xiàn)錄制視頻,把文件里的圖片取出來通過液晶屏顯示實(shí)現(xiàn)播放視頻。參考文獻(xiàn)[1]張綺文等.ARM嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社, 2007.[2]張瑜,王益涵.ARM嵌入式程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2009.[3]杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.[4]潘巨龍,黃寧,姚伏天等.ARM9嵌入式Linux系統(tǒng)構(gòu)建與應(yīng)用[M].北京:北京航空航天大學(xué) 出版社,2006.[5]李新峰,何廣生,趙秀文.基于ARM9的嵌入式Linux開發(fā)技術(shù)[M].北京:電子工業(yè)出版 社,2008.[6](美)W.RichardStevensBillFennerAndrewM.Rudoff.UNIX網(wǎng)絡(luò)編程第3版[M].北京: 人民郵電出版社,2009.[7]ManufacturingEngineeringLaboratoryNationalInstituteofStandardsand TechnologyGaithersburg[M].U.S.A,2004.[8]尹柱霞,鄭喜鳳,于洪濤.ARM+FPGA控制的LED脫機(jī)屏系統(tǒng)設(shè)計(jì)[J].液晶與顯示. 2010,21,5:23-25.[9]梁廷魁.RS485串行通訊在自動生產(chǎn)線上的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用.2011,15,6:45-47.[10]蘇哲欣,劉鴻飛,薛曉.基于嵌入式Linux的LCD驅(qū)動分析與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī). 2009,12,3:28-29.[11]ITU-TRecommendation:Q.400.系列[12]Klessing.RW.OverviewofMetropolitanAreaNetworks.IEEECommunicationMagaine,1986,24(1):9-15.[13]AbramsonN.TheALOHASystem-AnotherAlternativeforComputerCommunication.Proc.FallJointComput.Conf.AFIPS,1970,37:281-285.[14]IEEE802.15WorkingGroupforWPAN.[15]AbramsonN.PacketSwitchingwithSatellites,AFIPSConf.Proc.,1973,42(6):695-702.[16]楊金巖,等.AT89系列單片機(jī)原理與接口技術(shù).北京:人民郵電出版社,2005.1.[17]高峰.單片機(jī)微型計(jì)算機(jī)原理與技術(shù)接口.北京:科學(xué)出版社,2003.2.[18]郭天祥,新概念51單片機(jī)C語言教程,北京:電子工業(yè)出版社.附錄A.主函數(shù)初始化全部窗口#include<gtk/gtk.h>#include"main_window.h"#include"picture_window.h"#include"play_wav_window.h"intmain(intargc,char*argv[]){ if(FALSE==g_thread_supported()){//如果線程沒有初始化 g_thread_init(NULL); //初始化線程,g_thread_init()必須放在gdk_threads_init()前面 gdk_threads_init();//以上代碼可以填寫就可以使用任何其他線程并能夠刷圖 } gtk_init(&argc,&argv); window.main_window=design_main_window();//主窗口 window.video_window=design_video_window();//拍照和錄像窗口 window.picture_window=design_pic_window();//圖片窗口 window.play_video_window=design_play_video_window();//播放視頻窗口 window.play_wav_window=design_play_wav_window();//播放wav音樂窗口*/ gtk_widget_show_all(window.main_window); gdk_threads_enter(); gtk_main(); //主事件循環(huán) gdk_threads_leave(); return0;}初始化主界面和定義函數(shù)#include"main_window.h"#include"sungtk_interface.h"#include"play_wav_window.h"#include"play_video_window.h"MainButtonmainbutton;pthread_ttid_time;//滑屏坐標(biāo)doublex_old=0;doubley_old=0;doublex_new=0;doubley_new=0;//時間處理參數(shù)gbooleantime_pthread_flag=FALSE;intntm_hour=10;intntm_min=8;intntm_sec=0;/********************************************************************功能: 主窗口顯示可以選擇錄像、音樂、視頻、照片*參數(shù): 無*返回值: 主窗口指針********************************************************************/GtkWidget*design_main_window(){ GladeXML*gxml=glade_xml_new("../glade/main_window.glade",NULL,NULL); GtkWidget*main_window=glade_xml_get_widget(gxml,"main_window"); chang_background(main_window,"../image/main_win_pic.jpg",800,480); gtk_widget_add_events(main_window,GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK); g_signal_connect(main_window,"button_press_event", G_CALLBACK(main_win_press),NULL); g_signal_connect(main_window,"button_release_event", G_CALLBACK(main_win_realse),NULL); mainbutton.video_button=glade_xml_get_widget(gxml,"video_button"); mainbutton.camer_button=glade_xml_get_widget(gxml,"camer_button"); mainbutton.music_button=glade_xml_get_widget(gxml,"music_button"); mainbutton.pic_button=glade_xml_get_widget(gxml,"pic_button"); sungtk_button_inset_image(mainbutton.video_button,"../image/Videos.png",80,80); sungtk_button_inset_image(mainbutton.camer_button,"../image/camer_button_pic.p ng",80,80); sungtk_button_inset_image(mainbutton.music_button,"../image/music_button_pic.p ng",80,80); sungtk_button_inset_image(mainbutton.pic_button, "../image/picture_button_pic.png",80,80); mainbutton.data_label=glade_xml_get_widget(gxml,"data_label"); sungtk_widget_set_font_size(mainbutton.data_label,20,FALSE); gtk_label_set_text((GtkLabel*)(mainbutton.data_label),"2014/5/25"); mainbutton.time_label=glade_xml_get_widget(gxml,"time_label"); sungtk_widget_set_font_size(mainbutton.time_label,40,FALSE); pthread_create(&tid_time,NULL,current_time,NULL); pthread_detach(tid_time); signal_connect_button(); returnmain_window;}/***********************************************************************功能: 單雙擊窗體事件*參數(shù): 無*返回值: FALSEorTRUE**********************************************************************/gbooleanmain_win_press(GtkWidget*widget,GdkEventButton*event,gpointerdata){ x_old=event->x; y_old=event->y; if(event->type==GDK_2BUTTON_PRESS) { if(time_pthread_flag==FALSE) { pthread_cancel(tid_time); time_pthread_flag=TRUE; printf("doubleclickedcancel\n"); } else { pthread_create(&tid_time,NULL,current_time,NULL); pthread_detach(tid_time); time_pthread_flag=FALSE; printf("doubleclickedwork\n"); } } returnTRUE;}/********************************************************************功能: 按鈕信號連接函數(shù)*參數(shù): 無*返回值: 無*********************************************************************/voidsignal_connect_button(){ g_signal_connect(G_OBJECT(mainbutton.camer_button),"clicked",G_CALLBACK(deal_camer_button_press),NULL); //播放視頻 g_signal_connect(G_OBJECT(mainbutton.video_button),"clicked",G_CALLBACK(deal_video_button_press),NULL); g_signal_connect(G_OBJECT(mainbutton.music_button),"clicked",G_CALLBACK(deal_wav_button_press),NULL); g_signal_connect(G_OBJECT(mainbutton.pic_button),"clicked",G_CALLBACK(deal_pic_button_press),NULL);}gbooleanmain_win_realse(GtkWidget*widget,GdkEventButton*event,gpointerdata){ charbuff[100]=""; x_new=event->x; y_new=event->y; if(time_pthread_flag==TRUE) { if((x_new<=170)||(x_old<=170)) { //時的分區(qū) if(y_new-y_old>100) { ntm_hour--; if(ntm_hour<0) { ntm_hour=12; } } elseif(y_old-y_new>100) { ntm_hour++; if(ntm_hour>=13) { ntm_hour=0; } } } elseif((170<x_new)&&(x_new<=340)&&(170<x_old)&&(x_old<=340)) { //分的分區(qū) if(y_new-y_old>100) { ntm_min--; if(ntm_min<0) { ntm_min=59; } } elseif(y_old-y_new>100) { ntm_min++; if(ntm_min>=60) { ntm_min=0; } } } elseif((340<x_new)&&(x_new<=500)&&(340<x_old)&&(x_old<=500)) { //秒的分區(qū) if(y_new-y_old>100) { ntm_sec--; if(ntm_sec<0) { ntm_sec=59; } } elseif(y_old-y_new>100) { ntm_sec++; if(ntm_sec>=60) { ntm_sec=0; } } } } sprintf(buff,"%02d:%02d:%02d",ntm_hour,ntm_min,ntm_sec); gdk_threads_enter(); //進(jìn)入多線程互斥區(qū)域 gtk_label_set_text((GtkLabel*)(mainbutton.time_label),buff); gdk_threads_leave();}/*********************************************************************功能: 線程函數(shù)顯示時間*參數(shù): NULL*返回值: NULL*******************************************************************/void*current_time(){ charbuff[100]=""; while(1) { if(60<=ntm_sec){ ntm_sec=0; ntm_min++; if(60<=ntm_min){ ntm_min=0; ntm_hour++; if(13<=ntm_hour){ ntm_hour=1; } } } sprintf(buff,"%02d:%02d:%02d",ntm_hour,ntm_min,ntm_sec); gdk_threads_enter(); //進(jìn)入多線程互斥區(qū)域 gtk_label_set_text((GtkLabel*)(mainbutton.time_label),buff); gdk_threads_leave(); ntm_sec++; sleep(1); } returnNULL;}B.圖片瀏覽窗口設(shè)置#include"picture_window.h"#include"sungtk_interface.h"#include"main_window.h"#include"play_wav_window.h"PictureButtonpicturebutton;//照片相關(guān)參數(shù)intbmp_total=0;intcurrent_bmp_num=0;char*bmp_name[100];charcurrent_bmp[100]="";staticgints_timer=-1;gbooleanauto_play_flag=FALSE;/*********************************************************************功能: 進(jìn)入圖片瀏覽并創(chuàng)建此界面*參數(shù): widget:被點(diǎn)擊的按鈕*返回值: 無********************************************************************/voiddeal_pic_button_press(GtkWidget*widget,gpointerdata){ bmp_total=find_file("../picture/",".bmp",bmp_name); if(bmp_total!=0) { current_bmp_num=bmp_total-1; sprintf(current_bmp,"../picture/%s",bmp_name[current_bmp_num]); } printf("%s\n",current_bmp); sungtk_image_load_picture(picturebutton.pic_image,current_bmp,700,480); gtk_widget_hide_all(window.main_window); gtk_widget_show_all(window.picture_window);}/**********************************************************************功能: 設(shè)置圖片瀏覽窗口*參數(shù): 無*返回值: 返回被設(shè)置的窗口*********************************************************************/GtkWidget*design_pic_window(){ GladeXML*gxml=glade_xml_new("../glade/picture_window.glade",NULL,NULL); GtkWidget*picture_win=glade_xml_get_widget(gxml,"picture_window"); chang_background(picture_win,"../image/pic_back.jpg",800,480); picturebutton.pic_image=glade_xml_get_widget(gxml,"pic_image"); picturebutton.play_picture_button= glade_xml_get_widget(gxml,"play_picture_button"); picturebutton.last_picture_button=glade_xml_get_widget(gxml,"last_picture_button"); picturebutton.next_picture_button= glade_xml_get_widget(gxml,"next_picture_button"); picturebutton.delete_pic_button=glade_xml_get_widget(gxml,"delete_pic_button"); picturebutton.back_button=glade_xml_get_widget(gxml,"back_button"); sungtk_button_inset_image(picturebutton.play_picture_button,"../image/pplay.png",80,80); sungtk_button_inset_image(picturebutton.last_picture_button,"../image/pprevious.png",80,80); sungtk_button_inset_image(picturebutton.next_picture_button,"../image/pnext.png",80,80); sungtk_button_inset_image(picturebutton.delete_pic_button,"../image/delete_pic.png",80,80); sungtk_button_inset_image(picturebutton.back_button,"../image/home_win.png",80,80); signal_connect_picture_button(); returnpicture_win;}/********************************************************************功能: 按鈕信號連接函數(shù)*參數(shù): 無*返回值: 無********************************************************************/voidsignal_connect_picture_button(){ g_signal_connect(G_OBJECT(picturebutton.play_picture_button),"clicked",G_CALLBACK(deal_auto_play_pic_button_press),NULL); g_signal_connect(G_OBJECT(picturebutton.last_picture_button),"clicked",G_CALLBACK(deal_hand_play_pic_button_press),NULL); g_signal_connect(G_OBJECT(picturebutton.next_picture_button),"clicked",G_CALLBACK(deal_hand_play_pic_button_press),NULL); g_signal_connect(G_OBJECT(picturebutton.back_button),"clicked",G_CALLBACK(deal__pic_back_button_press),NULL); g_signal_connect(G_OBJECT(picturebutton.delete_pic_button),"clicked",G_CALLBACK(deal_delete_pic_button_press),NULL);}/*********************************************************************功能:自動 播放圖片*參數(shù): widget:被點(diǎn)擊的按鈕*返回值: 無********************************************************************/voiddeal_auto_play_pic_button_press(GtkWidget*widget,gpointerdata){ if(auto_play_flag==FALSE) { auto_play_flag=TRUE; sungtk_button_inset_image(picturebutton.play_picture_button,"../image/ppause.png",80,80); s_timer=gtk_timeout_add(1000,change_image,picturebutton.pic_image); } else { auto_play_flag=FALSE; gtk_timeout_remove(s_timer); sungtk_button_inset_image(picturebutton.play_picture_button,"../image/pplay.png",80,80); }}/*********************************************************************功能: 手動播放圖片回調(diào)函數(shù)*參數(shù): widget:被點(diǎn)擊的按鈕*返回值: 無********************************************************************/voiddeal_hand_play_pic_button_press(GtkWidget*widget,gpointerdata){ if(widget==picturebutton.last_picture_button) { if(current_bmp_num>0) { current_bmp_num--; } } elseif(widget==picturebutton.next_picture_button) { if(current_bmp_num<bmp_total-1) { current_bmp_num++; } } sprintf(current_bmp,"../picture/%s",bmp_name[current_bmp_num]); sungtk_image_load_picture(picturebutton.pic_image,current_bmp,700,480);}/*********************************************************************功能: 自動播放圖片*參數(shù): data:播放圖片的畫圖區(qū)域*返回值: 無********************************************************************/gbooleanchange_image(gpointerdata){ if(current_bmp_num<bmp_total-1) { current_bmp_num++; } else { current_bmp_num=0; } sprintf(current_bmp,"../picture/%s",bmp_name[current_bmp_num]); sungtk_image_load_picture(picturebutton.pic_image,current_bmp,700,480); returnTRUE;}/*********************************************************************功能:圖片播放返回窗口*參數(shù):NULL*返回值: NULL********************************************************************/void*deal__pic_back_button_press(){ if(auto_play_flag==TRUE) { auto_play_flag=FALSE; gtk_timeout_remove(s_timer); sungtk_button_inset_image(picturebutton.play_picture_button,"../image/pplay.png",80,80); } gtk_widget_hide_all(window.picture_window); gtk_widget_show_all(window.main_window); returnNULL;}/*********************************************************************功能:圖片刪除*參數(shù):NULL*返回值: NULL********************************************************************/void*deal_delete_pic_button_press(){ sprintf(current_bmp,"../picture/%s",bmp_name[current_bmp_num]); if(remove(current_bmp)) printf("deletepictureerror!\n"); bmp_total=find_file("../picture/",".bmp",bmp_name); returnNULL;}C.視頻播放窗口#include"play_video_window.h"#include"sungtk_interface.h"#include"wav.h"#include"window.h"#include"yuyv_rgb_jpeg.h"intvideo_total=0;intcurrent_video_num=0;char*video_name[100];constchar*video_path="../video/";charcurrent_video[100]="";pthread_tplay_video,p_play_video;staticintbmp_width=0; staticintbmp_height=0;staticunsignedchar*rgbvideo=NULL;staticsem_tsem_1,sem_2,sem_3;gbooleanplay_video_flag=FALSE;gbooleanvideo_in_flag=FALSE;/*********************************************************************功能:播放視頻按鈕回調(diào)函數(shù)*參數(shù): 無*返回值: 無********************************************************************/voiddeal_video_button_press(){ if(video_in_flag==TRUE) { pthread_create(&play_video,NULL,start_play_video,NULL); pthread_detach(play_video); } video_total=player_song_list_display(video_path); gtk_widget_hide_all(window.main_window); gtk_widget_show_all(window.play_video_window); }/*********************************************************************功能:讀取文件夾中的視頻文件*參數(shù): 無*返回值: 無********************************************************************/intplayer_song_list_display(constchar*path){ DIR*dir=NULL; structdirent*ptr=NULL; intsong_num=0; dir=opendir(path); if(dir==NULL){ perror("opendir"); return-1; } playvideobutton.clist=sungtk_clist_new(); gtk_fixed_put((GtkFixed*)(playvideobutton.video_fixed),playvideobutton.clist->fixed,0,0); sungtk_clist_set_text_size(playvideobutton.clist,15); sungtk_clist_set_col_width(playvideobutton.clist,300); sungtk_clist_set_row_height(playvideobutton.clist,23); sungtk_clist_set_select_row_signal(playvideobutton.clist,"button-release-event",callback_list_release); while((ptr=readdir(dir))!=NULL) //讀歌曲名,存歌曲 { if(strstr(ptr->d_name,".mpg")!=NULL){ video_name[song_num]=(char*)malloc(strlen(ptr->d_name)+1); memset(video_name[song_num],0,strlen(ptr->d_name)+1); strcpy(video_name[song_num],ptr->d_name); sungtk_clist_append(playvideobutton.clist,ptr->d_name); song_num++; } } sungtk_clist_set_foreground(playvideobutton.clist,"black"); closedir(dir); returnsong_num;}/*********************************************************************功能: 播放視頻線程*參數(shù): NULL*返回值: NULL********************************************************************/void*start_play_video(char*video_name_path){ FILE*fp; if((fp=fopen(current_video,"rb+"))==NULL) { printf("Cannotopenfile!"); returnNULL; } rewind(fp); intjpeg_frame_size=0; while(play_video_flag==TRUE) { sem_wait(&sem_3); gdk_threads_ent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國手動空氣泵行業(yè)市場調(diào)查研究及投資前景展望報告
- 中國自動濃霧信號裝置行業(yè)發(fā)展?jié)摿︻A(yù)測及投資策略研究報告
- 2025年度藝術(shù)品交易居間協(xié)議范本
- 2024其他紡織制成品制造市場前景及投資研究報告
- 2025年度教育貸款協(xié)議書-學(xué)生資助與教育發(fā)展合作
- 2021-2026年中國縫紉機(jī)針行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報告
- 2025年度建筑工程項(xiàng)目管理咨詢合同
- 喘氣困難申請書
- 員工辭職申請書格式
- 2025年中國清熱解毒顆粒行業(yè)市場深度分析及發(fā)展前景預(yù)測報告
- 浪潮銷售在線測評題
- 外研版小學(xué)英語1-6年級全冊單詞表
- 安全閥校驗(yàn)標(biāo)準(zhǔn)
- 耳穴壓豆課件
- 建筑制圖與識圖教學(xué)課件:第八章 結(jié)構(gòu)施工圖
- (高清版)DB15∕T 3585-2024 高標(biāo)準(zhǔn)農(nóng)田施工質(zhì)量評定規(guī)程
- 試油(氣)HSE作業(yè)指導(dǎo)書
- 中醫(yī)藥三方合作協(xié)議書范本
- 2024年《動漫藝術(shù)概論》自考復(fù)習(xí)題庫(附答案)
- 2024年職業(yè)技能“大數(shù)據(jù)考試”專業(yè)技術(shù)人員繼續(xù)教育考試題庫與答案
- 新時代勞動教育教程(高校勞動教育課程)全套教學(xué)課件
評論
0/150
提交評論