基于MPEG-4視頻標準數字視頻錄像機的設計及實現
數字視頻錄像機系統的軟件設計包括:Bootload代碼的編寫、Linux操作系統的內核生成和Linux下驅動程序和應用程序的開發(fā)、文件系統的生成和配置以及用戶應用程序4大塊。
2.1 系統啟動Bootloader程序設計編寫
Bootloader是系統啟動時執(zhí)行的第一個程序,其主要完成對硬件系統的初始化。具體包括:S3C2410的初始化、TVP5150功能配置、SAA7121功能配置、加載AT2042固件、以太網及串口初始化。由于在開機時要顯示開機畫面,故除在Bootloader中初始化相應硬件資源外,還應將開機畫面的圖片數據,傳送到AT2042SDRAM中。Bootloader整體流程圖如圖8所示。
顯示開機畫面,其主要通過AT2042的JPEG解碼功能來實現。首先配置AT2042的JPEG解碼功能,將要顯示圖像先以頭文件的形式添加到程序中,當需要顯示時再將圖像數據發(fā)送給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硬件的細節(jié),這樣在應用程序看來,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,uns32font_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,uns16vsize,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所示。
評論