摘 要:國內外許多公司都在開發有關MPEG-4視頻標準的產品,最具代表意義的即是數字視頻錄像機(DVR)。為了縮短開發周期,這里介紹基于嵌入式Linux操作系統,應用專用音視頻編解碼芯片AT2042實現數字視頻錄像機功能,該系統實現MPEG-4視頻標準高級框架的編解碼器,并在此基礎上添加數字硬盤的功能,例如編碼存儲、解碼播放、快進、快退和暫停等功能。最后給出系統的實際運行的測試結果。該系統已實現對視頻數據的編、解碼,且實現MPEG-4/MPEG-2/MPEG-1 H.263視頻標準,并已成為成型產品推向市場。
關鍵詞:MPEG-4;AT2042;Linux;DVR
中圖分類號:TP391文獻標識碼:B文章編號:1004373X(2008)2005104
Design and Realization of Digital Video Recorder Based on MPEG-4 Video Standard
ZHANG Shi,QI Xiaolong,BAO Xirong,SHE Lihuang
(College of Information Science Engineering,Northeastern University,Shenyang,110004,China)
Abstract:Many companies are developing products about MPEG-4 video standard,Digital Video Recorder(DVR) is the most.In order to cut dowm developmenttime,applying the special video CODE chip AT2042,which realizes function for digital video recorder based on embedded Linux operating system.The system has some functions such as play,pause,recorder and so on.The practical testing results of the system are given,the coding/decoding for video data and video standard such as MPEG-4/MPEG-2/MPEG-1 H.263.
Keywords:MPEG-4;AT2042;Linux;DVR
隨著視頻壓縮技術的迅猛發展,新的視頻壓縮標準不斷推出。MPEG-4是由國際運動圖像專
家組(MPEG)在繼MPEG-1和MPEG-2之后,制訂的又一個ISO/IEC標準,即ISO/IEC 14496。它能夠獲得更高的音/視頻壓縮率,具有基于內容的交互能力。目前,國內外許多公司都在開發有關MPEG-4視頻標準的產品,最具代表意義的即是數字視頻錄像機(DVR)。
1 數字視頻錄像機的硬件設計
在基于S3C2410與AT2042的數字視頻錄像機的設計和實現中,其終端設備以Samsung公司的32位處理器S3C2410為主控處理器,利用Pentamicro公司的AT2042芯片完成雙通道視頻編碼與解碼,其視頻錄像功能具有高分辨率和高質量。本文將介紹此終端的系統整體設計,并詳細分析系統軟硬件設計,最后給出測試結果和結論。根據市場的需求,本系統預計實現下列幾項指標:
(1) 實現對視頻數據的MPEG-4標準的編解碼;
(2) 編解碼像素為720X576像素點,實現25 f/s;
(3) 實現JPEG編碼和解碼;
(4) 實現USB/SD卡儲存。
1.1 基于S3C2410與AT2042的數字視頻錄像機整體設計
該系統主要依靠AT2042的編解碼功能,系統的硬件框圖如圖1所示,它主要由視頻編碼子系統、主控系統、數據處理子系統和視頻解碼子系統4大部分構成。

韓國Pentamicro公司生產的AT2042芯片的功能模塊如圖2所示, AT2042 是一個內置微控制器ARM946E 的2 通道音視頻編解碼(A/VCODEC)芯片,主要完成對視頻和語音數據的編碼和解碼,支持多種音視頻編解碼標準,可直接與IBM,Motorola,ARM,Xscale 和Axis 等多種CPU接口,無需其他附加電路。

1.2 視頻編解碼電路設計
視頻編解碼電路主要包括視頻編解碼電路和視頻壓縮/解壓芯片AT2042。其中,AT2042 主要負責對數字視頻數據進行硬件壓縮和解壓縮,而視頻編解碼電路則是基帶模擬視頻信號和AT2042 之間的一個接口電路,它包括一個視頻編碼芯片和一個視頻解碼芯片,主要負責視頻數據的模/數和數/模轉換,以及數字視頻信號格式的轉換。在壓縮編碼過程中,輸入的NTSC/PAL/SECAM視頻信號先經過視頻解碼芯片進行前端處理,產生符合AT2042 視頻接口標準的8 b ITU-R BT.656數字視頻信號。在外部主CPU 的控制下,該數字視頻數據由壓縮/解壓芯片AT2042 進行硬件壓縮編碼,產生的編碼數據流通過芯片內部集成的Mux FIFO 接口輸出。網絡視頻服務器的解壓縮編碼是壓縮編碼的逆過程,需要解壓的數據流通過AT2042內部集成的Demux FIFO 接口輸入。視頻采集接口框圖如圖3所示:

攝像頭采集輸出信號為NTSC,PAL或SECAM制式的電視信號,必須經過視頻解碼處理才能轉化成適合AT2042進行編碼的數字信號。TVP5150是TI公司生產的一款電視信號解碼專用芯片,它對輸入的模擬信號進行A/D轉化,通過設置相應的寄存器可以使輸出信號滿足RGB格式或YUV422格式。由于在本系統中AT2042視頻接口滿足ITU.RBT656標準,故TVP5150輸出配置為8位YUV422格式。如圖4所示。

現在的數字電視視頻接口還沒有實現統一的工業標準,故在視頻輸出端設計時,仍使用現在比較流行的A/V接口或S-video接口。由于上述2種接口傳輸的為模擬電視信號,故在AT2042的視頻輸出端口需要增加一級處理,即將數字信號轉化為模擬電視信號。在后端設計中選用SAA7121,它是一款專用的電視信號編碼芯片,可以將輸入的數字信號經過內部的D/A轉化為適于傳輸的模擬電視信號,通過配置相應的寄存器可以輸出滿足S-video接口或復用接口的信號。
1.3 AT2042的主機接口
主控CPU(S3C2410) 和AT2042 是數字視頻錄像機的核心處理芯片,S3C2410 控制整個數字視頻錄像機系統的運行,AT2042 除完成對視頻信號的硬件壓縮編碼外,還可對壓縮后的視頻數據進行硬件解壓縮。AT2042 壓縮編碼后的視頻數據通過芯片內部集成的Mux FIFO接口輸出后,外部主CPU 負責對其進行USB存儲器處理,處理后的視頻數據可以存儲在物理介質上,以便在需要時通過鍵盤操作進行回放。
圖5為S3C2410與AT2042接口框圖。

AT2042的CPU_SEL[2:0]是主控CPU選擇引腳,經配置這幾個引腳的高低電平,使AT2042可選擇主控CPU,CPU_SEL[2:0]為010選擇ARM結構芯片;
nCS,nWAIT等為總線控制信號線;
HCLK是AT2042主機接口的工作時鐘,一般要求工作在50 MHz,當S3C2410 在復位后設置FCLK為200 MHz,HCLK為100 MHz,PCLK為50 MHz。故將S3C2410的PCLK引腳與AT2042的HCLK引腳相連。
通過這種機制,S3C2410可以實現簡單的訪問AT2042。
AT2042 與CPU的通信機制如圖6所示,CPU對AT2042的控制和訪問主要通過AT2042的2個寄存器(status register和command register) 和4個FIFO(Tx FIFO,Rx FIFO,Multiplex FIFO和De-Multiplex FIFO)完成。

2 數字視頻錄像機的軟件實現
數字視頻錄像機系統的軟件設計包括:Bootload 代碼的編寫、Linux 操作系統的內核生成和Linux下驅動程序和應用程序的開發、文件系統的生成和配置以及用戶應用程序4大塊。
數字視頻錄像機軟件開發的整體架構如圖7所示。
2.1 系統啟動Bootloader程序設計編寫
Bootloader是系統啟動時執行的第一個程序,其主要完成對硬件系統的初始化。具體包括:S3C2410的初始化、TVP5150功能配置、SAA7121功能配置、加載AT2042固件、以太網及串口初始化。由于在開機時要顯示開機畫面,故除在Bootloader中初始化相應硬件資源外,還應將開機畫面的圖片數據,傳送到AT2042 SDRAM中。Bootloader整體流程圖如圖8所示。
顯示開機畫面,其主要通過AT2042的JPEG解碼功能來實現。首先配置AT2042的JPEG解碼功能,將要顯示圖像先以頭文件的形式添加到程序中,當需要顯示時再將圖像數據發送給AT2042。
2.2 Linux系統的配置及設備驅動程序的編寫
本系統使用的是Linux2.4.18內核,在內核配置中需增加以下幾個內容:由于本系統中要實現對視頻編碼數據的存儲,故要添加內核配置中USB support選項中的USB Mass storage support;在調試時需要通過以太網來燒些程序,故內核配置時需添加LAN91C111網卡驅動,方法為在NetWork device support選項下選擇SMC91111 support,同時內核要支持各種文件系統,需在File system選項下進行相應配置。
系設備驅動程序主要完成以下的功能:

AT2042 設備驅動子模塊系統調用是操作系統內核和上層應用程序之間的接口,AT2042 設備驅動子模塊是操作系統內核和AT2042 硬件設備之間的接口。操作系統內核向AT2042設備驅動子模塊提供內核API 和其他的內核支持。AT2042 設備驅動子模塊為上層應用程序屏蔽了AT2042硬件的細節,這樣在應用程序看來,AT2042 硬件設備只是一個設備文件,應用程序可以像操作普通文件一樣對AT2042 硬件設備進行操作。AT2042 設備驅動子模塊作為系統內核的一部分,主要完成對AT2042 的初始化、編解碼數據的讀寫、以及編解碼功能參數的設置。包含的功能函數主要有模塊入口函數、設備操作函數集合和中斷服務程序等。
2.3 數字視頻錄像機應用軟件的設計與實現
(1) 界面顯示與菜單功能的設計與實現。
界面和菜單的顯示是通過AT2042的OSD(on Screen Display)功能來實現的,AT2042共有3個顯示層面,分別為底層是背景層、中間是回放層,頂層是OSD層。
OSD層支持16色的調色板。由于AT2042自身沒有相應的ROM存儲OSD所要顯示的圖片及文字數據,故在利用OSD功能來顯示圖片或文字時,首先要將需顯示的圖片或文字數據加載到AT2042的SDRAM中,然后調用顯示功能將圖片或文字顯示在OSD層上。
這個功能的實現過程中主要調用以下2個函數:
void at2042_load_font(uns8 *font_data,uns32 font_data_size)該函數的主要功能是把要顯示的數據加載到AT2042的SDRAM中,同時設置顯示位置,即垂直、水平像素點的位置。
void osd_on_off(uns8 temp)該函數的功能是打開或關閉OSD模式。
(2) MPEG-4視頻編碼實現。
該功能主要利用AT2042來實現。首先,配置相應的編碼寄存器,例如編碼模式、編碼像素點、編碼幀率及設置編碼流格式(PES,PS,TS)等。本系統中采用MPEG-4模式、720X576、每秒25幀及生成PES流來對視頻數據進行編碼。
AT2042視頻編碼的流程如圖9所示。
實現這一功能主要通過對以下幾個函數的調用:
void set_encoder_parameter(uns16 hsize,uns16 vsize,uns8 rate,uns8 mode)該函數用來設置編碼參數;
void video_encoder_start(uns8 mode)該函數用來啟動AT2042的編碼功能;
void video_encoder_stop(uns8 mode)該函數用來關閉AT2042的編碼功能;
void encoding_stream_read(uns8 *data,uns32 data_size)該函數實現將編碼數據從MuxFIFO中讀出。
(3) 解碼功能實現。
實現的具體流程如圖10所示。
實現這些功能主要通過對以下幾個函數的調用:
void set_decoder_parameter(uns16 hsize,uns16 vsize,uns8 rate,uns8 mode)該函數用來設置解碼參數;
void video_decoder_start(uns8 mode)該函數用來啟動AT2042的解碼功能;
void video_decoder_stop(uns8 mode)該函數用來關閉AT2042的解碼功能;
void get_file_length(const char *file_name)該函數用來獲取文件的長度;
void video_replay(const char*file_name,uns8 mode)該函主要實現對視頻文件的播放控制,mode控制播放模式(暫停、快進、快退)。

3 測試結果
實驗結果進行測試,可以采用2套方案來完成。
(1) 使用自行設計的硬件平臺,在該平臺上完成對視頻編解碼的測試。圖11為在本系統平臺上對編碼數據的解碼播放截圖。

(2) 將編碼后的視頻文件拷貝到PC機上,應用Media Player、暴風音影和風雷音影等視頻播放軟件對編碼結果進行測試,同時可以對比解碼播放的效果。因為本系統中視頻文件是以PES流形式保存到儲存介質,PES滿足ISO13818標準,所以PC平臺上的普通視頻播放器都能播放該文件。圖12是用風雷音影播放器對編碼結果進行解碼播放的截圖。
由圖可以看出,解碼出的視頻文件是720X576像素點,解碼播放的速率為25.59 f/s。畫面沒有出現失真現象,沒有明顯的塊效應。由表1中的數據可得,在使用AT2042對靜止圖像編碼時,可實現接近100∶1的壓縮比,在對動態畫面進行編碼時,可以實現40∶1的壓縮比。


4 結 語
本文詳細介紹基于專用視頻編解碼芯片AT2042的數字視頻錄像機系統的硬件設計和軟件開發流程。該系統已實現對視頻數據的編碼和解碼,同時實現了MPEG-4/MPEG-2/MPEG-1 H.263視頻標準,并已作為成型產品推向市場。
參考文獻
[1]王學龍.嵌入式Linux系統設計與應用[M].北京:清華大學出版社,2001.
[2]周立功.ARM嵌入式Linux系統構建與驅動開發范例[M].北京:北京航空航天大學出版社,2006.
[3]Pentamicro.AT204x_DataSheet_v20(Eng)[EB/OL].www.pentamicro.com.
[4]李嚴.基于ARM7TDMI和μClinux的嵌入式MPEG4網絡視頻終端及服務器[D].浙江:浙江大學,2006.
[5]王卉,吳慶洪.MPEG-4嵌入式視頻解碼系統的研究與實現\\.現代電子技術,2007,30(18):149-151,155.
[6]于雪蓮,陳錢.基于MPEG-4網絡視頻服務器的研制\\.現代電子技術,2007,30(16):122-123,127.
作者簡介 張 石 1963年出生,博士,東北大學信息學院電子信息研究所所長。主要研究方向為嵌入式系統開發。
齊曉龍 1980年出生,東北大學在讀碩士研究生。研究方向為嵌入式系統開發。
鮑喜榮 1978年出生,博士,東北大學信息學院電子信息工程研究所助教。主要研究方向為嵌入式系統開發。
佘黎瑝 1980年出生,在讀博士,東北大學信息學院電子信息工程研究所助教。主要研究方向為嵌入式系統開發。