基于ARM+Linux的視頻采集編碼系統(tǒng)設(shè)計
摘要:本文設(shè)計了嵌入式遠程監(jiān)控系統(tǒng)中的視頻采集端。提出了基于 ARM Linux的視頻采集編碼設(shè)計方案,采用 S3C2440 作為主處理器,選用 OV511+OV7650 構(gòu)造USB 攝像頭進行視頻采集。介紹了USB 攝像頭驅(qū)動程序的設(shè)計以及視頻原始碼流采集的實現(xiàn)過程。由于嵌入式Linux在各種視頻設(shè)備中已經(jīng)得到了廣泛應(yīng)用,故設(shè)計具有一定的通用性。
本文引用地址:http://m.butianyuan.cn/article/248474.htm關(guān)鍵詞:嵌入式;Linux;視頻采集;S3C2440
引言
嵌入式系統(tǒng)由于其體積小可便攜,較 PC機而言很有優(yōu)勢。隨著計算機技術(shù)的發(fā)展,一些基于PC機的應(yīng)用也得以在嵌入式系統(tǒng)上實現(xiàn)。由于 USB 接口攝像頭價格低廉,性能較好,即插即用,加上Linux下有Video4Linux標準支持對其編程,很容易集成到嵌入式系統(tǒng),因此嵌入式系統(tǒng)視頻采集設(shè)備通常用 USB 接口攝像頭。
1 芯片介紹
S3C2440 處理器采用ARM920t內(nèi)核,0.13um的CMOS 標準宏單元和存儲器單元,支持高速總線和異步總線模式;具有 1G字節(jié)尋址空間;支持外部等待信號延長總線周期;支持掉電時SDRAM 自刷新模式;支持從 NAND flash存儲器啟動;采用 4KB 內(nèi)部緩沖器進行啟動引導(dǎo)。采用寫穿式(write-through)或?qū)懟厥?write-back)cache 操作來更新主存儲器;寫緩沖器可以保存 16個字的數(shù)據(jù)和 4 個地址[1]。
OV511 是高性能攝像機到 USB 接口單片控制芯片,它極大的簡化了單片 CMOS 圖像傳感器和USB 的接口,其片上增加256K DRAM 和一個 USB 收發(fā)器,可以很容易構(gòu)成基于USB 的視頻子系統(tǒng)。OV511 最大視頻傳輸設(shè)計使系統(tǒng)能夠以更加實時的方式獲取大量的視頻信息[2]。
OV7650是高集成度高分辨率的 COMS 圖像傳感器,它將所有攝像功能和矩陣處理功能都集成在片上。其像矩陣位 640*480 像素(30 萬像素),支持VGA,QVGA ,CIF,QCIF四種分辨率,可進行編程控制[3]。
2 攝像頭硬件
視頻采集部分由 OV511 和OV7650組成。通過 SCCB 總線初始化OV7650和OV511 ,將OV7650設(shè)置為 CIF 采集,輸出YUV422 數(shù)據(jù)流;將 OV511 配置為YUV422 格式輸入,輸出為YUV420 數(shù)據(jù)流。OV511 提供OV7650所需的控制信號,并接受來自 OV7650的同
步輸出信號并將輸入圖像數(shù)據(jù)通過內(nèi)置的 USB 控制器和外接的 USB 收發(fā)器經(jīng)USB 總線送入ARM,然后進行壓縮編碼、發(fā)送等處理,其硬件框圖見圖 1。
3 USB 攝像頭驅(qū)動
設(shè)備驅(qū)動程序可以看成 Linux內(nèi)核與外部設(shè)備之間的接口。設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件實現(xiàn)了的細節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備,可以使用和操作文件中相同的、標準的系統(tǒng)調(diào)用接口函數(shù)來完成對硬件設(shè)備的打開、關(guān)閉、讀寫和 I/O控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)[4]。
Linux 視頻采集設(shè)備的正常運行依賴于對 Video4Linux標準的支持。Video4Linux設(shè)備的驅(qū)動程序需要提供基本的 I/O 操作接口函數(shù) open ,read ,write和對中斷處理的實現(xiàn)、內(nèi)存映射功能以及對I/O 通道的控制接口函數(shù) ioctl 的實現(xiàn)等,并把它們定義在 struct video_device中。所以首先在驅(qū)動程序中聲明一個 video_device 結(jié)構(gòu),并為其指定文件操作函數(shù)指針數(shù)組fops 向系統(tǒng)注冊。應(yīng)用程序發(fā)出文件操作的相關(guān)命令時,Linux 內(nèi)核根據(jù)這些指針調(diào)用相應(yīng)函數(shù),并將該結(jié)構(gòu)作為參數(shù)傳遞給它們,實現(xiàn)驅(qū)動與內(nèi)核之間的通信。
Linux 內(nèi)核是依據(jù)設(shè)備號來操作設(shè)備文件的,內(nèi)核中攝像頭對應(yīng)的設(shè)備文件名為/dev/video,主設(shè)備號是81,次設(shè)備號根據(jù)攝像頭數(shù)目來確定,本系統(tǒng)中僅使用一個攝像頭。因此沒有此設(shè)備號,所以可以通過mknod /dev/video0 c 81 0來創(chuàng)建節(jié)點,驅(qū)動程序原理如圖2。
linux相關(guān)文章:linux教程
攝像頭相關(guān)文章:攝像頭原理
評論