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