基于S3C6410的視頻監控系統的設計與實(shí)現
3.1 視頻數據采集程序
視頻采集程序使用內存映射的方式進(jìn)行讀取。通過(guò)內存映射直接把設備文件映射到內存中,繞過(guò)內核緩沖區,進(jìn)程訪(fǎng)問(wèn)設備文件時(shí)和訪(fǎng)問(wèn)普通內存一樣,極大的提高了視頻數據的讀取速度。
視頻采集部分的流程圖如圖3所示。
下面列出視頻采集部分的關(guān)鍵代碼。
首先打開(kāi)設備,其中CODEC_NODE為預定義宏,表示攝像頭結點(diǎn)文件路徑。
dev_fp=open(CODEC_NODE,O_RDWR);
在設置參數部分,首先要得到設備能力參數,檢查是否具有所需的功能,然后再進(jìn)行參數的設置。使用下面的代碼來(lái)實(shí)現。
ioctl(dev_fp,VIDIOC_QUERYCAP,&cap);
上一行代碼得到設備的功能信息,存儲到參數caF中。在檢查設備具有所需功能后,下一行代碼進(jìn)行參數設置。
ioctl(dev_fp,VIE)IOC_S_FMT,codec_fmt);
其中,codec_fmt為一個(gè)格式信息的結構體類(lèi)型參數。
在Linux平臺,采集圖像數據部分的實(shí)現方式與文件讀取類(lèi)似,采用下面的代碼實(shí)現。
read(dev_fp,g_yuv,YUV_FR_BUF_SIZE);
而將數據傳送給MFC模塊這部分,可以采取直接共享緩沖區的方式,這樣減少了一次數據在內存中的傳輸,增加了效率。
最后是關(guān)閉設備文件。先停止圖像的采集,然后關(guān)閉文件。
ioctl(dev_fp,VIDIOC_STREAMOFF,&start);
close(dev_fp);
上述代碼片段是視頻采集部分的關(guān)鍵代碼段。在實(shí)現部分還有很多的條件判斷和分支選擇等控制流程部分,這里不進(jìn)行詳細描述。
3.2 視頻編碼程序
視頻編碼部分直接采用S3C6410的MFC視頻編解碼模塊進(jìn)行視頻的編碼。由于采用硬件編碼,編碼效率非常高。同時(shí)在程序的設計方面,不用涉及具體的硬件細節,只需要通過(guò)S3C6410提供的驅動(dòng)模塊進(jìn)行。編碼部分的流程圖如圖4所示。本文引用地址:http://dyxdggzs.com/article/165899.htm
評論