李明磊,唐小琦,宋 寶
(華中科技大學機械科學與工程學院,湖北武漢430074)
視頻采集系統是數字圖像獲取的最基本手段,是進行數字圖像處理、機器視覺、網絡視頻監控的前提[1]。傳統的模擬視頻已經很成熟,但是其管理不方便,最大的缺點是模擬視頻清晰度遠遠不夠[2]。傳統的視頻采集卡也比較昂貴[3]。在追求高清的時代下,第三代純數字化視頻采集系統應運而生[4]。數字化視頻采集系統基于CCD或CMOS傳感器,清晰度高,可以達到1 080p或更高,CMOS傳感器性價比高,更適合做視頻采集[5]。
一個基于網絡的完整的視頻采集系統一般都包含視頻的采集、視頻的大小重整、視頻的壓縮和編碼以及視頻的流化等模塊,最后通過網絡或者其他方式傳輸出去供后端使用。不同模塊間的視頻數據流的同步問題是保證視頻流暢的關鍵技術,如果同步做的不好,則會出現后端得到的視頻卡頓、不流暢等現象。本文基于DM368平臺,設計了一個視頻采集系統來實現網絡視頻監控,重點討論了各個模塊間的視頻流同步問題。
本系統的硬件實現如圖1所示。
本系統采用基于ARM9的Davinci系列的DM368平臺,其CPU頻率可達到432 MHz,內置專用的視頻協處理器、高清視頻圖像協處理器(HDVICP)和MPEG-4 JPEG協處理器(MJCP)。支持多種編碼格式,如H.264,MPEG-4,MPEG-2,MJPEG等,支持1 080p 30幀的高清數據圖像傳輸。內置硬件 H3A(Auto Focus,Auto Exposure,Auto White Balance)模塊,用于統計圖像信息,并把統計信息傳遞給上層的自動白平衡和自動曝光算法[6]。圖像傳感器采用CMOS傳感器OV2715,分辨率高達1080 p。
系統的軟件部分采用嵌入式操作系統Linux,其內核版本是2.6.18。軟件系統框圖如圖2所示。
基于網絡的視頻采集系統的軟件部分一般由視頻采集、圖像大小調整、圖像處理、視頻壓縮編碼和視頻流化等部分組成。本文在實現了這些模塊的基礎上,重點討論了各個模塊間的視頻數據同步問題。
視頻數據的硬件數據流程如圖3所示。
根據硬件數據流,設計的軟件數據流如圖4所示。
OV2715圖像傳感器采集到Bayer模式的RAW圖像數據后,直接輸出數字信號,通過數據總線傳遞給DM368的ISIF模塊,該模塊主要完成數據的采集功能。ISIF通過內部總線把數據傳遞給IPIPE模塊,該模塊主要把RAW數據轉換為YUV數據,并進行顏色校正、白平衡處理、自動曝光處理等功能。IPIPE中的RSZ即Resize模塊,把輸入的1 920×1 080的圖像調整為所需要的圖像像素大小。經過調整后的圖像傳遞給HDVCP(高清視頻圖像協處理器)模塊,該模塊是由硬件完成H.264的編碼工作。編碼之后通過Stream模塊進行流化,即把編碼后的數據取出來存儲到一個Circular Buffer中,供后續的流媒體服務器提取。

圖1 硬件系統框圖

圖2 軟件系統框圖

圖3 硬件數據流程圖

圖4 軟件數據流程
通過建立 CaptureThr,Resizethr,EncodeThr,StreamThr,AewbThr,MainThr六大線程來完成上述工作,各個線程之間通過緩沖區進行數據交互。
以視頻數據獲取線程CaptureThr為例,其軟件啟動流程如圖5所示。

圖5 程序流程圖
主進程啟動時會傳遞視頻參數如分辨率、幀率等信息。程序開始時,先解析這些信息。然后創建各個線程,最后創建主線程,此時各個線程都處于idle狀態。待所有參數配置好后,利用消息機制運行主線程,主線程向各個線程發送運行的消息,各個線程正常循環運行。
主線程MainThr主要完成對各個線程的調度工作,CaptureThr線程完成對 Sensor,ISIF,IPIPE,H3A 等硬件模塊的配置并把視頻數據存到buffer1中,ResizeThr線程從此buffer1中讀出數據并進行resize處理。處理后交給后續模塊,依次類推。AewbThr主要通過獲取H3A模塊的數據信息進行自動白平衡和自動曝光的計算,并把得出的RGB增益、曝光時間等參數傳遞回硬件模塊中。
整個流程的難點在于各個模塊間的數據同步,如果前后模塊數據同步沒做好,就會出現丟幀的現象,表現在視頻上,視頻會出現卡頓現象,畫面不流暢。
本文采用循環Buffer的思路,以CaptureThr和ResizeThr兩個模塊為例,其具體原理如圖6所示。
當Sensor的列同步信號VSYNC到來時,DM368會產生一個硬件中斷,通知CaptureThr有數據到來,CaptureThr會把數據存到Buffer[i]中,同時通過Linux的完成量機制[7]置位Buffer的FullFlag,以此來通知等待的 ResizeThr線程有數據到來,ResizeThr讀取完后會清除FullFlag。如果ResizeThr的數據還沒有處理完,沒有來得及讀取數據,則CaptureThr會把下一次到來的數據存儲到Buffer[i+1]中,這樣就可以保證數據不會丟失。Buffer數組的大小根據系統需求的不同而各異。軟件設計時,用一個宏定義Buffer_NUM來定義Buffer數組的大小,根據不同的數據處理量來選擇不同的Buffer數組,從而滿足系統的要求。

圖6 循環buffer原理
本視頻采集系統結合后續的嵌入式流媒體服務器,可以直接通過網絡觀看前端的情況。實驗表明,該圖像采集系統圖像清晰,色彩還原性好,畫面流暢,無丟幀現象。圖7是實驗結果。

圖7 圖像效果
圖7a是直接從Sensor輸出的bayer模式的RAW數據,是從ISIF模塊抓取出來的;圖7b是經過插值之后把Bayer模式的raw格式轉化為YUV格式后的圖片,但是還沒有進行顏色校正、濾波等的處理;圖7c是經過各種圖像處理并壓縮編碼流化后在IE中看到的圖像效果;圖7d是實驗平臺。由各個圖可見,在圖像處理之前明顯有很多噪點等,處理后的圖像清晰、平滑無噪點。
圖8是程序運行過程中打印出的各個模塊的幀率,由圖可知,各個模塊的幀率都很穩定,后面模塊的幀率大于等于前面模塊的幀率,所以數據流完全滿足了系統要求。

圖8 各個模塊的幀率(截圖)
本文介紹了基于DM368平臺的視頻采集模塊的軟硬件設計,重點討論了各個內部模塊間的數據流同步技術。此測試環境還與網絡環境等有關。實驗表明,在良好網絡環境下,該同步方法很好地保證了各個模塊間的數據流暢傳輸,運行穩定可靠。
[1]楊建全,梁華,王友成.視頻監控技術的發展與現狀[J].現代電子技術,2006,29(21);84-88.
[2]肖自美,鄭偉國,梁凡,等.多媒體通信技術的現狀及發展[J].多媒體世界,1996(1):4-8.
[3]周祖榮,陳榮珍.基于S3C44B0微處理器視頻采集系統的設計[J].科技信息,2010(3):56-57.
[4]陳遠明,唐小琦,宋寶.基于DM36x平臺的音視頻網絡通信的設計與實現[J].計算機應用,2011,31(2):20-22.
[5]康厚俊.CMOS圖像傳感器與CCD的比較及發展現狀[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.