QNX 下嵌入式視頻監(jiān)控系統(tǒng)研究
3 系統(tǒng)軟件設(shè)計(jì)
3.1 視頻處理流程
視頻處理流程如圖6所示。監(jiān)控系統(tǒng)軟件設(shè)計(jì)的核心部分是視頻信號(hào)的采集、編碼等處理,主要由Capture thread、Video thread、Stream writerthread來實(shí)現(xiàn)。Capture thread主要完成采集設(shè)備的初始化,使它工作在合適的狀態(tài),從采集設(shè)備獲取原始視頻數(shù)據(jù)放到緩沖區(qū),為Video thread編碼作準(zhǔn)備。Video thread對Capture thread放到緩沖區(qū)中的原始圖像數(shù)據(jù)進(jìn)行編碼,得到H.264碼流。Stream writer thread的主要工作是把H.264碼流寫入循環(huán)緩沖區(qū)。放在循環(huán)流緩沖區(qū)的碼流可以根據(jù)用戶的需求進(jìn)行進(jìn)一步的處理,本系統(tǒng)主要將H.264碼流存儲(chǔ)到SD卡中。本文引用地址:http://www.ex-cimer.com/article/148216.htm
3.2 視頻采集設(shè)計(jì)
這里主要介紹系統(tǒng)對于USB接口攝像頭的處理方法,其驅(qū)動(dòng)程序中需要提供I/O操作接口函數(shù)open()、read()、write()、close(),對中斷的處理,內(nèi)存映射功能以對I/O通道的控制借口函數(shù)ioctl()等,并把他們定義在struct file_operations中。視頻采集系統(tǒng)軟件流程如圖7所示。
軟件的主要函數(shù)如下:
Camera_open():用來開啟視頻設(shè)備,使用前需要首先聲明一個(gè)camera_device類型的設(shè)備文件。
camera_get_capability():通過調(diào)用ioctl()函數(shù)取得設(shè)備文件的相關(guān)信息,并存放到camera_capability結(jié)構(gòu)里。
camera_get_picture():通過調(diào)用ioctl()函數(shù)取得圖像相關(guān)信息,并存放到camera_picture結(jié)構(gòu)里。
camera_capture():用來抓取圖像,采用mmap方式,直接將設(shè)備文件/dev/videoO映射到內(nèi)存,加速文件I/O操作,共享內(nèi)存通信。
camera_timer:設(shè)定一個(gè)定時(shí)器,用于控制視頻設(shè)備采集圖像的時(shí)隙。
picture_save():保存采集的圖片。
picture_num():對保存的圖片計(jì)數(shù),設(shè)定一個(gè)最大值,每當(dāng)該計(jì)數(shù)器達(dá)到最大值時(shí),調(diào)用刪除圖片函數(shù)picture_del(),一次性將已發(fā)送的幾張圖片刪除。
camera_close():用來關(guān)閉視頻設(shè)備。
結(jié)語
對于視頻處理來說,采用QNX+OMAP處理器的解決方案是個(gè)不錯(cuò)的選擇。由于視頻編解碼算法實(shí)現(xiàn)需要大流量的計(jì)算,使用OMAP3530開發(fā)平臺(tái),利用OMAP3530的DSP芯片來完成視頻編解碼,可以較好地提高編解碼的速率;同時(shí),QNX實(shí)時(shí)操作系統(tǒng)的編程接口符合POSIX標(biāo)準(zhǔn),可移植性較強(qiáng),可支持多種視頻格式編解碼。
評論