丁冰冰(廈門大學物聯網技術研究室,福建 廈門 361005)
?
基于N32926與RT-Thread的嵌入式視頻系統(tǒng)的設計與實現
丁冰冰
(廈門大學物聯網技術研究室,福建 廈門 361005)
摘 要:以新唐公司的N32926開發(fā)板作為研究平臺,實現了視頻的實時采集播放。開發(fā)板以RT-Thread作為其操作系統(tǒng)。系統(tǒng)的視頻通過OV7725攝像頭進行采集,然后對圖像數據進行H.264編碼,最后將解碼的YUV數據轉成RGB格式顯示。通過實驗證明,整個視頻采集和編解碼顯示的方法是可行的。
關鍵詞:N32926;RT-Thread;H.264 視頻
隨著圖像的數字化處理在軍事、科研、工業(yè)、農業(yè)和醫(yī)療等領域得到廣泛應用,各種新的圖像和視頻壓縮標準不斷提出,許多用于圖像采集和處理的芯片也相繼推出,處理功能越來越強大,使用也越來越方便。數字視頻日益成為一種廣泛應用的媒體,視頻技術的產品開發(fā)也頗具前景,而嵌入式視頻采集系統(tǒng)的實現方法正是其中的關鍵技術。
系統(tǒng)的硬件采用新唐公司的N32926。N32926功耗非常低,而且成本低,并有很強的支持高清能力,高清編碼如1280× 720P實時編碼的時候,最高功耗不到400mW。這使得N32926成為視頻/音頻流媒體設備的最佳選擇。
首先進行視頻采集。(1)開辟內存。本視頻系統(tǒng)采集的圖像大小為640*480,格式是YUV420,每一幀圖像所需要的內存空間大小為640*480*3/2字節(jié),用來依次存放Y、U、V三個分量。因為是實時采集和播放,為了避免數據存儲和讀取之間存在沖突,在設計時開辟了兩個大小相同的內存空間輪流存放采集的圖像數據;(2)硬件初始化設置。N32926提供了無系統(tǒng)視頻采集VideoIn的API,可以經過適當修改移植到RT-Thread上;(3)圖像數據存儲。初始化設置后,就要把攝像頭讀取到的數據存放到一開始開辟的內存中,存放數據格式為MARCO_PLANAR,因為N32926只支持這個格式的h.264編碼。
視頻采集是不斷在進行的,因此我們采用一個回調函數來不斷執(zhí)行圖像采集的過程,每一次中斷到來就調用VideoIn_InterruptHandler函數將采集到的圖像數據傳到指定的內存地址,重復圖像數據存儲的過程,并在開辟的兩個內存之間輪流存放,避免讀取與存儲的沖突。每一幀存儲結束后,返回當前的幀數g_u32FrameCount 。
視頻的采集并沒有在采集線程中實現,而是放在了main函數中,采集線程主要是用來判斷返回的g_u32FrameCount 是否發(fā)生變化,當g_u32FrameCount發(fā)生變化時,釋放一個信號量rt_sem_release(sem),來通知編碼線程對數據進行編碼處理。
接收到采集線程釋放的信號后,編碼線程開始執(zhí)行。參數encoder_setting是關于H.264編碼參數的結構體,包括了對編碼的各項參數,比如比特率、數據大小、幀率、Q值等的設置,同時在函數里把數據賦給H.264編碼結構體enc_param。編碼器初始化會根據enc_ param傳進來的圖像大小開辟內存空間,編碼函數將會通知編碼器去存放采集數據的數組pict[0] 、pict [1]、pict [2]中分別讀取Y、U、V數據,并根據傳進來的編碼參數對每一幀圖像進行編碼,然后傳輸到指定的內存空間out_virt_buffer1當中去。編碼完后會返回一個編碼數據長度length。編碼完一幀后釋放一個信號量rt_sem_release(sem1)通知解碼線程開始解碼。
接受到編碼線程釋放的信號量rt_sem_take(sem1,RT_WAITING_ FOREVER)開始執(zhí)行解碼線程。解碼線程包括了解碼和顯示,所以必須先進行解碼器和屏幕顯示的初始化。decoder_setting傳入的是解碼器的參數設置,out_virt_buffer1存放的是編碼后的數據,解碼器將根據這個地址去讀取數據進行解碼,然后把解碼后的數據存放到數組pict_ptr= &pict_dec[0],pict_ptr指向了之前開辟的用來存放解碼數據的內存空間。Length是編碼完后返回的數據大小,解碼器必須要有這個參數才能確定每一幀要讀取的編碼數據長度是多少。解碼后的YUV不能直接顯示,而需要用調用
根據轉化原理: 將其轉化成RGB進行顯示。
完成對視頻系統(tǒng)的軟件設計后,即可在N32926開發(fā)板上安裝上OV7725攝像頭進行測試。視頻質量流暢清晰,幀率為15幀每秒,延時大概在300ms左右。
本文介紹了在N32926開發(fā)板上移植RT-Thread系統(tǒng),并在此平臺上實現嵌入式視頻的采集、編碼解碼和顯示的視頻系統(tǒng)的過程。RT-Thread還支持Lwip,加上網絡通信功能后可將此視頻系統(tǒng)運用于無線視頻監(jiān)控、移動醫(yī)療等行業(yè)中,具有廣闊的應用前景。
參考文獻:
[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