丁冰冰(廈門大學(xué)物聯(lián)網(wǎng)技術(shù)研究室,福建 廈門 361005)
?
基于N32926與RT-Thread的嵌入式視頻系統(tǒng)的設(shè)計與實現(xiàn)
丁冰冰
(廈門大學(xué)物聯(lián)網(wǎng)技術(shù)研究室,福建 廈門 361005)
摘 要:以新唐公司的N32926開發(fā)板作為研究平臺,實現(xiàn)了視頻的實時采集播放。開發(fā)板以RT-Thread作為其操作系統(tǒng)。系統(tǒng)的視頻通過OV7725攝像頭進行采集,然后對圖像數(shù)據(jù)進行H.264編碼,最后將解碼的YUV數(shù)據(jù)轉(zhuǎn)成RGB格式顯示。通過實驗證明,整個視頻采集和編解碼顯示的方法是可行的。
關(guān)鍵詞:N32926;RT-Thread;H.264 視頻
隨著圖像的數(shù)字化處理在軍事、科研、工業(yè)、農(nóng)業(yè)和醫(yī)療等領(lǐng)域得到廣泛應(yīng)用,各種新的圖像和視頻壓縮標準不斷提出,許多用于圖像采集和處理的芯片也相繼推出,處理功能越來越強大,使用也越來越方便。數(shù)字視頻日益成為一種廣泛應(yīng)用的媒體,視頻技術(shù)的產(chǎn)品開發(fā)也頗具前景,而嵌入式視頻采集系統(tǒng)的實現(xiàn)方法正是其中的關(guān)鍵技術(shù)。
系統(tǒng)的硬件采用新唐公司的N32926。N32926功耗非常低,而且成本低,并有很強的支持高清能力,高清編碼如1280× 720P實時編碼的時候,最高功耗不到400mW。這使得N32926成為視頻/音頻流媒體設(shè)備的最佳選擇。
首先進行視頻采集。(1)開辟內(nèi)存。本視頻系統(tǒng)采集的圖像大小為640*480,格式是YUV420,每一幀圖像所需要的內(nèi)存空間大小為640*480*3/2字節(jié),用來依次存放Y、U、V三個分量。因為是實時采集和播放,為了避免數(shù)據(jù)存儲和讀取之間存在沖突,在設(shè)計時開辟了兩個大小相同的內(nèi)存空間輪流存放采集的圖像數(shù)據(jù);(2)硬件初始化設(shè)置。N32926提供了無系統(tǒng)視頻采集VideoIn的API,可以經(jīng)過適當修改移植到RT-Thread上;(3)圖像數(shù)據(jù)存儲。初始化設(shè)置后,就要把攝像頭讀取到的數(shù)據(jù)存放到一開始開辟的內(nèi)存中,存放數(shù)據(jù)格式為MARCO_PLANAR,因為N32926只支持這個格式的h.264編碼。
視頻采集是不斷在進行的,因此我們采用一個回調(diào)函數(shù)來不斷執(zhí)行圖像采集的過程,每一次中斷到來就調(diào)用VideoIn_InterruptHandler函數(shù)將采集到的圖像數(shù)據(jù)傳到指定的內(nèi)存地址,重復(fù)圖像數(shù)據(jù)存儲的過程,并在開辟的兩個內(nèi)存之間輪流存放,避免讀取與存儲的沖突。每一幀存儲結(jié)束后,返回當前的幀數(shù)g_u32FrameCount 。
視頻的采集并沒有在采集線程中實現(xiàn),而是放在了main函數(shù)中,采集線程主要是用來判斷返回的g_u32FrameCount 是否發(fā)生變化,當g_u32FrameCount發(fā)生變化時,釋放一個信號量rt_sem_release(sem),來通知編碼線程對數(shù)據(jù)進行編碼處理。
接收到采集線程釋放的信號后,編碼線程開始執(zhí)行。參數(shù)encoder_setting是關(guān)于H.264編碼參數(shù)的結(jié)構(gòu)體,包括了對編碼的各項參數(shù),比如比特率、數(shù)據(jù)大小、幀率、Q值等的設(shè)置,同時在函數(shù)里把數(shù)據(jù)賦給H.264編碼結(jié)構(gòu)體enc_param。編碼器初始化會根據(jù)enc_ param傳進來的圖像大小開辟內(nèi)存空間,編碼函數(shù)將會通知編碼器去存放采集數(shù)據(jù)的數(shù)組pict[0] 、pict [1]、pict [2]中分別讀取Y、U、V數(shù)據(jù),并根據(jù)傳進來的編碼參數(shù)對每一幀圖像進行編碼,然后傳輸?shù)街付ǖ膬?nèi)存空間out_virt_buffer1當中去。編碼完后會返回一個編碼數(shù)據(jù)長度length。編碼完一幀后釋放一個信號量rt_sem_release(sem1)通知解碼線程開始解碼。
接受到編碼線程釋放的信號量rt_sem_take(sem1,RT_WAITING_ FOREVER)開始執(zhí)行解碼線程。解碼線程包括了解碼和顯示,所以必須先進行解碼器和屏幕顯示的初始化。decoder_setting傳入的是解碼器的參數(shù)設(shè)置,out_virt_buffer1存放的是編碼后的數(shù)據(jù),解碼器將根據(jù)這個地址去讀取數(shù)據(jù)進行解碼,然后把解碼后的數(shù)據(jù)存放到數(shù)組pict_ptr= &pict_dec[0],pict_ptr指向了之前開辟的用來存放解碼數(shù)據(jù)的內(nèi)存空間。Length是編碼完后返回的數(shù)據(jù)大小,解碼器必須要有這個參數(shù)才能確定每一幀要讀取的編碼數(shù)據(jù)長度是多少。解碼后的YUV不能直接顯示,而需要用調(diào)用
根據(jù)轉(zhuǎn)化原理: 將其轉(zhuǎn)化成RGB進行顯示。
完成對視頻系統(tǒng)的軟件設(shè)計后,即可在N32926開發(fā)板上安裝上OV7725攝像頭進行測試。視頻質(zhì)量流暢清晰,幀率為15幀每秒,延時大概在300ms左右。
本文介紹了在N32926開發(fā)板上移植RT-Thread系統(tǒng),并在此平臺上實現(xiàn)嵌入式視頻的采集、編碼解碼和顯示的視頻系統(tǒng)的過程。RT-Thread還支持Lwip,加上網(wǎng)絡(luò)通信功能后可將此視頻系統(tǒng)運用于無線視頻監(jiān)控、移動醫(yī)療等行業(yè)中,具有廣闊的應(yīng)用前景。
參考文獻:
[1]NIE fei, PAN yu: The realization method of the embedded video acquisition system research.TV TECHONOLOGY. No.254, 46-49 (2003).
[2]LIU Xilong, SHI Zhongsuo: Design Of The Embedded Video Server On H264.MICRO COMPUTER INFORMATION. VOL.21, No.1, 133-135(2005).
[3]ZHU Zhiguo: The Research About RT-Thread Operating System Transplant To STM32.Computer CD software and Applications. No.22, 119-120(2012).
作者簡介:丁冰冰(1989-),男,福建廈門人,碩士研究生,研究方向:嵌入式軟件開發(fā)。
DOI:10.16640/j.cnki.37-1222/t.2016.02.214