驅(qū)動(dòng)程序主要負(fù)責(zé)與硬件打交道,應(yīng)用層API主要負(fù)責(zé)與驅(qū)動(dòng)程序接口。由于設(shè)計(jì)了應(yīng)用層的API,應(yīng)用程序可很容易在上面進(jìn)行開發(fā)。3.1 驅(qū)動(dòng)程序設(shè)計(jì)
為了支持Windows2000和Windows98采用WDMWindows Driver Model 驅(qū)動(dòng)程序。WDM 作為微軟的最新驅(qū)動(dòng)程序模型與傳統(tǒng)的Win3.x和Win95使用的VxD驅(qū)動(dòng)完全不同。WDM可支持電源管理、自動(dòng)配置和熱插拔等。WDM驅(qū)動(dòng)的設(shè)計(jì)可以采用Driver StudioDS、Windriver、DDKDriver Device Kit等。本系統(tǒng)驅(qū)動(dòng)采用Windows 2000 DDK借助VC6.0設(shè)計(jì)。
3.1.1 MPEG-I壓縮部分
在驅(qū)動(dòng)中,重置SZ1510后,就可以裝載相應(yīng)工作模式的微碼;根據(jù)需要,設(shè)置好相應(yīng)寄存值后就可以啟動(dòng)SZ1510對(duì)視頻數(shù)據(jù)進(jìn)行MPEG-1編碼。每當(dāng)產(chǎn)生的壓縮數(shù)據(jù)超過SZ1510內(nèi)部的FIFO門限后,SZ1510產(chǎn)生相應(yīng)中斷,內(nèi)核調(diào)用中斷例程,在中斷例程中調(diào)用中斷延遲例程DPC,在中斷延遲例程中接收產(chǎn)生的壓縮數(shù)據(jù)。SZ1510提供兩種方式提取數(shù)據(jù),一種用I2C總線接口方式,另一種用DEBI方式。
在本系統(tǒng)中,采用DEBI進(jìn)行壓縮數(shù)據(jù)的傳輸?紤]到壓縮數(shù)據(jù)產(chǎn)生的速度,本系統(tǒng)開了32頁(yè)大小的緩沖區(qū),在中斷延遲例程中填充該緩沖區(qū)。每當(dāng)填滿8頁(yè)大小后,產(chǎn)生一個(gè)事件通知應(yīng)用層進(jìn)行數(shù)據(jù)讀取。通過這種方式,可以避免壓縮數(shù)據(jù)的丟失。
其流程圖如圖3所示。
在驅(qū)動(dòng)中,壓縮數(shù)據(jù)的提取方式將極大地影響生成MPEG文件的質(zhì)量。如果處理不當(dāng),將導(dǎo)致馬賽克、跳幀等現(xiàn)象。
3.1.2 驅(qū)動(dòng)程序中用戶緩沖區(qū)的訪問
驅(qū)動(dòng)程序訪問用戶內(nèi)存主要通過緩沖I/O和直接I/O。緩沖I/OI/O管理器創(chuàng)建一個(gè)內(nèi)核模式拷貝緩沖區(qū),并把用戶緩沖區(qū)的內(nèi)容拷貝到該緩沖區(qū)中,并在IRP首部的AssociateIrp.SystemBuffer域中存儲(chǔ)該非分頁(yè)內(nèi)存地址。驅(qū)動(dòng)程序可簡(jiǎn)單地讀寫該塊內(nèi)存。直接I/O,I/O管理器為輸入數(shù)據(jù)提供一個(gè)內(nèi)核模式拷貝緩沖區(qū),對(duì)輸出數(shù)據(jù)提供一個(gè)內(nèi)存描述符(MDL)。為了使用緩沖I/O或直接I/O在創(chuàng)建設(shè)備時(shí),必須設(shè)置設(shè)備對(duì)象的Flags域中的DO_BUFFERED_IO標(biāo)志位來使用緩沖I/O或設(shè)置DO_DIRECT_IO標(biāo)志位來使用直接I/O。
在本驅(qū)動(dòng)中由于緩沖I/O和直接I/O都被使用,DO_BUFFERED_IO標(biāo)志位和DO_DIRECT_IO標(biāo)志位都被設(shè)置。
在定義IOCTL碼中,對(duì)緩沖I/O使用METHOD_BUFFEERED對(duì)直接I/O使用METHOD_OUT_DIRECT。
3.2 應(yīng)用層API設(shè)計(jì)
應(yīng)用層對(duì)驅(qū)動(dòng)程序的訪問通過調(diào)用Win32 I/O函數(shù)(如ReadFile、WriteFile和DeviceIoControl)訪問。當(dāng)應(yīng)用層調(diào)用Win32 I/O函數(shù)以請(qǐng)求I/O后,該請(qǐng)求由內(nèi)核的I/O系統(tǒng)服務(wù)接收,I/O管理器對(duì)該請(qǐng)求構(gòu)造合適的IRP包,并將其傳給驅(qū)動(dòng)程序棧,IRP在棧中進(jìn)行傳遞,傳到驅(qū)動(dòng)程序進(jìn)行處理,并將結(jié)果返回給應(yīng)用程序。
通過應(yīng)用層API,在其上面可進(jìn)一步開發(fā)各類應(yīng)用程序。
本系統(tǒng)達(dá)到了預(yù)期的要求,能夠在音視頻采集過程中對(duì)視頻、音頻進(jìn)行實(shí)時(shí)預(yù)覽、監(jiān)聽。壓縮生成的文件可在標(biāo)準(zhǔn)媒體播放器上播放,并可對(duì)生成的VCD文件進(jìn)行刻錄,然后由VCD機(jī)播放.





