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

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

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

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

基于ARM的<a class=MPEG-4數(shù)字錄像機(jī)" title="MPEG-4數(shù)字錄像機(jī)">MPEG-4數(shù)字錄像機(jī)的設(shè)計(jì)實(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標(biāo)準(zhǔn)

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

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

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

  2.2 MPEG-4碼流的形成

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

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

  圖3 MPEG-4視頻碼流的基本構(gòu)成

  3 硬件設(shè)計(jì)

  3.1 控制模塊設(shè)計(jì)

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

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

  3.2 視頻音頻編解碼模塊設(shè)計(jì)

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

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

  4 軟件設(shè)計(jì)

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

關(guān)鍵字:ARM MPEG-4數(shù)字錄像機(jī)

 

  fconfig

  fis load zImage

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

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

  4.1 驅(qū)動(dòng)程序編寫

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

  ·Open函數(shù)ime6400_open(struct inode *inode, struct file *filp),IME6400打開(kāi)后用于模塊加載后的計(jì)數(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ū)動(dòng)程序中還包括:

  ·IME6400片選的聲明

  #define BASE_ADDR           0x28000000  

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

  ·IME6400中斷的申請(qǐng)

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

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

  4.2 應(yīng)用程序編寫

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

  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)啟動(dòng)后,系統(tǒng)首先通過(guò)IIC初始化EP9315和IME6400,然后串口監(jiān)聽(tīng)線程listen_thread()調(diào)用函數(shù)偵測(cè)是否有來(lái)自串口的控制指令輸入,如果沒(méi)有輸入指定指令將無(wú)限期等待,如果得到輸入指令則向讀線程read_thread()發(fā)送信號(hào)量sem,通知讀線程準(zhǔn)備調(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ù)流,從而進(jìn)行下一步編碼。ime_read()拷貝完成后返回,由讀線程向?qū)懢€程發(fā)送信號(hào)量sem1通知寫線程write_thread()調(diào)用fwrite()函數(shù)將數(shù)據(jù)寫到硬盤,完成后發(fā)送信號(hào)量sem2通知讀線程,然后再由讀線程進(jìn)行下一輪類似前面的操作。與此同時(shí),監(jiān)聽(tīng)線程一直在偵測(cè)是否有串口輸入的用戶指令,如果有則調(diào)用中止函數(shù)或重新初始化函數(shù)來(lái)退出程序或重新啟動(dòng)系統(tǒng)。

  5 結(jié)論

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

  參考文獻(xiàn):

  【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)的設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā),微計(jì)算機(jī)信息,2004.09, 131-133

 

 

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