版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 長春理工大學(xué) 摘要 近年來隨著國民經(jīng)濟的持續(xù)快速發(fā)展,在工業(yè)、民用等諸多領(lǐng)域,視頻信息無線傳輸?shù)男枨笤谌找嬖鲩L。比如在電力系統(tǒng)中,隨著輸電電壓等級的不斷提高,電網(wǎng)的分布也越來越廣,實時遠(yuǎn)程視頻傳輸成為必要。本文在對嵌入式系統(tǒng)和3G網(wǎng)絡(luò)大量研究的基礎(chǔ)上提出了一套無線視頻傳輸系統(tǒng)架構(gòu),該系統(tǒng)基于ARM技術(shù)進行了視頻采集,視頻傳輸?shù)挠布娐泛蛙浖绦虻脑O(shè)計,使得通過攝像頭采集的視頻數(shù)據(jù)能夠從局域網(wǎng)傳到客戶機上,實現(xiàn)了實時的視頻監(jiān)控。該設(shè)計中基于ARM系統(tǒng)的主要單元完成了實驗室模擬仿真。驗證了設(shè)計的正確性。為3 關(guān)鍵詞:圖像,視頻,3G,ARM,嵌入式系統(tǒng), ABSTRACT Recent year
2、s, with sustained rapid growth in the industrial, civil and other areas, the demand for wireless transmission of video information in ever-increasing.In power system, with the continuous improvement of the transmission voltage levels, more and more extensive distribution network, real-time remote vi
3、deo transmission become necessary.In this paper, in the embedded system and a large number of 3G networks based on a set of wireless video transmission system architecture, which is based on ARM technology, video capture, video transmission hardware and softwaredesign, makes the adoption of camera c
4、an capture video data transmitted from the LAN client to achieve the real-time video surveillance.The ARM system design based on the completion of the main unit of the laboratory simulation.Verify the correctness of the design.For the 3G network to other areas of power systems and remote wireless vi
5、deo surveillance basis. Keywords: Video,Photo, 3G, ARM, embedded system, Linux摘要I第一章. 緒論3 1.1 課題的背景 1.2 課題的研究意義 1.3 論文的主要工作內(nèi)容第二章.3G 2.1 第三代移動通信系統(tǒng)(3G 2.2主要圖象壓縮方法和視頻壓縮標(biāo)準(zhǔn)介紹第三章.基于ARM的圖像采集和基于3G傳輸模塊的硬件設(shè)計11 3.1 S3C 3.2處理器S3C 3.3 USB控制器及USB電路 3.4 S3C2410的UART第四章.基于ARM的圖象采集模塊的軟件設(shè)計15 4.1嵌入式LINUX系統(tǒng)的移植簡介及調(diào)試方法 4
6、.2基于USB接口的視頻圖象采集的軟件實現(xiàn) 4.3圖像數(shù)據(jù)的M-JPEG壓縮編碼第五章系統(tǒng)通信功能實驗室仿真及調(diào)試結(jié)果30 5.1 C/S 5.2具體各個應(yīng)用程序和在圖象傳輸系統(tǒng)中程序集成后的運行結(jié)果致謝34參考文獻35 第一章 緒 論 圖像的獲取是由視頻采集部分來完成的,采集的視頻可以分成模擬視頻和數(shù)字視頻兩種。圖像的轉(zhuǎn)換和播放是由終端的計算機或者其他嵌入式產(chǎn)品程序完成,屬于對圖像的應(yīng)用范疇。很顯然,視頻的采集與對視頻展開的應(yīng)用常常不是在同一個地方完成的,因此有一個通信過程:負(fù)責(zé)將前端采集的模擬或者數(shù)字視頻進行有效、可靠地傳輸。特別是針對圖像應(yīng)用而進行的通信研究被稱為圖像通信。隨著3G技術(shù)的
7、日漸成熟和Internet網(wǎng)絡(luò)的普及,隨時隨地查看需要的視頻資料或者監(jiān)控圖像成為一個趨勢,有著極其廣泛的市場和應(yīng)用。而計算機技術(shù)是通信技術(shù)發(fā)展的強大技術(shù)支撐,信息社會是這兩大技術(shù)完美融合的產(chǎn)物。計算機的硬件系統(tǒng)有朝著面向應(yīng)用的片上系統(tǒng)(SOC:System On Chip)發(fā)展的趨勢:片上系統(tǒng)就是指將某類應(yīng)用有關(guān)的常用外設(shè)與計算機的CPU1.1課題的背景 圖像視頻傳輸概念廣泛,包括多種用途:可視通話、視頻點播,視頻監(jiān)控等等,基于安防需求的實時遠(yuǎn)距離視頻監(jiān)控系統(tǒng)有著很廣泛的應(yīng)用價值,是圖像視頻傳輸?shù)牡湫瓦\用,本課題的提出是針對視頻監(jiān)控的新需求,采用ARM微處理器設(shè)計實現(xiàn)的對設(shè)備的遠(yuǎn)程監(jiān)控系統(tǒng)。本
8、章將主要介紹視頻監(jiān)控系統(tǒng)的發(fā)展現(xiàn)狀以及所用到的嵌入式系統(tǒng)和微處理器ARM的發(fā)展現(xiàn)狀。1.1.1嵌入式系統(tǒng)的發(fā)展現(xiàn)狀 嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計算機硬件系統(tǒng)之中。簡單的說就是系統(tǒng)的應(yīng)用軟件與系統(tǒng)的硬件一體化,類似與BIOS的工作方式。具有軟件代碼小,高度自動化,響應(yīng)速度快等特點。特別適合于要求實時的和多任務(wù)的體系。從功能應(yīng)用特征上定義,嵌入式系統(tǒng)則是以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)已經(jīng)在家庭和工業(yè)的各個領(lǐng)域得到了應(yīng)用,因為計算機芯片是嵌入在有關(guān)的設(shè)備中的,所以沒有自己獨立的外殼。目前大
9、多數(shù)嵌入式系統(tǒng)還處于單獨應(yīng)用的階段,以MCU為核心,與一些監(jiān)測、伺服、指示設(shè)備配合實現(xiàn)一定的功能。在一些工業(yè)和汽車應(yīng)用中,為了實現(xiàn)多個MCU之間的信息交流,利用CAN,RS-232,RS-485等總線將MCU組網(wǎng),但這種網(wǎng)絡(luò)的有效半徑比較有限,并且一般是孤立于Internet以外的。二十一世紀(jì)無疑是一個Internet時代,這一時代的到來正在不可避免地逐步改變?nèi)藗內(nèi)粘5墓ぷ?、學(xué)習(xí)和生活習(xí)慣,以手持電腦、機頂盒、網(wǎng)絡(luò)電話、住宅網(wǎng)間連接器等為代表的移動辦公設(shè)各和家庭網(wǎng)絡(luò)產(chǎn)品將在不久的將來形成時尚,在未來的信息社會中扮演重要的角色。嵌入式系統(tǒng)接入Internet是一種必然的發(fā)展趨勢。嵌入式系統(tǒng)連接到
10、Internet上面,可以方便、低廉地將信息傳送到幾乎世界上的任何一個地方。利用該技術(shù),能夠?qū)nternet延伸到嵌入式系統(tǒng),并實現(xiàn)基于Internet的遠(yuǎn)程數(shù)據(jù)采集、遠(yuǎn)程控制、自動報警、上傳/下載數(shù)據(jù)文件、自動發(fā)送e-Mail等功能,為IST(Internet Sensor Technology)網(wǎng)絡(luò)傳感器技術(shù))、HVAC(家庭環(huán)境自動控制)、信息家電、工業(yè)自動化(制藥土業(yè)過程控制、電力系統(tǒng)、電網(wǎng)安全、電網(wǎng)設(shè)備監(jiān)測、石油化工系統(tǒng))、局部環(huán)境自動監(jiān)測、智能小區(qū)管理、網(wǎng)絡(luò)自動抄表、高速公路出入口管理、POS網(wǎng)絡(luò)及電子商務(wù)等技術(shù)的應(yīng)用與發(fā)展提供了技術(shù)保證。將嵌入式系統(tǒng)與Internet結(jié)合起來的
11、想法其實很早以前就有了,主要的困難在于,Internet上面的各種通信協(xié)議對于計算機存儲器、運算速度等的要求比較高,而嵌入式系統(tǒng)中除部分32位處理器以外,大量存在的是8位和16位MCU,若支持TCP/IP等Internet協(xié)議將占用大量系統(tǒng)資源,或根本不可能。因而采用高性能的嵌入式處理器成為設(shè)計嵌入式Internet系統(tǒng)的關(guān)鍵。隨著技術(shù)的小斷發(fā)展,高性能的嵌入式處理器不斷涌現(xiàn),如IBM PowerPC,Motorola PowerPC.Intel x86,MIPS,ARM等系列。因此采用高性能的嵌入式處理器設(shè)計嵌入式Internet成為可能。1.2課題的研究意義 近年來隨著國民經(jīng)濟的持續(xù)快速發(fā)
12、展,輸電電壓等級不斷提高,電網(wǎng)的分布也越來越廣,電力安全問題也表現(xiàn)得尤為突出。輸電線路具有分散性大、距離長、難以維護等特點,近年來事故逐年上升,傳統(tǒng)的巡視方式已不能滿足現(xiàn)有的安全需求。因此,急需一種有力的監(jiān)控、監(jiān)測手段對輸電線路上的重要設(shè)備和周邊狀況進行全天候監(jiān)測,使輸電線路運行于可視可控之中。本課題利用嵌入式系統(tǒng)、視頻壓縮及3G網(wǎng)絡(luò)可進行隨時隨地的將視頻監(jiān)控圖象傳送到遠(yuǎn)程監(jiān)控中心和用戶的PDA手機中,完成實時的視頻采集和瀏覽,并可以利用本系統(tǒng)進行多種基于3G無線網(wǎng)絡(luò)的視頻擴展,最終可以達(dá)到移動終端對移動終端、移動終端對Internet整個系統(tǒng)的框圖如圖1.1所示: 圖1.1基于3G網(wǎng)絡(luò)的視頻
13、傳輸系統(tǒng) 系統(tǒng)主要分為四個部分:視頻采集端、視頻發(fā)送模塊、流媒體服務(wù)器端,用戶終端。1.視頻采集端(圖中的藍(lán)框部分)為對模擬的監(jiān)控攝像頭進行A/D轉(zhuǎn)化,并通過DSP進行H.264視頻編碼,在后一章將會介紹H.264視頻壓縮編碼是目前最適合無線網(wǎng)絡(luò)傳輸?shù)囊环N編碼格式。將視頻數(shù)據(jù)通過USB接口傳給ARM處理器。2.視頻發(fā)送端(圖中的紅框部分)將讀取進來的已壓縮好的視頻數(shù)據(jù)對其進行TCP/IP協(xié)議的打包,并通過3G3.流媒體視頻服務(wù)器(圖中紫框部分包含)進行對各個端點的視頻接收和回應(yīng)用戶的需求,建立一個用戶同遠(yuǎn)程監(jiān)控端的橋梁,并保證視頻數(shù)據(jù)隨時復(fù)制備份。用戶終端(圖中黑框部分),用戶可以分為PDA手
14、機和接入Internet網(wǎng)絡(luò)的計算機用戶,通過C/S構(gòu)架和B/S構(gòu)架兩種方式經(jīng)流煤體服務(wù)器瀏覽所需實時視頻內(nèi)容。而在本文中,由于3G網(wǎng)絡(luò)還未成熟,目前也沒有3G模塊,而在視頻采集端的設(shè)計部分還有待完善,所以在本論文主要進行了基于ARM核心系統(tǒng)的研究與設(shè)計,將原本設(shè)計中的1、3、4部分都進行了有效的替代,主要對第1,2部分也就是核心的ARM視頻采集端由USB數(shù)碼攝像頭代替對模擬攝像頭的轉(zhuǎn)換和編碼,用ARM實現(xiàn)M-JPEG壓縮代替原有的DSP中H.264的編碼。4.視頻發(fā)送模塊,利用ARM處理器連接DM9000芯片與局域網(wǎng)連接傳輸代替原3G模塊。利用實驗室局域網(wǎng)的傳輸代替原來的通過無線網(wǎng)絡(luò)和INT
15、ERNET的傳輸路徑。用局域網(wǎng)電腦終端代替原有的手機用戶和INTERNET 圖1.2實驗室模擬結(jié)構(gòu)圖1.3論文的主要工作內(nèi)容 系統(tǒng)在經(jīng)過對3G網(wǎng)絡(luò)的學(xué)習(xí)和深刻理解后,對于嵌入式系統(tǒng)的整體架構(gòu)進行了設(shè)計,并進行了可實現(xiàn)性的分析和調(diào)研,對于整體工作架構(gòu)進行了完整的設(shè)計和分工,并對其中的核心部分(基于嵌入式Linux系統(tǒng)的ARM控制器)進行了電路設(shè)計和軟件設(shè)計,并對3G網(wǎng)絡(luò)和視頻壓縮系統(tǒng)進行了有效的替代和模擬,不僅完成了視頻數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸,而且對于一些細(xì)節(jié)問題在實際的實驗中對一些原有的東西進行了改進。由局域網(wǎng)代替模擬,而在進行DSP視頻壓縮的時候,由于這個也是比較大的工程,實驗室目前條件有限,所
16、以我們由USB數(shù)碼攝像頭代替模擬攝像頭和A/D轉(zhuǎn)換,在ARM處理器里用相對簡單的M-JPEG壓縮算法代替原本需要DSP中進行的本課題的主要工作1.熟悉嵌入式Linux開發(fā)環(huán)境。2.研究了3G3.對圖像壓縮的相關(guān)技術(shù)進行了研究。4.研究并了解視頻監(jiān)控和視頻傳輸系統(tǒng)。5.研究USB的驅(qū)動開發(fā),特別是針對USB攝像頭驅(qū)動,研究Video4Linux編程。6.研究對USB攝像頭操作的上層應(yīng)用程序開發(fā)。7.研究Linux下Socket通信編程。 第二章3G 本章首先對3G網(wǎng)絡(luò)進行了詳細(xì)的研究,并結(jié)合多種視頻壓縮技術(shù)和視頻傳輸技術(shù),最終結(jié)合3G網(wǎng)絡(luò)、視頻壓縮標(biāo)準(zhǔn)及視頻傳輸方法得出,利用H.264視頻編碼標(biāo)
17、準(zhǔn),利用流媒體視頻傳輸技術(shù)在3G2.1 3G2.1.1第三代移動通信系統(tǒng)(3G 20世紀(jì)90年代以來,隨著數(shù)字技術(shù)的發(fā)展,以數(shù)字傳輸、時分多址/頻分雙工、碼分多址/頻分雙工為主體的第二代數(shù)字移動通信系統(tǒng)(2G)逐漸代替了第一代模擬移動通信系統(tǒng)。其技術(shù)進步表現(xiàn)在以下幾個方面:完善了呼叫處理和網(wǎng)絡(luò)管理功能、頻譜效率提高、系統(tǒng)容量增大、保密性好、標(biāo)準(zhǔn)化程度高。第二代數(shù)字移動系統(tǒng)的成功不僅體現(xiàn)在技術(shù)上,在商業(yè)上也取得很大的成就,國際上商用的2G系統(tǒng)有歐洲的GSM系統(tǒng)、日本的PDC和美國的CDMA(IS-95)等。國內(nèi)目前2G系統(tǒng)有兩大運營商,中國移動采用GPRS系統(tǒng)(GSM升級版),而中國聯(lián)通采用CD
18、MA系統(tǒng)。1998年起,ITU-T綜合標(biāo)準(zhǔn)化組織綜合各國標(biāo)準(zhǔn)化組織提出的建議,開始制定和不斷完善第三代移動通信標(biāo)準(zhǔn)IMT-2000。第一、二代蜂窩移動通信系統(tǒng)主要針對傳統(tǒng)的語音和低速率數(shù)據(jù)業(yè)務(wù),而第三代移動通信系統(tǒng)(3G)主要面向高速率數(shù)據(jù)業(yè)務(wù)。3G有更大的系統(tǒng)容量和更靈活的高速率、多速率數(shù)據(jù)傳輸,除了語音和數(shù)據(jù)傳輸業(yè)務(wù),還能提供高達(dá)2Mbps的高質(zhì)量多媒體業(yè)務(wù)。根據(jù)無線空中接口技術(shù)的不同,現(xiàn)有3G技術(shù)大致可以分為3類:由歐洲和日本提出的WCDMA系統(tǒng)、由美國提出的CDMA2000系統(tǒng)和由中國提出的TD-SCDMA系統(tǒng)。其中WCDMA-FDD系統(tǒng)采用碼分多址、頻分雙工的工作方式,上下行頻率間隔
19、為95MHz,采用直接序列(DS)作為信息擴頻方式。而WCDMA-TDD系統(tǒng)和TD-SCMDA系統(tǒng)都采用碼分多址/時分多址、時分雙工的工作方式,兩者的區(qū)別在于擴頻碼的速率不同,前者采用高碼片速率3.84Mcps,而后者采用地碼片速率1.28Mcps。CDMA2000采用碼分多址、頻分雙工的工作方式,在下行鏈路傳輸中,定義了直擴和多載波兩種工作方式,碼片速率分別為3.6864Mcps和1.22Mcps。而在歐洲,采用WCDMA作為無線空中接口技術(shù)的3G系統(tǒng)又被稱為通用移動通信系統(tǒng)UMTS(Universal Mobile Telecommunications System)?,F(xiàn)有支持IMT-20
20、00的標(biāo)準(zhǔn)化組織主要是3GPP和3GPP2。其中3GPP稱為3G合作伙伴項目,負(fù)責(zé)制定以原有GSM核心網(wǎng)絡(luò)演變的3G標(biāo)準(zhǔn),以WCDMA,TD-SCDMA為空中接口技術(shù)。3GPP稱為3G合作伙伴項目,負(fù)責(zé)制定ANSII-41核心網(wǎng)為基礎(chǔ),CDMA2000為無線空中接口的3G技術(shù)規(guī)范?,F(xiàn)在成熟的3GPP2.2主要圖象壓縮方法和視頻壓縮標(biāo)準(zhǔn)介紹 視頻傳輸應(yīng)用系統(tǒng)多以數(shù)字視頻處理技術(shù)為基礎(chǔ),利用圖像數(shù)據(jù)壓縮的國際標(biāo)準(zhǔn)(M-JPEG,MPEG-1或MPEG-4,H.264等),綜合利用圖像傳感器、計算機網(wǎng)絡(luò)、自動控制和人工智能等技術(shù)的流媒體傳輸系統(tǒng)。這類應(yīng)用系統(tǒng)將視頻捕捉設(shè)備獲得的模擬視頻信號轉(zhuǎn)變?yōu)閿?shù)字
21、視頻信號以便于計算機處理,或者由數(shù)字?jǐn)z像機直接輸出數(shù)字視頻信號,經(jīng)過壓縮處理,再通過網(wǎng)絡(luò)將數(shù)據(jù)傳輸?shù)綄Ψ健?shù)字視頻信號具有頻譜效率高、抗干擾能力強、失真少等模擬信號無法比擬的特點,同時也具有信號處理數(shù)據(jù)量大、占用資源多的問題,正由于這個原因,造成數(shù)字視頻傳輸應(yīng)用系統(tǒng)雖然具有很多的優(yōu)點,但其實際應(yīng)用范圍不能得到更大的擴展。只有對數(shù)字視頻信號實現(xiàn)更有效地壓縮,使之在通信和存儲方面的開銷降到最低,它的優(yōu)點才能表現(xiàn)出來,數(shù)字視頻應(yīng)用才有可能全面發(fā)展起來。將模擬視頻信號轉(zhuǎn)化為數(shù)字視頻信號包括不少技術(shù)問題。模擬視頻的數(shù)字化主要包括色彩空間的轉(zhuǎn)換、光柵掃描的轉(zhuǎn)換以及分辨率的統(tǒng)一。模擬視頻一般采用分量數(shù)字化方
22、式,先把復(fù)合視頻信號中的亮度和色度分離,得到Y(jié)UV或YIQ分量,然后用三個模數(shù)轉(zhuǎn)換器對三個分量分別進行數(shù)字化,最后轉(zhuǎn)換成RGB(Red,Breen,Blue,三原色)空間。根據(jù)電信號的特征,亮度信號的寬度是色度信號帶寬的兩倍。因此其數(shù)字化時可采用幅色采樣法,即信號的色差分量的采樣率低于對亮度分量的采樣率。用Y:U:V來表示YUV三分量的采樣比例,則數(shù)字視頻的采樣格式分別有4:1:1,4:2:2和4:4:4三種。電視圖像既是空間的函數(shù),也是時間的函數(shù),而且又是隔行掃描式,所以其采樣方式比掃描儀圖像的方式要復(fù)雜的多。分量采樣時采集到的隔行樣本點,要把隔行樣本組合成逐行樣本,然后進行樣本采樣點的量化
23、,YUV到RGB色彩空間的轉(zhuǎn)換等等,最后才能得到數(shù)字視頻數(shù)據(jù)。2.2.1圖象壓縮的主要基本方法簡介 數(shù)據(jù)之所以能夠壓縮是基于原始信源的數(shù)據(jù)存在著很大的冗余度。隨著數(shù)字通信技術(shù)和計算機技術(shù)的發(fā)展,數(shù)據(jù)壓縮技術(shù)日臻完善,適合各種應(yīng)用場合的編碼方法不斷產(chǎn)生。目前常用的壓縮編碼方法可以分為兩大類:一類是無損壓縮法,也稱冗余壓縮法或嫡編碼法;另一類是有損壓縮,也稱嫡壓縮法。1.幀內(nèi)和幀間壓縮幀內(nèi)數(shù)據(jù)是指一幀畫面內(nèi)水平和垂直方向取樣點的集合,或稱圖像空間。把只利用空間冗余度的技術(shù)歸類為幀內(nèi)編碼技術(shù)。幀內(nèi)編碼的例子有幀內(nèi)預(yù)測編碼(DPCM)、二維離散余弦變換(DCT)、矢量量化(VQ)、子帶編碼和塔形編碼等
24、。由于幀內(nèi)編碼不涉及時間維的信息量,不能獲得如幀間編碼那樣高的壓縮水平。在幀間方法中,需要同時考慮空間和時間的冗余度。然而,幀內(nèi)編碼的實現(xiàn)相對而言比較簡單,編碼器中不需要用以處理相鄰幀數(shù)據(jù)的存儲器,不需要在1個幀的間隔時間內(nèi)處理來自多幀的信息。2.預(yù)測編碼預(yù)測編碼的原理是由鄰近的像素值預(yù)測當(dāng)前的像素值,然后對當(dāng)前的像素和預(yù)測像素的差值進行量化和編碼??紤]到在高性能和復(fù)雜性之間的折衷,通常用于幀內(nèi)預(yù)測的鄰近像素的個數(shù)并不多(不超過4個),使用更多的像素并不會顯著改進預(yù)測性能。對于幀間預(yù)測,一般只用相鄰幀的對應(yīng)像素進行預(yù)測。圖像的相關(guān)性越大,預(yù)測誤差就越小,取得的壓縮比也就越大。相對說來,DPCM
25、是一種比較容易實現(xiàn)的壓縮方法,但在較低的速率時,其壓縮能力一般不如變換編碼好。3.變換編碼正交變換的理論證明,通過某種正交變換,可以把數(shù)據(jù)從圖像域映射到變換域中去,總能量不變,但其分布則發(fā)生改變,集中分布在少數(shù)區(qū)域,形成一種更緊湊的形式。這使得圖像在變換域中可以用更少的比特數(shù)表示,以此獲得壓縮。盡管正交變換有許多種,但實用中大都選用二維DCT(離散余弦變換)進行變換編碼。這是因為其性能優(yōu)越,接近最佳的K-L變換。將一幅圖像分割為多個相鄰小方塊,對每個單獨的圖像方塊進行DCT變換。圖像塊尺寸的選擇是在圖像質(zhì)量、壓縮效率和實現(xiàn)難度之間進行折衷而決定的。在實際應(yīng)用中,常選8X8或16X16的圖像塊。
26、4.變長編碼它包括2部分,即一維游程編碼和霍夫曼編碼。圖像經(jīng)DCT(離散余弦變換),變換和量化后形成為數(shù)眾多的零系數(shù),而且這些系數(shù)大部分集中在高頻部分。為了充分利用這一點,在進行游程編碼時,對8X8圖像塊的DCT系數(shù)采用曲折掃描順序處理,以期獲得較長的連零值,有利于其后的游程編碼。游程編碼將曲折掃描后的系數(shù)變成若干對(游程一幅值)數(shù)據(jù)這里,游程是指連零的個數(shù),幅值是指非零系數(shù)的值。 第三章 基于ARM的圖像采集和傳輸模塊的硬件設(shè)計 本系統(tǒng)以基于ARM9的嵌入式處理器三星S3C2410芯片為核心,S3C2410芯片的功能很強大,集成了各種常用的重要接口,如USB接口、UART、SPI、I2C、S
27、D卡、ADC通道和觸摸屏接口等。接口應(yīng)用范圍很廣,適用于信息家電、智能電話、工業(yè)控制、手持設(shè)備、移動終端等領(lǐng)域15。利用S3C2410強大的擴展功能,根據(jù)本項目的實際需要設(shè)計了如圖3.1中的硬件系統(tǒng),其中USB接口數(shù)碼攝像頭、串口、網(wǎng)口作為輸入輸出設(shè)備,F(xiàn)LASH和SDRAM作為存儲器設(shè)備,JTAG口是用來把嵌入式Linux操作系統(tǒng)和應(yīng)用程序燒寫進FLASH存儲器的,下面具體介紹各部分的設(shè)計。其中RS232接口是從PC機的串口下載編譯的內(nèi)核和軟件,F(xiàn)LASH和SDRAM則相當(dāng)與PC機上的硬盤和內(nèi)存,JTAG接口為調(diào)試所使用,數(shù)碼攝像頭和DM9000芯片為實驗室下的視頻數(shù)據(jù)采集和發(fā)送端。數(shù)碼攝像
28、頭和S3C2410芯片共同構(gòu)成了視頻數(shù)據(jù)采集端,通過以太網(wǎng)控制芯片 圖3.1系統(tǒng)硬件結(jié)構(gòu)框圖3.1 S3C2410 S3C2410存儲器控制器提供外部存儲器存取的控制信號,它具有如下特性:數(shù)據(jù)存儲在存儲器的方式可以通過軟件設(shè)置成大端和小端兩種方式,系統(tǒng)的存儲空間分成8個bank,每個bank的大小是128M字節(jié),共1G字節(jié),采用nGCS7:08個通用片選線信號選擇8個bank區(qū),圖3.2是S3C2410復(fù)位后的存儲空間分布圖;bank0到bank5的開始地址是固定的,用于ROM或SRAM;bank6和bank7用于ROM、SRAM或SDRAM,bank6地址也是固定的,bank7的開始地址是b
29、ank6的結(jié)束地址,起始地址和大小編程可變;所有內(nèi)存塊的訪問周期都可編程,外部Wait擴展了訪問周期;除了bank0,其余的存儲段可以通過程序控制存取的位數(shù)8/16/32;支持SDRAM3.2處理器S3C2410 處理器S3C2410中沒有集成網(wǎng)絡(luò)控制器,要實現(xiàn)網(wǎng)絡(luò)連接,必須使用網(wǎng)絡(luò)接口芯片進行擴展。DM9000是完全綜合的、成本較低的快速以太網(wǎng)控制器芯片,具有通用的處理器接口,10/100M自適應(yīng),以及4K雙字節(jié)靜態(tài)存取存儲器。它具有低功耗、高處理性能的特點,支持3.3V到5V的容差,支持MII接口和可選的EEPROM配置,支持8位16位32位的接口來適應(yīng)不同的處理器對內(nèi)部存儲器的訪問,完全
30、支持IEEE802.3u規(guī)格和IEEE 802.3X S3C2410與DM9000的連接框圖如3.5所示,通過網(wǎng)絡(luò)變壓器連接的RJ45接口可以直接連接到外部網(wǎng)絡(luò)中去。DM9000支持ISA異步總線接口,該ISA接口支持對內(nèi)部存儲器數(shù)據(jù)操作的8位和16位I/O模式,這里采用的是其中16位數(shù)據(jù)I/O模式,DM9000的16位數(shù)據(jù)線SD00:15與CPU S3C2410的低16位數(shù)據(jù)總線DATA00:15相連,DM9000的地址線SA4SA9用來選擇其中的I/O端口的基地址,基地址是可在300H370H 圖3.2 S3C2410芯片復(fù)位后的存儲空間復(fù)位圖 圖中把SA9和SA8連接到VCC,SA4SA
31、7接GND,這樣就把DM9000的I/O基地址設(shè)置為300H,如果在DM9000外圍配置了EEPROM的話,也是可以通過對EEPROM編程來重新設(shè)置這個地址值的;引腳AEN起地址使能作用,S3C2410利用片選控制線nGCS1提供對AEN的信號輸入,實現(xiàn)對DM9000的片選,這樣DM9000位于存儲空間的nGCS1+300H位置;CMD引腳來決定操作時訪問的是數(shù)據(jù)端口還是地址端口,這里由S3C2410的地址總線中的ADDR2信號來提供,當(dāng)輸入為低電平時,訪問的是地址端口,DM9000設(shè)備地址端口為nGCS1+300H+0,當(dāng)輸入為高電平時,訪問的是數(shù)據(jù)端口,DM9000設(shè)備數(shù)據(jù)端口為nGCS1
32、+300H+4;DM9000占用S3C2410的24路外部中斷的EINT0,引腳PW_RST#與S3C2410的nRESET相連實現(xiàn)硬件復(fù)位功能,引腳X2_25M和X1_25M外接一個25M晶體產(chǎn)生DM9000本身的系統(tǒng)時鐘和網(wǎng)絡(luò)時鐘;網(wǎng)絡(luò)連接及數(shù)據(jù)收發(fā)狀態(tài)由LED指示,LINK3.3 USB控制器及USB電路 S3C2410集成了USB主機控制器和設(shè)備控制器,在外部有2個USB主機接口和一個設(shè)備接口。通用串行總線(USB)設(shè)備控制器設(shè)計用DMA接口提供一個高性能完備的速率功能控制解決方案,它支持USB1.1協(xié)議版本,有懸空和喚醒功能,USB控制器允許使用DMA的批量傳輸、中斷傳輸和控制傳輸三
33、種傳輸方式。S3C2410引出USB連接口十分方便,按照USB1.1標(biāo)準(zhǔn)協(xié)議連接即可,同時支持低速和高速的USB設(shè)備傳輸。在這里我們擴展的是主USB接口,應(yīng)將D+接S3C2410的DP,D-接DN,電路如圖3.3所示,本系統(tǒng)中的USB口數(shù)碼攝像頭就是連接在USB 圖3.3 S3C2410芯片與USB接口框圖3.4 S3C2410的UART 圖3.7 S3C2410芯片與UART接口電路框圖 S3C2410的UART提供3個獨立通道的異步串行輸入輸出口,每一個都可工作在中斷模式和DMA模式下。如果用系統(tǒng)時鐘,UART可支持達(dá)230.4Kbps的位速率;如果用外部設(shè)備通過UCLK提供的時鐘,那么U
34、ART可工作在更高的速率;3個UART都可用作紅外線接口。S3C2410可以很方便地用UART實現(xiàn)RS-232串口功能,但S3C2410的供電電壓為1.8V/3.3V,所以I/O口的最大邏輯電平也是3.3V,要實現(xiàn)RS232串口功能還要加電平轉(zhuǎn)換電路,我們用MAX3232來實現(xiàn)這一功能。MAX3232單+3.3V電源供電,僅需外接幾個電容即可完成從TTL/CMOS 第四章基于ARM的圖象采集模塊的軟件設(shè)計 本章介紹ARM圖象采集端中軟件的設(shè)計方法和主要內(nèi)容。包括程序的移植和調(diào)試方法,同時包括了主要的2個部分:USB口數(shù)碼攝像頭的視頻采集模塊編寫(包括攝像頭驅(qū)動和Video4Linux下攝像頭采
35、集編程)和M-JPEG壓縮算法。4.1嵌入式LINUX系統(tǒng)的移植簡介及調(diào)試方法4.1.1 BOOTLOADER(引導(dǎo)加載程序)移植BOOTLOADER(引導(dǎo)加載程序)是在操作系統(tǒng)內(nèi)核運行之前運行的第一段代碼通過這段代碼。我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖。從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài).以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。對于PC機的Linux體系結(jié)構(gòu).PC機中的引導(dǎo)加載程序由BIOS和位于硬盤MBR的操作系統(tǒng)引導(dǎo)加載程序組成BIOS在完成硬件檢測和資源分配后.將硬盤MBR中的BOOTLOADER讀到系統(tǒng)的RAM中。然后將控制權(quán)交給操作系統(tǒng)BOOTLOADER引導(dǎo)加
36、載程序的主要運行任務(wù)就是將內(nèi)核映像從硬盤上讀到RAM中。然后跳轉(zhuǎn)到內(nèi)核的入口點去運行。即開始啟動操作系統(tǒng)在嵌入式系統(tǒng)中。通常并沒有像BIOS那樣的固件程序。因此在整個系統(tǒng)的加載啟動任務(wù)就完全由BOOTLOADER來完成。4.1.2 Linux內(nèi)核編譯 交義編譯工具被安裝到/usr/local目錄下,故應(yīng)該設(shè)置環(huán)境變量PATH,使其包含/usr/local/bin路徑。在這個目求包含arm linux的源碼壓縮包以及一此例子程序。#PATH=/usr/local/bin:$PATH內(nèi)核都是常駐內(nèi)存的,當(dāng)需要調(diào)用應(yīng)用程序時,再把需要的程序從磁盤調(diào)入內(nèi)存運行。構(gòu)建內(nèi)核常用的命令如下:.make co
37、nfig:配置內(nèi)核,調(diào)用./scripts/Congigure來進行配置.make dep:鏈接程序代碼及函數(shù)庫,創(chuàng)建依賴性列表.make clean:清除原有的編譯生成的文件.make zlmage:生成可壓縮的內(nèi)核映象文件./arch/$(ARCH)/bcot/zlmagearm linux的內(nèi)核在編譯結(jié)束后會在arm linux-dist/目求下產(chǎn)生兩個新的目錄images/和romfs/。Images目錄中包含了編譯完成后可以下載到目標(biāo)板上運行的arm linux內(nèi)核映象的二進制文件。我們可以在rom fs/bin/目錄下添加自己的應(yīng)用程序,當(dāng)然這里的應(yīng)用程序是指經(jīng)過arm-elf交叉
38、編譯工具編譯,可在目標(biāo)板上運行的程序。4.1.3軟件調(diào)試方法 緒論中提到,由于嵌入式系統(tǒng)平臺資源有限性的特點,其軟件開發(fā)時采用一種交叉編譯調(diào)試的方式,交叉編譯調(diào)試環(huán)境建立在宿主機(通用PC機)上,開發(fā)時使用宿主機上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進制代碼,通過NFS方式把宿主機上可執(zhí)行文件mount加載到目標(biāo)平臺上,調(diào)試信息通過串口打印在宿主機的minicom屏幕上,通過在串口終端這樣反復(fù)調(diào)試、更改、編譯再調(diào)試,而不必每次燒寫到目標(biāo)平臺的FLASH中,直至程序工作正常,得到正確的運行結(jié)果,然后才把可執(zhí)行文件下載燒寫到目標(biāo)平臺上(在這里指以S3C2410為處理器的嵌入式系統(tǒng)平臺)運行,可
39、執(zhí)行文件是燒寫在平臺上的FLASH 圖4.1 FLASH中代碼存放位置 4.2基于USB接口的視頻圖象采集的軟件實現(xiàn) 本嵌入式系統(tǒng)平臺上運行的是armlinux,在啟動后啟用了MMU,系統(tǒng)進入保護模式,所以應(yīng)用程序就不能直接讀寫外設(shè)的I/O區(qū)域(包括I/O端口和I/O內(nèi)存),一般這時就要借助于該外設(shè)的驅(qū)動來進入內(nèi)核態(tài)完成這個工作。所以本系統(tǒng)中的視頻采集要分兩步實現(xiàn):一步是為USB口數(shù)碼攝像頭在內(nèi)核中寫個驅(qū)動,另一步是要再寫個上層應(yīng)用程序獲取視頻數(shù)據(jù)。下面分別進行討論。4.2.1 USB口數(shù)碼攝像頭的驅(qū)動實現(xiàn) 圖4.2 Linux下的驅(qū)動實現(xiàn)原理框圖 在Linux下,所有外部設(shè)備被看成是一類特殊
40、文件,稱之為“設(shè)備文件”,系統(tǒng)中的所有硬件設(shè)備都可使用一個特殊的設(shè)備文件來表示,例如,系統(tǒng)中的數(shù)碼攝像頭使用/dev/Video0來表示。每個設(shè)備文件對應(yīng)有兩個設(shè)備號:一個是主設(shè)備號,標(biāo)識該設(shè)備的種類,也標(biāo)識了該設(shè)備所使用的驅(qū)動程序;另一個是次設(shè)備號,標(biāo)識使用同一設(shè)備驅(qū)動程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號必須與設(shè)備驅(qū)動程序在登錄該設(shè)備時申請的主設(shè)備號一致,否則用戶進程將無法訪問到設(shè)備驅(qū)動程序。在Linux操作系統(tǒng)下有兩類主要的設(shè)備文件:一類是字符設(shè)備,另一類則是塊設(shè)備。字符設(shè)備是大多數(shù)只能順序訪問的數(shù)據(jù)通道,不能完全象訪問普通文件數(shù)據(jù)流一樣前后移動訪問指針,不需要經(jīng)過系統(tǒng)的快速緩存,在對字
41、符設(shè)備發(fā)出讀寫請求時,實際的硬件I/O操作緊接著就發(fā)生了,一般來說字符設(shè)備中的緩存是可有可無的;然而也存在和數(shù)據(jù)區(qū)特性類似的字符設(shè)備,訪問它們時可前后移動訪問指針,例如,幀捕捉卡和本系統(tǒng)平臺用的USB口數(shù)碼攝像頭就是這樣一個設(shè)備,應(yīng)用程序可以用mmap或lseek訪問所抓取的整個圖像。塊設(shè)備則是利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),當(dāng)用戶進程對設(shè)備進行讀寫請求時,驅(qū)動程序先查看緩沖區(qū)中的內(nèi)容,如果緩沖區(qū)中的數(shù)據(jù)能滿足用戶的要求就返回相應(yīng)的數(shù)據(jù),否則就調(diào)用相應(yīng)的請求函數(shù)來進行實際的I/O操作。塊設(shè)備主要是針對磁盤等慢速設(shè)備設(shè)計的,其目的是避免耗費過多的CPU時間來等待操作的完成。本系統(tǒng)平臺使用的USB口數(shù)
42、碼攝像頭是字符設(shè)備,因此要做的工作是Linux下字符型設(shè)備驅(qū)動的實現(xiàn)。相對于系統(tǒng)調(diào)用看成是Linux內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動程序可以看成Linux內(nèi)核與外部設(shè)備之間的接口,設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件在實現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備。Linux抽象了對硬件的處理,所有的硬件設(shè)備都可以像普通文件一樣來看待,可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成對硬件設(shè)備打開、關(guān)閉、讀寫和I/O控制等操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。具體來說,Linux下的字符設(shè)備驅(qū)動程序大致可以分為如下幾個部分:驅(qū)動程序的注冊與注銷、設(shè)備的打開與釋
43、放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理。1.驅(qū)動程序的注冊與注銷向系統(tǒng)增加一個驅(qū)動程序意味著要賦予它一個主設(shè)備號,這可以通過在驅(qū)動程序的初始化過程中調(diào)用register_chrdev()來完成。而在關(guān)閉字符設(shè)備時,則需要通過調(diào)用unregister_chrdev()從內(nèi)核中注銷設(shè)備,同時釋放占用的主設(shè)備號。2.設(shè)備的打開與釋放打開設(shè)備是通過調(diào)用file_operations結(jié)構(gòu)中的函數(shù)open()來完成的,它是驅(qū)動程序用來為今后的操作完成初始化準(zhǔn)備工作的。在驅(qū)動程序中,open()需要完成下列工作:1)檢查設(shè)備相關(guān)錯誤,如設(shè)備尚未準(zhǔn)備好等。2)如果是第一次打開,則初始化硬件設(shè)
44、備。3)識別次設(shè)備號,如果有必要則更新讀寫操作的當(dāng)前位置指針f_op。4)分配和填寫要放在file-private_data里的數(shù)據(jù)結(jié)構(gòu),private_data是跨系統(tǒng)調(diào)用時保存狀態(tài)信息的非常有用的資源。5)使用計數(shù)增1。釋放設(shè)備是通過調(diào)用file_operations結(jié)構(gòu)中的函數(shù)release()來完成的,這個設(shè)備方法有時也被稱為close(),它的作用正好與open()相反,要完成下列工作:1)使用計數(shù)減1。2)釋放由open分配的保存在file-private_data中的所有內(nèi)容。3)如果使用計數(shù)為0,則關(guān)閉設(shè)備。3.設(shè)備的讀寫操作字符設(shè)備的讀寫操作相對比較簡單,直接使用函數(shù)read
45、()和write()就可以了。4.設(shè)備的控制操作除了讀寫操作外,應(yīng)用程序有時還需要對設(shè)備進行控制,這可以通過設(shè)備驅(qū)動程序中的函數(shù)ioctl()來完成。ioctl()的用法與具體設(shè)備密切關(guān)聯(lián),因此需要根據(jù)設(shè)備的實際情況進行具體分析,在下面視頻采集程序中用到的多種方式的控制函數(shù)都是在攝像頭驅(qū)動實現(xiàn)的。5.設(shè)備的中斷和輪詢處理對于不支持中斷的硬件設(shè)備,讀寫時需要輪流查詢設(shè)備狀態(tài),以便決定是否繼續(xù)進行數(shù)據(jù)傳輸。如果設(shè)備支持中斷,則可以按中斷方式進行操作。本系統(tǒng)平臺使用的嵌入式armLinux系統(tǒng)在內(nèi)核主要功能上與Linux操作系統(tǒng)沒本質(zhì)區(qū)別,所以驅(qū)動程序要實現(xiàn)的任務(wù)一樣,只是編譯時使用的編譯器、部分頭
46、文件和庫文件等要涉及到具體處理器體系結(jié)構(gòu),這些都可以通過在Makefile文件中具體指定。Video4Linux(簡稱V4L)是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動,它為針對視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù),這些視頻設(shè)備包括現(xiàn)今市場上流行的TV卡、視頻捕捉卡和USB攝像頭等。具體對于USB口攝像頭,其驅(qū)動程序中需要提供基本的I/O操作接口函數(shù)open、read、write、close的實現(xiàn),對中斷的處理實現(xiàn),內(nèi)存映射功能以及對I/O通道的控制接口函數(shù)ioctl等,并把他們定義在struct file_operations中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進行諸如open、close、read、
47、write等系統(tǒng)調(diào)用操作時,嵌入式Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。例如,當(dāng)應(yīng)用程序?qū)υO(shè)備文件執(zhí)行讀操作時,內(nèi)核將調(diào)用file_operations結(jié)構(gòu)中的read函數(shù),具體實現(xiàn)原理如圖4.2所示。Linux下的設(shè)備驅(qū)動程序可以按照兩種方式進行編譯,一種是直接靜態(tài)編譯成內(nèi)核的一部分,另一種則是編譯成可以動態(tài)加載的模塊。如果編譯進內(nèi)核的話,會增加內(nèi)核的大小,還要改動內(nèi)核的源文件,而且不能動態(tài)地卸載,不利于調(diào)試,所以攝像頭驅(qū)動使用模塊方式加載。在系統(tǒng)平臺上對USB口數(shù)碼攝像頭驅(qū)動,首先把USB控制器驅(qū)動模塊靜態(tài)編譯進內(nèi)核,使平臺中支持USB接口,再在需要
48、使用攝像頭采集時使用insmode命令或系統(tǒng)自動(此時要求在/etc/modules.conf中設(shè)備名與驅(qū)動模塊對應(yīng)起來)動態(tài)加載其驅(qū)動模塊(此驅(qū)動模塊為.o后綴名文件,通過使用針對于具體處理器的arm-gcc命令行里加上-c的參數(shù)和D_KERNEL_DMODULE參數(shù),把使用C語言編寫的驅(qū)動程序模塊編譯成.o目標(biāo)文件,加入到/lib/modules/目錄下,然后用depmod-a可加載模塊),驅(qū)動程序中的模塊加載函數(shù)int init_module(void)會被自動調(diào)用,負(fù)責(zé)進行設(shè)備驅(qū)動程序的初始化工作,這樣驅(qū)動就會根據(jù)自己的類型(字符設(shè)備類型或塊設(shè)備類型,例如攝像頭就是字符設(shè)備而硬盤就是塊
49、設(shè)備)向系統(tǒng)注冊,注冊成功系統(tǒng)會反饋一個主設(shè)備號,這個主設(shè)備號就是系統(tǒng)對它的唯一標(biāo)識(攝像頭設(shè)備在/proc/devices中顯示的主設(shè)備號為81,我們用ls-l/dev/Video0看到的主設(shè)備就肯定是81)。驅(qū)動就是根據(jù)此主設(shè)備號來創(chuàng)建一個一般放置在/dev目錄下的設(shè)備文件(mknod命令用來創(chuàng)建它,它必須用主設(shè)備號這個參數(shù)),這樣攝像頭就可正常工作了,4.2.2 Video4Linux下的攝像頭采集編程在USB攝像頭被驅(qū)動后,只需要再編寫一個對視頻流采集的應(yīng)用程序就可以了。根據(jù)嵌入式系統(tǒng)開發(fā)特征,先在宿主機上編寫應(yīng)用程序,再使用交叉編譯器進行編譯鏈接生成在目標(biāo)平臺的可執(zhí)行文件,在宿主機上
50、與目標(biāo)板通信采用打印終端的方式進行交叉調(diào)試,成功后移植到目標(biāo)平臺。(1)程序中定義的數(shù)據(jù)結(jié)構(gòu)struct video_capability grab_cap;struct video_picture grab_pic;struct video_mmap grab_buf;struct video_mbuf grab_vm;這些數(shù)據(jù)結(jié)構(gòu)都是Video4Linux支持的,它們的用途如下:video_capability包含攝像頭的基本信息,例如設(shè)備名稱、支持的最大最小分辨率、信號源信息等,分別對應(yīng)著結(jié)構(gòu)體中成員變量name32、maxwidth、maxheight、minwidth、minheig
51、ht、channels(信號源個數(shù))、type等;video_picture包含設(shè)備采集的圖象的各種屬性,如brightness(亮度)、hue(色調(diào))、contrast(對比度)、whiteness(色度)、depth(深度)等;video_mmap用于內(nèi)存映射;video_mbuf利用mmap進行映射的幀信息,實際上是輸入到攝像頭存儲緩沖中的幀信息,包括size(幀的大小)、frames(最多支持的幀數(shù))、offsets(每幀相對基址的偏移); 圖4.3視頻采集程序流程圖程序中用到的主要系統(tǒng)調(diào)用函數(shù):open(“/dev/video0”,int flagsclose(fd);mmap(vo
52、id*start,size_t length,int prot,int flags,int fd,off_t offset);munmap(void*start,size_t length);ioctl(int fd,int cmd,);前面提到Linux系統(tǒng)中把設(shè)備看成設(shè)備文件,在用戶空間可以通過標(biāo)準(zhǔn)的I/O系統(tǒng)調(diào)用函數(shù)操作設(shè)備文件,從而達(dá)到與設(shè)備通信交互的目的,當(dāng)然在設(shè)備驅(qū)動中要提供對這些函數(shù)相應(yīng)的支持。這里說明一下ioctl(int fd,int cmd,)函數(shù),它在用戶程序中用來控制I/O通道,其中fd代表設(shè)備文件描述符,cmd代表用戶程序?qū)υO(shè)備的控制命令,省略號一般是一個表示類型長度
53、的參數(shù),也可沒有。(2)采集程序?qū)崿F(xiàn)過程首先打開視頻設(shè)備,攝像頭在系統(tǒng)對應(yīng)設(shè)備文件為/dev/video0,采用系統(tǒng)調(diào)用函數(shù)grab_fd=open(“/dev/video0”,O_RDWR),grab_fd是設(shè)備打開后返回的文件描述符(打開錯誤返回-1),以后的系統(tǒng)調(diào)用函數(shù)就可使用它來對設(shè)備文件進行操作了;接著利用ioctl(grab_fd,VIDIOCGCAP,&grab_cap)函數(shù)讀取struct video_capability中有關(guān)攝像頭信息,該函數(shù)成功返回后這些信息從內(nèi)核空間拷貝到用戶程序空間的grab_cap各成員分量中,使用printf函數(shù)就可得到各成員分量信息,例如Prin
54、tf(“maxheight=%d”,grab_fd.maxheight)獲得最大垂直分辨率的大小,再用ioctl(grab_fd,VIDIOCGPICT,&grab_pic)函數(shù)讀取攝像頭緩沖中video_picture信息,在用戶空間程序可以改變這些信息,具體方法為先給分量賦新值,再調(diào)用VIDIOCSPICT ioctlgrab_pic.depth=3;if(ioctl(grab_fd,VIDIOCSPICT,&grab_pic)0)perror(“VIDIOCSPICT”);return1;完成以上初始化設(shè)置工作后,可以對視頻圖象截取了,有兩種方法:一種是read()直接讀取方法,另外一種
55、mmap()內(nèi)存映射方式。Read()是通過內(nèi)核緩沖區(qū)來讀取數(shù)據(jù),而mmap()通過把設(shè)備文件映射到內(nèi)存中,繞過了內(nèi)核緩沖區(qū),最快的磁盤訪問往往還是慢于最慢的內(nèi)存訪問,所以mmap()方式加速了I/O訪問。另外mmap()系統(tǒng)調(diào)用使得進程之間通過映射同一文件實現(xiàn)共享內(nèi)存,各進程可以象訪問普通內(nèi)存一樣對文件進行訪問,只需要使用指針而不用調(diào)用文件操作函數(shù)。因為mmap()的以上優(yōu)點,所以在程序?qū)崿F(xiàn)中采用了mmap()方式。利用mmap()方式視頻截取具體進行如下:先使用ioctl(grab_fd,VIDIOCGMBUF,&grab_vm)函數(shù)獲得攝像頭存儲緩沖區(qū)的幀信息,之后修改video_mma
56、p中的設(shè)置,例如grab_buf.height=240;grab_buf.width=320;grab_buf.format=VIDEO_PALETTE_RGB24;接著把攝像頭對應(yīng)設(shè)備文件映射到內(nèi)存區(qū),具體使用grab_data=(unsigned char*)mmap(0,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grab_fd,0)操作,這樣設(shè)備文件的內(nèi)容就映射到內(nèi)存區(qū),該映象內(nèi)存區(qū)可讀可寫并且不同進程間可共享,該函數(shù)成功時返回映象內(nèi)存區(qū)的指針,失敗時返回-1值。4.3圖像數(shù)據(jù)的M-JPEG壓縮編碼4.3.1圖像壓縮的必要性及其方法介紹 本
57、系統(tǒng)中攝像頭采集的數(shù)據(jù)格式為RGB24,如果在以上的采集程序中設(shè)定圖像的寬度biWidth和高度biHeight分別為640和480(以象素為單位),這樣一幀圖像的大小就為6404803(一個象素用24位即3個字節(jié)表示)921,600字節(jié),如果再考慮攝像頭的30幀/秒采樣率,那數(shù)據(jù)量之大就可見一斑了。這樣大數(shù)據(jù)量的圖象信息會給存儲器的存儲容量網(wǎng)絡(luò)通信信道的帶寬以及處理器的處理速度增加極大的壓力。由于嵌入式系統(tǒng)必須針對具體的應(yīng)用進行定制,需要嚴(yán)格考慮硬軟件成本,盡量做到恰到好處,因此單純靠增加存儲器容量,提高信道帶寬以及處理器的處理速度等方法來解決這個問題是不現(xiàn)實的,這時就要考慮對圖象數(shù)據(jù)進行壓
58、縮。從信息論的角度來看,壓縮就是去掉信息中的冗余,即保留不確定的信息,去掉確定的信息(可推知的),也就是用一種更接近信息本質(zhì)的描述來代替原有冗余的描述,這個本質(zhì)的東西就是信息量(即不確定因素)。壓縮可分為兩大類:第一類壓縮過程是可逆的,也就是說,從壓縮后的圖象能夠完全恢復(fù)出原來的圖象,信息沒有任何丟失,稱為無損壓縮;第二類壓縮過程是不可逆的,無法完全恢復(fù)出原圖象,信息有一定的丟失,稱為有損壓縮。選擇哪一類壓縮,要折衷考慮,盡管希望能夠盡量做到無損壓縮,但是通常有損壓縮的壓縮比(即原圖象占的字節(jié)數(shù)與壓縮后圖象占的字節(jié)數(shù)之比,壓縮比越大,說明壓縮效率越高)比無損壓縮的高。對于圖像壓縮就可以采用有損
59、壓縮,因為其中包含的數(shù)據(jù)往往多于我們的視覺系統(tǒng)所能接收的信息,丟掉一些數(shù)據(jù)而不至于對圖像所表達(dá)的意思產(chǎn)生誤解,同時可大大提高壓縮比。壓縮編碼的方法有很多,主要分成以下四大類:(1)象素編碼;(2)預(yù)測編碼;(3)變換編碼;(4)其它方法。所謂象素編碼是指,編碼時對每個象素單獨處理,不考慮象素之間的相關(guān)性。在象素編碼中常用的幾種方法有:(1)脈沖編碼調(diào)制(Pulse Code Modulation,簡稱PCM);(2)熵編碼(Entropy Coding);(3)行程編碼(Run Length Coding);(4)位平面編碼(Bit Plane Coding)。所謂預(yù)測編碼是指,去除相鄰象素之
60、間的相關(guān)性和冗余性,只對新的信息進行編碼。舉個簡單的例子,因為象素的灰度是連續(xù)的,所以在一片區(qū)域中,相鄰象素之間灰度值的差別可能很小。如果我們只記錄第一個象素的灰度,其它象素的灰度都用它與前一個象素灰度之差來表示,就能起到壓縮的目的。如248,2,1,0,1,3,實際上這6個象素的灰度是248,250,251,251,252,255。表示250需要8個比特,而表示2只需要兩個比特,這樣就實現(xiàn)了壓縮。常用的預(yù)測編碼有調(diào)制(Delta Modulation,簡稱DM);微分預(yù)測編碼(Differential Pulse Code Modulation,DPCM),具體的細(xì)節(jié)在此就不詳述。所謂變換編
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 青海2024年青海區(qū)域醫(yī)療中心-天津中醫(yī)藥大學(xué)第一附屬醫(yī)院青海醫(yī)院-高原醫(yī)學(xué)研究中心招聘71人歷年參考題庫(頻考版)含答案解析
- 舟山浙江舟山市公共資源交易中心編外工作人員招聘歷年參考題庫(頻考版)含答案解析
- 個人工作簡歷-3
- 2025年甘肅佛山市三水區(qū)公有資產(chǎn)投資管理有限公司招聘筆試參考題庫附帶答案詳解
- 2025年遼寧省遼勤集團有限公司招聘筆試參考題庫含答案解析
- 2025年遼寧沈陽市煤氣有限公司招聘筆試參考題庫含答案解析
- 城市住房保障管理執(zhí)法辦法
- 寧夏中寧縣融媒體中心自主公開招考5名事業(yè)單位工作人員高頻重點提升(共500題)附帶答案詳解
- 二零二五年度管道頂進工程安全防護協(xié)議3篇
- 國航股份天津分公司2025屆高校畢業(yè)生校園招聘5人高頻重點提升(共500題)附帶答案詳解
- 解除勞動合同經(jīng)濟補償協(xié)議書
- 2024年4月自考02799獸醫(yī)臨床醫(yī)學(xué)試題
- 市政工程勞動力計劃
- 印度尼西亞發(fā)展熱帶經(jīng)濟作物的氣候條件評價-以爪哇和蘇門答臘島為例
- 吞咽障礙康復(fù)護理專家共識
- 2023年七年級地理上冊期末測試卷帶答案
- 標(biāo)書制作個人工作總結(jié)
- 求職OMG-大學(xué)生就業(yè)指導(dǎo)與技能開發(fā)智慧樹知到期末考試答案2024年
- 親子酒店客房設(shè)計方案及流程
- JB-T 5557-2007 液壓轉(zhuǎn)矩扳手
- 2023年中考化學(xué)第一輪復(fù)習(xí)檢測卷
評論
0/150
提交評論