基于MPEG-4視頻標(biāo)準(zhǔn)數(shù)字視頻錄像機(jī)的設(shè)計(jì)及實(shí)現(xiàn)
2 數(shù)字視頻錄像機(jī)的軟件實(shí)現(xiàn)
本文引用地址:http://2s4d.com/article/166932.htm數(shù)字視頻錄像機(jī)系統(tǒng)的軟件設(shè)計(jì)包括:Bootload代碼的編寫、Linux操作系統(tǒng)的內(nèi)核生成和Linux下驅(qū)動(dòng)程序和應(yīng)用程序的開發(fā)、文件系統(tǒng)的生成和配置以及用戶應(yīng)用程序4大塊。
數(shù)字視頻錄像機(jī)軟件開發(fā)的整體架構(gòu)如圖7所示。
2.1 系統(tǒng)啟動(dòng)Bootloader程序設(shè)計(jì)編寫
Bootloader是系統(tǒng)啟動(dòng)時(shí)執(zhí)行的第一個(gè)程序,其主要完成對(duì)硬件系統(tǒng)的初始化。具體包括:S3C2410的初始化、TVP5150功能配置、SAA7121功能配置、加載AT2042固件、以太網(wǎng)及串口初始化。由于在開機(jī)時(shí)要顯示開機(jī)畫面,故除在Bootloader中初始化相應(yīng)硬件資源外,還應(yīng)將開機(jī)畫面的圖片數(shù)據(jù),傳送到AT2042SDRAM中。Bootloader整體流程圖如圖8所示。
顯示開機(jī)畫面,其主要通過AT2042的JPEG解碼功能來實(shí)現(xiàn)。首先配置AT2042的JPEG解碼功能,將要顯示圖像先以頭文件的形式添加到程序中,當(dāng)需要顯示時(shí)再將圖像數(shù)據(jù)發(fā)送給AT2042。
2.2 Linux系統(tǒng)的配置及設(shè)備驅(qū)動(dòng)程序的編寫
本系統(tǒng)使用的是Linux2.4.18內(nèi)核,在內(nèi)核配置中需增加以下幾個(gè)內(nèi)容:由于本系統(tǒng)中要實(shí)現(xiàn)對(duì)視頻編碼數(shù)據(jù)的存儲(chǔ),故要添加內(nèi)核配置中USB support選項(xiàng)中的USB Mass storage support;在調(diào)試時(shí)需要通過以太網(wǎng)來燒些程序,故內(nèi)核配置時(shí)需添加LAN91C111網(wǎng)卡驅(qū)動(dòng),方法為在NetWork device support選項(xiàng)下選擇SMC91111 support,同時(shí)內(nèi)核要支持各種文件系統(tǒng),需在File system選項(xiàng)下進(jìn)行相應(yī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)用程序可以像操作普通文件一樣對(duì)AT2042硬件設(shè)備進(jìn)行操作。AT2042設(shè)備驅(qū)動(dòng)子模塊作為系統(tǒng)內(nèi)核的一部分,主要完成對(duì)AT2042的初始化、編解碼數(shù)據(jù)的讀寫、以及編解碼功能參數(shù)的設(shè)置。包含的功能函數(shù)主要有模塊入口函數(shù)、設(shè)備操作函數(shù)集合和中斷服務(wù)程序等。
2.3 數(shù)字視頻錄像機(jī)應(yīng)用軟件的設(shè)計(jì)與實(shí)現(xiàn)
(1)界面顯示與菜單功能的設(shè)計(jì)與實(shí)現(xiàn)。界面和菜單的顯示是通過AT2042的OSD(on Screen Display)功能來實(shí)現(xiàn)的,AT2042共有3個(gè)顯示層面,分別為底層是背景層、中間是回放層,頂層是OSD層。
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 at2042_load_font(uns8 * font_data,uns32font_data_size)該函數(shù)的主要功能是把要顯示的數(shù)據(jù)加載到AT2042的SDRAM中,同時(shí)設(shè)置顯示位置,即垂直、水平像素點(diǎn)的位置。
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流來對(duì)視頻數(shù)據(jù)進(jìn)行編碼。
AT2042視頻編碼的流程如圖9所示。
實(shí)現(xiàn)這一功能主要通過對(duì)以下幾個(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的編碼功能;
void encoding_stream_read(uns8 * data,uns32 data_size)該函數(shù)實(shí)現(xiàn)將編碼數(shù)據(jù)從MuxFIFO中讀出。
(3)解碼功能實(shí)現(xiàn)。實(shí)現(xiàn)的具體流程如圖10所示。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論