<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Linux的3G無線視頻終端的設(shè)計(jì)與實(shí)現(xiàn)

          基于嵌入式Linux的3G無線視頻終端的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2011-08-01 來源:網(wǎng)絡(luò) 收藏

          2)直接采用CMOS攝像頭作為采集裝置 該采集模塊在硬件上S3C2440帶有CMOS攝像頭接口,在開發(fā)板上通過稱為CAMERA的接口引出,并且?guī)в衏amera控制器,在本系統(tǒng)中使用了OmniVision公司的OV9650攝像頭。S3C2440支持ITU-R BT601/656格式的數(shù)字圖像輸入,支持2個(gè)通道的DMA,Preview通道和Codec通道,參見圖4。

          本文引用地址:http://www.ex-cimer.com/article/150415.htm

          f.jpg


          Preview通道可以將YCbCr4:2:2格式的圖像轉(zhuǎn)換為RGB(16bit或24bit)格式的數(shù)據(jù),并存放于為PreviewDMA分配的內(nèi)存中,最大分辨率為640×480。主要用于本地液晶屏顯示,Codec通道可以輸出YCbCr4:2:0或YCbCr4:2:2格式到為Codec DMA分配的內(nèi)存中。最大分辨率為4 096x4 096,主要用于圖像的編解碼處理。在本系統(tǒng)中使用的是Codec通道。
          采集模塊的采用的是V4L2(Video for Two)V4L2,它是下開發(fā)視頻采集設(shè)備驅(qū)動(dòng)程序的一套規(guī)范,該規(guī)范采用分層的方法給驅(qū)動(dòng)程序的開發(fā)提供了清晰的模型和一致的接口,并且正對視頻設(shè)備的應(yīng)用程序編程也提供了一系列接口函數(shù)。其中應(yīng)用程序處于最上層,V4L2處于中間層,而實(shí)際的硬件設(shè)備則處于下層,其本身包括兩層驅(qū)動(dòng)結(jié)構(gòu),上層是videodev模塊,下層為V4L2驅(qū)動(dòng)程序。video-dev通過V4L2驅(qū)動(dòng)程序的成員函數(shù)來調(diào)用V4L2驅(qū)動(dòng)。在V4L2驅(qū)動(dòng)的驅(qū)動(dòng)程序初始化過程中,它首先枚舉它將要處理的系統(tǒng)中的設(shè)備,為每個(gè)設(shè)備填充struct v412_device結(jié)構(gòu),并且將指向該結(jié)構(gòu)的指針傳遞給v412_register_device()函數(shù),該函數(shù)調(diào)用v4L2_deviee結(jié)構(gòu)體中的初始化函數(shù)對設(shè)備進(jìn)行初始化。當(dāng)v412驅(qū)動(dòng)程序初始化完成后,v412通過傳遞一個(gè)包含驅(qū)動(dòng)程序成員函數(shù),次設(shè)備號以及相關(guān)信息的結(jié)構(gòu)給videod-ev,從而完成它將要處理設(shè)備在videodev的注冊工作,當(dāng)應(yīng)用程序通過系統(tǒng)調(diào)用觸發(fā)了某個(gè)驅(qū)動(dòng)程序時(shí),控制權(quán)首先傳遞給videodev中的函數(shù),videodev將應(yīng)用程序傳遞的文件或i節(jié)點(diǎn)結(jié)構(gòu)指針轉(zhuǎn)換為相應(yīng)的v412結(jié)構(gòu)指針,并調(diào)用v412中的處理函數(shù)。以本系統(tǒng)以O(shè)V9650攝像頭為例,其驅(qū)動(dòng)框架如圖5所示。

          g.jpg


          視頻采集過程如下,應(yīng)用程序首先打開視頻設(shè)備文件,攝像頭在系統(tǒng)中對應(yīng)的設(shè)備文件為/dev/camera,通過系統(tǒng)調(diào)用“open(“/ dev/camera”,O_RDWR)”函數(shù)打開該設(shè)備,獲得一個(gè)文件描述符fd,利用ioctl(fd,VIDIOCGPICT,capability)函數(shù)獲取攝像頭的相關(guān)信息,例如設(shè)備名稱、支持的最大最小分辨率、信號源信息等,填充在結(jié)構(gòu)體video_capability中,通過調(diào)用ioctl(fd,VIDIOCGPICT,pict-ure)獲取圖像的相關(guān)信息如采集圖像的對比度、亮度、調(diào)色板等屬性,并且填充在video_picture結(jié)構(gòu)體中,在獲取這類信息后,可根據(jù)實(shí)際需要來對其重新賦值,具體做法是將需要設(shè)置的值賦給相應(yīng)結(jié)構(gòu)體,然后通過系統(tǒng)調(diào)用ioctl(fd,VIDIOCSPICT,)函數(shù)寫入設(shè)備。在圖像獲取方式上使用mmap()系統(tǒng)調(diào)用來內(nèi)存映射達(dá)到各進(jìn)程共享內(nèi)層的目的,利用共享內(nèi)存通信的一個(gè)顯而易見的好處是效率高,因?yàn)檫M(jìn)程可以直接讀寫內(nèi)存,而不需要任何數(shù)據(jù)的拷貝。使用mmap方式獲取圖像數(shù)據(jù),需要首先設(shè)置圖像幀的緩沖區(qū)結(jié)構(gòu),即struct video_mmap,如每次采集幀數(shù),圖像高度、寬度,圖像調(diào)色板格式等等。然后調(diào)用ioctl(fd,VIDIOCMCAPTURE,grab_buf)啟動(dòng)捕獲過程。調(diào)用iotcl(fd,VI-DIOCSYNC,frame)等待采集完成,若該函數(shù)成功返回則表示采集完畢,采集到的圖像將放在通過mmap()映射的內(nèi)存區(qū)域內(nèi),讀取該內(nèi)存數(shù)據(jù)即可獲得圖像數(shù)據(jù),其中frame為當(dāng)前截取的幀數(shù),V4L2允許一次采集多幀數(shù)據(jù),可通過設(shè)置grab buf.frame來。調(diào)用close(fd)函數(shù)關(guān)閉設(shè)備文件,終止圖像采集。
          2.2 視頻數(shù)據(jù)處理模塊
          由視頻采集模塊獲取的視頻圖像需要通過網(wǎng)絡(luò)來進(jìn)行傳輸,而從攝像頭直接采集的未經(jīng)壓縮的數(shù)據(jù)量非常大,為了在不影響圖像質(zhì)量的前提下提高傳輸效率,本系統(tǒng)中對原始獲得的視頻圖像進(jìn)行了壓縮編碼。由于MPEG-4是專門為播放流式媒體的高質(zhì)量視頻而的,并且MPEG-4標(biāo)準(zhǔn)以其高壓縮比、高質(zhì)量、低傳輸率已經(jīng)成為目前網(wǎng)絡(luò)多媒體傳輸?shù)闹饕袷胶蜆?biāo)準(zhǔn)。它可利用很窄的帶寬,通過幀重建技術(shù)壓縮和傳輸數(shù)據(jù),以求使得用最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量并且能夠保存接近于DVD畫質(zhì)的小體積視頻文件。在本系統(tǒng)中選用開源的Xvidcore作為視頻壓縮模塊的核心算法。Xvidcore是一個(gè)高效而且便于移植的編碼軟件。它不僅支持Simple Profile和Advanced Profile,還支持I/P Frames B-Frames Interlacing和GMC,以鉆石和方塊模式來進(jìn)行PMVFast和EPZS運(yùn)行估計(jì),是目前比較流行的MPEG-4編碼軟件。Xvidcore源碼可從網(wǎng)上下載免費(fèi)獲得,目前最新版為xvidcore-1.2.2,它提供了一系列的庫函數(shù)及接口函數(shù)供應(yīng)用程序使用。但針對系統(tǒng)平臺(tái),要使用該庫需要將其移植到系統(tǒng)中。移植過程如下:
          解壓源代碼:tar-zxvf xvidcore-1.2.2.tar.gz;在使用前需要對xvidcore-1.2.2進(jìn)行交叉編譯,步驟如下:
          1)設(shè)置環(huán)境變量:export=“xvidcore當(dāng)前所在目錄”;
          2)進(jìn)入/build/generic目錄;
          3)生成Makefrle:/configure-host=local hostbuild=arm-linux-gcc;//指定交叉編譯工具以便進(jìn)行交叉編譯;
          4)編譯源代碼:make。
          將交叉編譯生成的庫文件libxvidcore.so.*拷貝到交叉編譯器工作目錄lib子目錄中。完成編碼庫的移植工作。
          以上對個(gè)獨(dú)立模塊進(jìn)行了介紹,在軟件上對系統(tǒng)進(jìn)行了整體設(shè)計(jì),將各個(gè)模塊有機(jī)的組合在一起,并充分考慮了系統(tǒng)的可擴(kuò)展性。
          主要結(jié)構(gòu)體如下:
          h.jpg

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();