主頁(http://www.130131.com):基于MPEG-4視頻標(biāo)準(zhǔn)數(shù)字視頻錄像機(jī)的設(shè)計(jì)與實(shí)現(xiàn)(2) 顯示開機(jī)畫面,其主要通過AT2042的JPEG解碼功能來實(shí)現(xiàn)。首先配置AT2042的JPEG解碼功能,將要顯示圖像先以頭文件的形式添加到程序中,當(dāng)需要顯示時(shí)再將圖像數(shù)據(jù)發(fā)送給AT2042。 2.2 Linux系統(tǒng)的配置及設(shè)備驅(qū)動(dòng)程序的編寫 系設(shè)備驅(qū)動(dòng)程序主要完成以下的功能: AT2042設(shè)備驅(qū)動(dòng)子模塊系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和上層應(yīng)用程序之間的接口,AT2042設(shè)備驅(qū)動(dòng)子模塊是操作系統(tǒng)內(nèi)核和AT2042硬件設(shè)備之間的接口。操作系統(tǒng)內(nèi)核向AT2042設(shè)備驅(qū)動(dòng)子模塊提供內(nèi)核API和其他的內(nèi)核支持。AT2042設(shè)備驅(qū)動(dòng)子模塊為上層應(yīng)用程序屏蔽了AT2042硬件的細(xì)節(jié),這樣在應(yīng)用程序看來,AT2042硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對AT2042硬件設(shè)備進(jìn)行操作。AT2042設(shè)備驅(qū)動(dòng)子模塊作為系統(tǒng)內(nèi)核的一部分,主要完成對AT2042的初始化、編解碼數(shù)據(jù)的讀寫、以及編解碼功能參數(shù)的設(shè)置。包含的功能函數(shù)主要有模塊入口函數(shù)、設(shè)備操作函數(shù)集合和中斷服務(wù)程序等。 2.3 數(shù)字視頻錄像機(jī)應(yīng)用軟件的設(shè)計(jì)與實(shí)現(xiàn) OSD層支持16色的調(diào)色板。由于AT2042自身沒有相應(yīng)的ROM存儲(chǔ)OSD所要顯示的圖片及文字?jǐn)?shù)據(jù),故在利用OSD功能來顯示圖片或文字時(shí),首先要將需顯示的圖片或文字?jǐn)?shù)據(jù)加載到AT2042的SDRAM中,然后調(diào)用顯示功能將圖片或文字顯示在OSD層上。 這個(gè)功能的實(shí)現(xiàn)過程中主要調(diào)用以下2個(gè)函數(shù): void osd_on_off(uns8 temp)該函數(shù)的功能是打開或關(guān)閉OSD模式。 (2)MPEG-4視頻編碼實(shí)現(xiàn)。該功能主要利用AT2042來實(shí)現(xiàn)。首先,配置相應(yīng)的編碼寄存器,例如編碼模式、編碼像素點(diǎn)、編碼幀率及設(shè)置編碼流格式(PES,PS,TS)等。本系統(tǒng)中采用MPEG-4模式、720X576、每秒25幀及生成PES流來對視頻數(shù)據(jù)進(jìn)行編碼。 AT2042視頻編碼的流程如圖9所示。
實(shí)現(xiàn)這一功能主要通過對以下幾個(gè)函數(shù)的調(diào)用: void set_encoder_parameter(uns16 hsize,uns16vsize,uns8 rate,uns8 mode)該函數(shù)用來設(shè)置編碼參數(shù); void video_encoder_start(uns8 mode)該函數(shù)用來啟動(dòng)AT2042的編碼功能; void video_encoder_stop(uns8 mode)該函數(shù)用來關(guān)閉AT2042的編碼功能; 0 0 (請您對文章做出評價(jià))void encoding_stream_read(uns8 * data,uns32 data_size)該函數(shù)實(shí)現(xiàn)將編碼數(shù)據(jù)從MuxFIFO中讀出。 (3)解碼功能實(shí)現(xiàn)。實(shí)現(xiàn)的具體流程如圖10所示。 void set_decoder_parameter(uns16 hsize,uns16 vsize,uns8 rate,uns8 mode)該函數(shù)用來設(shè)置解碼參數(shù); void video_decoder_start(uns8 mode)該函數(shù)用來啟動(dòng)AT2042的解碼功能; void video_decoder_stop(uns8 mode)該函數(shù)用來關(guān)閉AT2042的解碼功能; void get_file_length(const char * file_name)該函數(shù)用來獲取文件的長度; void video_replay(const char * file_name,uns8mode)該函主要實(shí)現(xiàn)對視頻文件的播放控制,mode控制播放模式(暫停、快進(jìn)、快退)。 3 測試結(jié)果 (2)將編碼后的視頻文件拷貝到PC機(jī)上,應(yīng)用Media Player、暴風(fēng)音影和風(fēng)雷音影等視頻播放軟件對編碼結(jié)果進(jìn)行測試,同時(shí)可以對比解碼播放的效果。因?yàn)楸鞠到y(tǒng)中視頻文件是以PES流形式保存到儲(chǔ)存介質(zhì)。PES滿足ISO13818標(biāo)準(zhǔn),所以PC平臺上的普通視頻播放器都能播放該文件。圖12是用風(fēng)雷音影播放器對編碼結(jié)果進(jìn)行解碼播放的截圖。
由圖可以看出,解碼出的視頻文件是720X576像素點(diǎn),解碼播放的速率為25.59 f/s。畫面沒有出現(xiàn)失真現(xiàn)象,沒有明顯的塊效應(yīng)。由表1中的數(shù)據(jù)可得,在使用AT2042對靜止圖像編碼時(shí),可實(shí)現(xiàn)接近100:1的壓縮比,在對動(dòng)態(tài)畫面進(jìn)行編碼時(shí),可以實(shí)現(xiàn)40:1的壓縮比。
4 結(jié) 語 (中國集群通信網(wǎng) | 責(zé)任編輯:陳曉亮) |







