《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于ARM的MPEG-4數(shù)字錄像機的設計實現(xiàn)
基于ARM的MPEG-4數(shù)字錄像機的設計實現(xiàn)
EEworld
摘要: 該錄像系統(tǒng)已經(jīng)基本完成了測試工作,可以選擇8種分辨率和兩種幀率,,最高標準可以達到720×576分辨率,,25fps。在選擇640×480分辨率,,25fps錄制模式時,圖像質(zhì)量最好,,圖像顯示穩(wěn)定,,對于快速運動的物體可以無碼字丟失;在選擇720×576,,全幀率模式時,,硬盤可以連續(xù)錄制4~5個小時。目前系統(tǒng)需要解決的問題是改進錄制高質(zhì)量圖像的碼流的穩(wěn)定性問題,,可以考慮在EP9315和硬盤之間加驅(qū)動芯片以提高處理器掛載能力,。
Abstract:
Key words :

  隨著科技的飛速發(fā)展,消費類電子,,通信,,電視電影廣播與計算機技術緊密結(jié)合起來,。而數(shù)字化信息,尤其是數(shù)字化視頻信息,,具有數(shù)據(jù)量大,,存儲傳輸困難的特點,是制約人類獲得信息的主要瓶頸,。這種形勢對數(shù)字視頻記錄設備的研制提出了新的要求:大批量的應用要求降低監(jiān)控記錄設備成本,,多樣的應用環(huán)境、分散,、孤立的監(jiān)控點要求監(jiān)控記錄設備盡可能一體化,、小型化、獨立,、便攜,、低功耗、供電方便,、性能可靠,。針對這些新問題和新要求,作者設計實現(xiàn)了一種基于嵌入式系統(tǒng)和MPEG-4編碼標準的數(shù)字錄像機,,系統(tǒng)集成度高,、體積小、功耗低,、獨立,、便攜,適合大量的各類視頻監(jiān)控和記錄應用,。

  1 系統(tǒng)框架及原理說明

  本系統(tǒng)選用的主要模塊是低功耗ARM" title="ARM">ARM9系列微處理器EP9315和專業(yè)視頻壓縮編碼處理芯片IME6400,,周圍外部設備有SAA7118 A/D數(shù)模轉(zhuǎn)換芯片,RAM芯片,,ROM芯片,,網(wǎng)絡模塊和電源模塊。系統(tǒng)電路原理圖如圖1所示,。整個電路采用5V電源供電,,系統(tǒng)啟動后,外部輸入的視頻和音頻信號分別經(jīng)過視頻數(shù)模轉(zhuǎn)換模塊和音頻模塊進行解碼,,隨后通過IIC總線送入IME6400視頻處理芯片生成MPEG-4視頻音頻復合數(shù)據(jù)流,系統(tǒng)控制芯片EP9315從IME6400的HOST總線將數(shù)據(jù)流取出存放到硬盤中,,并且控制與外部設備的通信。

基于ARM的<a class=MPEG-4數(shù)字錄像機" title="MPEG-4數(shù)字錄像機">MPEG-4數(shù)字錄像機的設計實現(xiàn)" height="199" onclick="get_larger(this)" src="http://files.chinaaet.com/images/20110706/226b7f2b-d3ee-47ff-b9b9-7db3ee27b896.jpg" width="521" />

  圖1:系統(tǒng)總體框圖

  2     MPEG-4標準

  2.1 MPEG-4壓縮算法的基本原理

  MPEG-4視頻壓縮算法采用了基于對象的處理方案,,對視頻圖像中的每個目標進行單獨處理,,能夠在保證圖像質(zhì)量的情況下,極大的降低碼率,。在相同的圖像質(zhì)量下,,MPEG-4的輸出碼流可以比MPEG-2降低一半。正因為如此,,MPEG-4壓縮算法已得到了廣泛的應用,。MPEG-4中視頻對象(VO)可能是場景中的某一物體、某個區(qū)域,、也可能是計算機產(chǎn)生的二維,、三維圖形等。VO的選定依賴于具體的應用和系統(tǒng)所處的環(huán)境:在要求超低比特率的情況下,,VO可以是一個矩形幀,,與以前的MPEG-1、H.263標準兼容,;對于基于內(nèi)容的應用,,每一個VO有三類信息描述:運動信息、形狀編碼,、紋理編碼,。MPEG-4的編碼結(jié)構中,首先是從原始視頻流中分割出VO,,之后由編碼控制機制為不同的VO及相應的3種類型的信息分配碼率,,然后是各個VO獨立編碼,最后將各VO的碼流復合成一個位流,。解碼過程是編碼的逆過程,。編碼的圖2所示:

基于ARM的MPEG-4數(shù)字錄像機的設計實現(xiàn)

  2.2 MPEG-4碼流的形成

  如圖3所示,MPEG-4壓縮算法將一幅圖象分為多個對象,,這些對象按不同的層,,每個層又分為不同的平面按順序變換為視頻碼流。它的基本視頻流格式如圖3所示,。每個視頻對象分為多個視頻對象層,,每個視頻對象層形成一個基本流,這一基本流類似與MPEG-2中的GOP,。每個基本流都有自己的視頻對象序列頭,,不同的視頻對象序列頭可以分別按不同的順序傳送,這就極大地提高了MPEG-4傳送流的靈活性,。

基于ARM的MPEG-4數(shù)字錄像機的設計實現(xiàn)

  圖3 MPEG-4視頻碼流的基本構成

  3 硬件設計

  3.1 控制模塊設計

  系統(tǒng)控制模塊選用CIRRUS LOGIC公司的EP9315A微處理器,,此處理器是基于ARM920T內(nèi)核,高性能,,低功耗,,32位CPU,自帶MMU,16k指令cache和16k數(shù)據(jù)cache和Maverick Crunch數(shù)學協(xié)處理器,;主頻200MHz,,系統(tǒng)總線100MHz,;所支持的操作系統(tǒng)包括WINCE , Linux【1】。為了便于設計和調(diào)試,,硬件設計上采用核心板加底板的模塊化設計方法,,在核心板上集成了基于EP9315的最小系統(tǒng),通過底板來擴展外部功能,。在核心板上主要配置了64MB的NAND Flash 和64MB的SDRAM及提供RTC時鐘和工作時鐘的晶體,,并將其豐富的外設接口資源引出。在底板上擴展出USB主機接口,、以太網(wǎng)口,、UART接口、IDE接口等,,以實現(xiàn)與外部設備間的數(shù)據(jù)傳輸和通信,。

  EP9315支持硬盤的掛載,可以通過外部IDE接口將視頻數(shù)據(jù)直接存入硬盤,,但在開發(fā)初期采用通過與PC機服務器網(wǎng)絡掛載方式,,將記錄數(shù)據(jù)通過網(wǎng)絡協(xié)議存入PC機硬盤中,便于回放和調(diào)試,。IME6400的HOST接口映射到處理器的第6個Memory Bank中,,將EP9315的nGCS3片選管腳直接連接IME6400的nCS,地址線ADD[1:5]通過總線驅(qū)動芯片后與HOST接口的HA[0:4]相連【2】,,同時將IME6400異步模式下的中斷管腳GPIO0與EP9315的中斷管腳FPGIO1相連,。

  3.2 視頻音頻編解碼模塊設計

  視頻A/D芯片選用Philips公司的高性能可編程解碼芯片SAA7118,該芯片支持多種輸入模式,,具有抗混疊濾波,、自動鉗位、自動增益變換,、亮度,、對比度、飽和度調(diào)整等功能,,其工作時鐘為24.576MHz,。通過設定SAA7118的內(nèi)部的配置寄存器93H[6]為1使能其HOST端口,實現(xiàn)與IME6400的無縫連接,。音頻A/D芯片采用BURR-BROWN公司的PCM1800,,它對模擬音頻進行高信噪比20bit數(shù)字采樣,生成PCM數(shù)字音頻流,。

  壓縮編碼采用INTIME公司的MPEG-4編碼芯片IME6400,。該芯片是一款高性能的單片多通道MPEG-4數(shù)字壓縮編碼芯片,它支持多種編碼模式和比特率控制,并提供了豐富的外圍硬件接口,。IME6400總線具有四種工作模式,,通過mode管腳定義,在這里mode[1:0]設定為11,,即異步工作模式,。在這種模式下,當IME6400將GPIO0管腳置低電平時,,F(xiàn)IFO緩沖區(qū)中存滿NFIFOSIZE=1k大小的輸出數(shù)據(jù)流,外部接口在得到GPIO0下降沿電平后便可以從IME6400的HOST接口寄存器Encodedstream中讀取數(shù)據(jù)流,。GPIO0管腳直接與EP9315的中斷管腳FGPIO相連,,在處理器獲取下降沿信號后便中斷當前操作,從IME6400讀取數(shù)據(jù),。在讀取完畢后,,EP9315要向IME6400的HOST總線寄存器USER4發(fā)送一個不同值,通知IME6400數(shù)據(jù)讀取完成,。隨后IME6400可以在FIFO中裝載新的壓縮數(shù)據(jù)流以保證EP9315的繼續(xù)讀取【3】,。

  4 軟件設計

  Linux系統(tǒng)具有穩(wěn)定、高效,、易定制,、易裁減、開放源碼等優(yōu)點,,因此本系統(tǒng)選用嵌入式Linux作為操作系統(tǒng),,在芯片中植入Linux系統(tǒng)作為視頻記錄的應用環(huán)境。編寫Linux環(huán)境下的硬件設備接口程序主要分兩個部分:硬件設備驅(qū)動程序和應用程序,,驅(qū)動程序需要在視頻錄像前加載到Linux內(nèi)核中,,然后運行記錄程序,本系統(tǒng)采用的動態(tài)加載驅(qū)動的方式,。在前面說過用網(wǎng)絡掛載硬盤來記錄視頻可以便于測試視頻錄像質(zhì)量和調(diào)試軟硬件,,具體的操作是:在PC服務器上用nfs協(xié)議共享一個硬盤空間作為記錄硬盤,然后通過minicom串口通信定義EP9315啟動時首先通過網(wǎng)絡掛載記錄硬盤,,

關鍵字:ARM MPEG-4數(shù)字錄像機

 

  fconfig

  fis load zImage

  exec -c "root=/dev/nfs nfsroot=主機地址:共享硬盤空間 ip=嵌入式系統(tǒng)地址console=ttyS0,,57600 devfs=mount"

  隨后視頻錄像數(shù)據(jù)的處理就相當于在PC機上進行操作,可以克服嵌入式操作系統(tǒng)功能不全,,可視化程度不高的缺點【4】,。

  4.1 驅(qū)動程序編寫

  編寫linux驅(qū)動程序的最主要工作就是file_operations結(jié)構中各入口點的實現(xiàn),即對應于open(),、release(),、read()、write()、ioctrl()等系統(tǒng)調(diào)用子函數(shù)的編寫【5】,。

  ·Open函數(shù)ime6400_open(struct inode *inode, struct file *filp),,IME6400打開后用于模塊加載后的計數(shù),防止系統(tǒng)非法釋放模塊資源,。

  ·Read函數(shù)ime6400_read(struct file *fp, char *buf, size_t size),,在IME6400數(shù)據(jù)緩沖區(qū)讀滿后從內(nèi)核空間傳送到用戶空間。

  ·Write函數(shù)ime6400_write(struct file * fp, const char * buf, size_t size, loff_t *ppos),,將攝像頭獲取數(shù)據(jù)從用戶空間傳送到內(nèi)核空間,。

  ·Ioctrl函數(shù)ime6400_ioctl(struct inode *inode, struct file *filp, unsigned int command, unsigned long arg),用于從用戶空間向內(nèi)核空間傳遞定義參數(shù),。

  此外,,驅(qū)動程序中還包括:

  ·IME6400片選的聲明

  #define BASE_ADDR           0x28000000  

  將IME6400的片選信號映射到片選4(ncs4管腳)。

  ·IME6400中斷的申請

  set_external_irq(IRQ_EINT8,EXT_FALLING_EDGE,GPIO_PULLUP_DIS); request_irq(IRQ_EINT8, &ime6400_irq, SA_INTERRUPT,"ime6400", NULL),。

  根據(jù)硬件手冊,,這里將中斷定義為中斷8,用于在IME6400存入內(nèi)核緩沖區(qū)后通知EP9315讀取數(shù)據(jù)流,。

  4.2 應用程序編寫

  本系統(tǒng)應用程序主要實現(xiàn)在加載設備驅(qū)動后將視頻流從硬件接口層拷到存儲設備,具體操作上運用了多線程設計方法,,這種方法的優(yōu)點在于可以共享進程資源,線程間的轉(zhuǎn)換和調(diào)用時間短,,效率高,,聲明的幾個線程可以相互獨立地完成各自任務,并進行實時通信,,傳遞參數(shù),。這里主要創(chuàng)建了三個線程:讀數(shù)據(jù)線程,寫數(shù)據(jù)線程,,串口監(jiān)聽線程,。

  pthread_create(&t1,NULL,(void *)read_thread,NULL);

  pthread_create(&t2,NULL,(void *)write_thread,NULL);

  pthread_create(&t1,NULL,(void *)listen_thread,NULL);

  系統(tǒng)啟動后,系統(tǒng)首先通過IIC初始化EP9315和IME6400,,然后串口監(jiān)聽線程listen_thread()調(diào)用函數(shù)偵測是否有來自串口的控制指令輸入,,如果沒有輸入指定指令將無限期等待,如果得到輸入指令則向讀線程read_thread()發(fā)送信號量sem,通知讀線程準備調(diào)用讀取數(shù)據(jù)函數(shù)IME6400_read(),。在IME6400中FIFO緩沖區(qū)內(nèi)記錄數(shù)據(jù)滿后系統(tǒng)獲得中斷,,中斷程序?qū)?shù)據(jù)流拷入內(nèi)核空間,若緩沖區(qū)滿則讀線程調(diào)用ime_read()拷貝數(shù)據(jù)到用戶空間,,并向IME6400寄存器USER4發(fā)送新的值通知IME6400可以存入新的記錄數(shù)據(jù)流,,從而進行下一步編碼。ime_read()拷貝完成后返回,,由讀線程向?qū)懢€程發(fā)送信號量sem1通知寫線程write_thread()調(diào)用fwrite()函數(shù)將數(shù)據(jù)寫到硬盤,,完成后發(fā)送信號量sem2通知讀線程,然后再由讀線程進行下一輪類似前面的操作。與此同時,,監(jiān)聽線程一直在偵測是否有串口輸入的用戶指令,,如果有則調(diào)用中止函數(shù)或重新初始化函數(shù)來退出程序或重新啟動系統(tǒng)。

  5 結(jié)論

  該錄像系統(tǒng)已經(jīng)基本完成了測試工作,,可以選擇8種分辨率和兩種幀率,,最高標準可以達到720×576分辨率,25fps,。在選擇640×480分辨率,,25fps錄制模式時,圖像質(zhì)量最好,,圖像顯示穩(wěn)定,,對于快速運動的物體可以無碼字丟失;在選擇720×576,,全幀率模式時,硬盤可以連續(xù)錄制4~5個小時,。目前系統(tǒng)需要解決的問題是改進錄制高質(zhì)量圖像的碼流的穩(wěn)定性問題,,可以考慮在EP9315和硬盤之間加驅(qū)動芯片以提高處理器掛載能力。

  參考文獻:

  【1】 EP9315 User`s Guide. CIRRUS LOGIC, Inc. 2004

  【2】 EP9315 User`s Guide. CIRRUS LOGIC, Inc. 2004

  【3】 IME6400 firmware manual. Intime Corporation. 2003

  【4】 FS-EP9315 USER GUIDE ISSUE 1.8. Shenzhen uCdragon Technology Co. Ltd. 2005.6

  【5】 錢晨 徐榮華 王欽若,,基于linux操作系統(tǒng)的設備驅(qū)動程序開發(fā),,微計算機信息,2004.09, 131-133

 

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權禁止轉(zhuǎn)載,。