李明磊,唐小琦,宋 寶
(華中科技大學(xué)機(jī)械科學(xué)與工程學(xué)院,湖北武漢430074)
視頻采集系統(tǒng)是數(shù)字圖像獲取的最基本手段,是進(jìn)行數(shù)字圖像處理、機(jī)器視覺、網(wǎng)絡(luò)視頻監(jiān)控的前提[1]。傳統(tǒng)的模擬視頻已經(jīng)很成熟,但是其管理不方便,最大的缺點(diǎn)是模擬視頻清晰度遠(yuǎn)遠(yuǎn)不夠[2]。傳統(tǒng)的視頻采集卡也比較昂貴[3]。在追求高清的時代下,第三代純數(shù)字化視頻采集系統(tǒng)應(yīng)運(yùn)而生[4]。數(shù)字化視頻采集系統(tǒng)基于CCD或CMOS傳感器,清晰度高,可以達(dá)到1 080p或更高,CMOS傳感器性價比高,更適合做視頻采集[5]。
一個基于網(wǎng)絡(luò)的完整的視頻采集系統(tǒng)一般都包含視頻的采集、視頻的大小重整、視頻的壓縮和編碼以及視頻的流化等模塊,最后通過網(wǎng)絡(luò)或者其他方式傳輸出去供后端使用。不同模塊間的視頻數(shù)據(jù)流的同步問題是保證視頻流暢的關(guān)鍵技術(shù),如果同步做的不好,則會出現(xiàn)后端得到的視頻卡頓、不流暢等現(xiàn)象。本文基于DM368平臺,設(shè)計(jì)了一個視頻采集系統(tǒng)來實(shí)現(xiàn)網(wǎng)絡(luò)視頻監(jiān)控,重點(diǎn)討論了各個模塊間的視頻流同步問題。
本系統(tǒng)的硬件實(shí)現(xiàn)如圖1所示。
本系統(tǒng)采用基于ARM9的Davinci系列的DM368平臺,其CPU頻率可達(dá)到432 MHz,內(nèi)置專用的視頻協(xié)處理器、高清視頻圖像協(xié)處理器(HDVICP)和MPEG-4 JPEG協(xié)處理器(MJCP)。支持多種編碼格式,如H.264,MPEG-4,MPEG-2,MJPEG等,支持1 080p 30幀的高清數(shù)據(jù)圖像傳輸。內(nèi)置硬件 H3A(Auto Focus,Auto Exposure,Auto White Balance)模塊,用于統(tǒng)計(jì)圖像信息,并把統(tǒng)計(jì)信息傳遞給上層的自動白平衡和自動曝光算法[6]。圖像傳感器采用CMOS傳感器OV2715,分辨率高達(dá)1080 p。
系統(tǒng)的軟件部分采用嵌入式操作系統(tǒng)Linux,其內(nèi)核版本是2.6.18。軟件系統(tǒng)框圖如圖2所示。
基于網(wǎng)絡(luò)的視頻采集系統(tǒng)的軟件部分一般由視頻采集、圖像大小調(diào)整、圖像處理、視頻壓縮編碼和視頻流化等部分組成。本文在實(shí)現(xiàn)了這些模塊的基礎(chǔ)上,重點(diǎn)討論了各個模塊間的視頻數(shù)據(jù)同步問題。
視頻數(shù)據(jù)的硬件數(shù)據(jù)流程如圖3所示。
根據(jù)硬件數(shù)據(jù)流,設(shè)計(jì)的軟件數(shù)據(jù)流如圖4所示。
OV2715圖像傳感器采集到Bayer模式的RAW圖像數(shù)據(jù)后,直接輸出數(shù)字信號,通過數(shù)據(jù)總線傳遞給DM368的ISIF模塊,該模塊主要完成數(shù)據(jù)的采集功能。ISIF通過內(nèi)部總線把數(shù)據(jù)傳遞給IPIPE模塊,該模塊主要把RAW數(shù)據(jù)轉(zhuǎn)換為YUV數(shù)據(jù),并進(jìn)行顏色校正、白平衡處理、自動曝光處理等功能。IPIPE中的RSZ即Resize模塊,把輸入的1 920×1 080的圖像調(diào)整為所需要的圖像像素大小。經(jīng)過調(diào)整后的圖像傳遞給HDVCP(高清視頻圖像協(xié)處理器)模塊,該模塊是由硬件完成H.264的編碼工作。編碼之后通過Stream模塊進(jìn)行流化,即把編碼后的數(shù)據(jù)取出來存儲到一個Circular Buffer中,供后續(xù)的流媒體服務(wù)器提取。
圖1 硬件系統(tǒng)框圖
圖2 軟件系統(tǒng)框圖
圖3 硬件數(shù)據(jù)流程圖
圖4 軟件數(shù)據(jù)流程
通過建立 CaptureThr,Resizethr,EncodeThr,StreamThr,AewbThr,MainThr六大線程來完成上述工作,各個線程之間通過緩沖區(qū)進(jìn)行數(shù)據(jù)交互。
以視頻數(shù)據(jù)獲取線程CaptureThr為例,其軟件啟動流程如圖5所示。
圖5 程序流程圖
主進(jìn)程啟動時會傳遞視頻參數(shù)如分辨率、幀率等信息。程序開始時,先解析這些信息。然后創(chuàng)建各個線程,最后創(chuàng)建主線程,此時各個線程都處于idle狀態(tài)。待所有參數(shù)配置好后,利用消息機(jī)制運(yùn)行主線程,主線程向各個線程發(fā)送運(yùn)行的消息,各個線程正常循環(huán)運(yùn)行。
主線程MainThr主要完成對各個線程的調(diào)度工作,CaptureThr線程完成對 Sensor,ISIF,IPIPE,H3A 等硬件模塊的配置并把視頻數(shù)據(jù)存到buffer1中,ResizeThr線程從此buffer1中讀出數(shù)據(jù)并進(jìn)行resize處理。處理后交給后續(xù)模塊,依次類推。AewbThr主要通過獲取H3A模塊的數(shù)據(jù)信息進(jìn)行自動白平衡和自動曝光的計(jì)算,并把得出的RGB增益、曝光時間等參數(shù)傳遞回硬件模塊中。
整個流程的難點(diǎn)在于各個模塊間的數(shù)據(jù)同步,如果前后模塊數(shù)據(jù)同步?jīng)]做好,就會出現(xiàn)丟幀的現(xiàn)象,表現(xiàn)在視頻上,視頻會出現(xiàn)卡頓現(xiàn)象,畫面不流暢。
本文采用循環(huán)Buffer的思路,以CaptureThr和ResizeThr兩個模塊為例,其具體原理如圖6所示。
當(dāng)Sensor的列同步信號VSYNC到來時,DM368會產(chǎn)生一個硬件中斷,通知CaptureThr有數(shù)據(jù)到來,CaptureThr會把數(shù)據(jù)存到Buffer[i]中,同時通過Linux的完成量機(jī)制[7]置位Buffer的FullFlag,以此來通知等待的 ResizeThr線程有數(shù)據(jù)到來,ResizeThr讀取完后會清除FullFlag。如果ResizeThr的數(shù)據(jù)還沒有處理完,沒有來得及讀取數(shù)據(jù),則CaptureThr會把下一次到來的數(shù)據(jù)存儲到Buffer[i+1]中,這樣就可以保證數(shù)據(jù)不會丟失。Buffer數(shù)組的大小根據(jù)系統(tǒng)需求的不同而各異。軟件設(shè)計(jì)時,用一個宏定義Buffer_NUM來定義Buffer數(shù)組的大小,根據(jù)不同的數(shù)據(jù)處理量來選擇不同的Buffer數(shù)組,從而滿足系統(tǒng)的要求。
圖6 循環(huán)buffer原理
本視頻采集系統(tǒng)結(jié)合后續(xù)的嵌入式流媒體服務(wù)器,可以直接通過網(wǎng)絡(luò)觀看前端的情況。實(shí)驗(yàn)表明,該圖像采集系統(tǒng)圖像清晰,色彩還原性好,畫面流暢,無丟幀現(xiàn)象。圖7是實(shí)驗(yàn)結(jié)果。
圖7 圖像效果
圖7a是直接從Sensor輸出的bayer模式的RAW數(shù)據(jù),是從ISIF模塊抓取出來的;圖7b是經(jīng)過插值之后把Bayer模式的raw格式轉(zhuǎn)化為YUV格式后的圖片,但是還沒有進(jìn)行顏色校正、濾波等的處理;圖7c是經(jīng)過各種圖像處理并壓縮編碼流化后在IE中看到的圖像效果;圖7d是實(shí)驗(yàn)平臺。由各個圖可見,在圖像處理之前明顯有很多噪點(diǎn)等,處理后的圖像清晰、平滑無噪點(diǎn)。
圖8是程序運(yùn)行過程中打印出的各個模塊的幀率,由圖可知,各個模塊的幀率都很穩(wěn)定,后面模塊的幀率大于等于前面模塊的幀率,所以數(shù)據(jù)流完全滿足了系統(tǒng)要求。
圖8 各個模塊的幀率(截圖)
本文介紹了基于DM368平臺的視頻采集模塊的軟硬件設(shè)計(jì),重點(diǎn)討論了各個內(nèi)部模塊間的數(shù)據(jù)流同步技術(shù)。此測試環(huán)境還與網(wǎng)絡(luò)環(huán)境等有關(guān)。實(shí)驗(yàn)表明,在良好網(wǎng)絡(luò)環(huán)境下,該同步方法很好地保證了各個模塊間的數(shù)據(jù)流暢傳輸,運(yùn)行穩(wěn)定可靠。
[1]楊建全,梁華,王友成.視頻監(jiān)控技術(shù)的發(fā)展與現(xiàn)狀[J].現(xiàn)代電子技術(shù),2006,29(21);84-88.
[2]肖自美,鄭偉國,梁凡,等.多媒體通信技術(shù)的現(xiàn)狀及發(fā)展[J].多媒體世界,1996(1):4-8.
[3]周祖榮,陳榮珍.基于S3C44B0微處理器視頻采集系統(tǒng)的設(shè)計(jì)[J].科技信息,2010(3):56-57.
[4]陳遠(yuǎn)明,唐小琦,宋寶.基于DM36x平臺的音視頻網(wǎng)絡(luò)通信的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2011,31(2):20-22.
[5]康厚俊.CMOS圖像傳感器與CCD的比較及發(fā)展現(xiàn)狀[J].才智,2008(9):239-240.
[6] TMS320DM36x digitalmedia system-on-chip(DMSoC)ARM subsystem user’s guide[EB/OL].[2013-02-09].http://focus.ti.com.cn/cn/lit/ug/sprufg5a/sprufg5a-pdf.
[7] JONATHAN C,ALESSANDRO R,GREG K.Linux device driver[M].3rd ed.USA:O’Reilly Media,Inc.,2005:114-116.