<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM的MPEG-4數字錄像機的設計實(shí)現

基于A(yíng)RM的MPEG-4數字錄像機的設計實(shí)現

作者: 時(shí)間:2008-04-17 來(lái)源:網(wǎng)絡(luò ) 收藏
【摘要】文章介紹了嵌入式9微處理器EP9315硬件平臺和Linux軟件平臺的視頻,討論了總體原理和架構,核心硬件模塊的和Linux設備驅動(dòng)程序和應用程序的。
【關(guān)鍵詞】EP9315IME6400Linux設備驅動(dòng)

Abstract In this paper, designing and implementing a digital video recorder which is based on the processor 9 hardware series EP9315 and Linux software is achieved; the paper’s content include the general function and structure of the system, the designing of core hardware module and the designing of corresponding devices Linux drivers and application.

Keyword ARM EP9315 IME6400 Linux Module Driver

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

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

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

圖1:系統總體框圖

2 MPEG-4標準

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

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

2.2 MPEG-4碼流的形成

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

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

3 硬件設計

3.1 控制模塊設計

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

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

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

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

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

4 軟件設計

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

fconfig

fis load zImage

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

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

4.1 驅動(dòng)程序編寫(xiě)

編寫(xiě)linux驅動(dòng)程序的最主要工作就是file_operations結構中各入口點(diǎn)的實(shí)現,即對應于open()、release()、read()、write()、ioctrl()等系統調用子函數的編寫(xiě)5。

Open函數ime6400_open(struct inode *inode, struct file *filp),IME6400打開(kāi)后用于模塊加載后的計數,防止系統非法釋放模塊資源。

Read函數ime6400_read(struct file *fp, char *buf, size_t size),在IME6400數據緩沖區讀滿(mǎn)后從內核空間傳送到用戶(hù)空間。

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

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

此外,驅動(dòng)程序中還包括:

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存入內核緩沖區后通知EP9315讀取數據流。

4.2 應用程序編寫(xiě)

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

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

5 結論

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

參考文獻:

【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】 錢(qián)晨 徐榮華 王欽若,基于linux操作系統的設備驅動(dòng)程序開(kāi)發(fā),微計算機信息,2004.09, 131-133



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>