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

  隨著科技的飛速發(fā)展,消費類電子,通信,電視電影廣播與計算機技術緊密結合起來。而數(shù)字化信息,尤其是數(shù)字化視頻信息,具有數(shù)據量大,存儲傳輸困難的特點,是制約人類獲得信息的主要瓶頸。這種形勢對數(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ù)模轉換芯片,RAM芯片,ROM芯片,網絡模塊和電源模塊。系統(tǒng)電路原理圖如圖1所示。整個電路采用5V電源供電,系統(tǒng)啟動后,外部輸入的視頻和音頻信號分別經過視頻數(shù)模轉換模塊和音頻模塊進行解碼,隨后通過IIC總線送入IME6400視頻處理芯片生成MPEG-4視頻音頻復合數(shù)據流,系統(tǒng)控制芯片EP9315從IME6400的HOST總線將數(shù)據流取出存放到硬盤中,并且控制與外部設備的通信。

基于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視頻壓縮算法采用了基于對象的處理方案,對視頻圖像中的每個目標進行單獨處理,能夠在保證圖像質量的情況下,極大的降低碼率。在相同的圖像質量下,MPEG-4的輸出碼流可以比MPEG-2降低一半。正因為如此,MPEG-4壓縮算法已得到了廣泛的應用。MPEG-4中視頻對象(VO)可能是場景中的某一物體、某個區(qū)域、也可能是計算機產生的二維、三維圖形等。VO的選定依賴于具體的應用和系統(tǒng)所處的環(huán)境:在要求超低比特率的情況下,VO可以是一個矩形幀,與以前的MPEG-1、H.263標準兼容;對于基于內容的應用,每一個VO有三類信息描述:運動信息、形狀編碼、紋理編碼。MPEG-4的編碼結構中,首先是從原始視頻流中分割出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內核,高性能,低功耗,32位CPU,自帶MMU,16k指令cache和16k數(shù)據cache和Maverick Crunch數(shù)學協(xié)處理器;主頻200MHz,系統(tǒng)總線100MHz;所支持的操作系統(tǒng)包括WINCE , Linux【1】。為了便于設計和調試,硬件設計上采用核心板加底板的模塊化設計方法,在核心板上集成了基于EP9315的最小系統(tǒng),通過底板來擴展外部功能。在核心板上主要配置了64MB的NAND Flash 和64MB的SDRAM及提供RTC時鐘和工作時鐘的晶體,并將其豐富的外設接口資源引出。在底板上擴展出USB主機接口、以太網口、UART接口、IDE接口等,以實現(xiàn)與外部設備間的數(shù)據傳輸和通信。

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

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

  視頻A/D芯片選用Philips公司的高性能可編程解碼芯片SAA7118,該芯片支持多種輸入模式,具有抗混疊濾波、自動鉗位、自動增益變換、亮度、對比度、飽和度調整等功能,其工作時鐘為24.576MHz。通過設定SAA7118的內部的配置寄存器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ù)據流,外部接口在得到GPIO0下降沿電平后便可以從IME6400的HOST接口寄存器Encodedstream中讀取數(shù)據流。GPIO0管腳直接與EP9315的中斷管腳FGPIO相連,在處理器獲取下降沿信號后便中斷當前操作,從IME6400讀取數(shù)據。在讀取完畢后,EP9315要向IME6400的HOST總線寄存器USER4發(fā)送一個不同值,通知IME6400數(shù)據讀取完成。隨后IME6400可以在FIFO中裝載新的壓縮數(shù)據流以保證EP9315的繼續(xù)讀取【3】。

  4 軟件設計

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

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

 

  fconfig

  fis load zImage

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

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

  4.1 驅動程序編寫

  編寫linux驅動程序的最主要工作就是file_operations結構中各入口點的實現(xiàn),即對應于open()、release()、read()、write()、ioctrl()等系統(tǒng)調用子函數(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ù)據緩沖區(qū)讀滿后從內核空間傳送到用戶空間。

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

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

  此外,驅動程序中還包括:

  ·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)。

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

  4.2 應用程序編寫

  本系統(tǒng)應用程序主要實現(xiàn)在加載設備驅動后將視頻流從硬件接口層拷到存儲設備,具體操作上運用了多線程設計方法,這種方法的優(yōu)點在于可以共享進程資源,線程間的轉換和調用時間短,效率高,聲明的幾個線程可以相互獨立地完成各自任務,并進行實時通信,傳遞參數(shù)。這里主要創(chuàng)建了三個線程:讀數(shù)據線程,寫數(shù)據線程,串口監(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()調用函數(shù)偵測是否有來自串口的控制指令輸入,如果沒有輸入指定指令將無限期等待,如果得到輸入指令則向讀線程read_thread()發(fā)送信號量sem,通知讀線程準備調用讀取數(shù)據函數(shù)IME6400_read()。在IME6400中FIFO緩沖區(qū)內記錄數(shù)據滿后系統(tǒng)獲得中斷,中斷程序將數(shù)據流拷入內核空間,若緩沖區(qū)滿則讀線程調用ime_read()拷貝數(shù)據到用戶空間,并向IME6400寄存器USER4發(fā)送新的值通知IME6400可以存入新的記錄數(shù)據流,從而進行下一步編碼。ime_read()拷貝完成后返回,由讀線程向寫線程發(fā)送信號量sem1通知寫線程write_thread()調用fwrite()函數(shù)將數(shù)據寫到硬盤,完成后發(fā)送信號量sem2通知讀線程,然后再由讀線程進行下一輪類似前面的操作。與此同時,監(jiān)聽線程一直在偵測是否有串口輸入的用戶指令,如果有則調用中止函數(shù)或重新初始化函數(shù)來退出程序或重新啟動系統(tǒng)。

  5 結論

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

  參考文獻:

  【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)的設備驅動程序開發(fā),微計算機信息,2004.09, 131-133

 

 

此內容為AET網站原創(chuàng),未經授權禁止轉載。