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