基于PCI總線(xiàn)的MPEG-1壓縮卡軟硬件設計及實(shí)現
2.5 PCI接口部分設計
本系統中PCI接口芯片選用SAA7146A,該芯片并不是通用的PCI接口芯片,而是一個(gè)多媒體橋(Multimedia Bridge)。方框圖如圖2。該芯片符合PCI2.1規范。它有八個(gè)DMA通道,三個(gè)視頻,四個(gè)音頻,一個(gè)DEBI(Data Expansion Bus Interface)。還具有兩路視頻通道,可對視頻數據進(jìn)行縮放,一路可無(wú)級縮放HPS(High Performace Scaler,其縱向可達1:1024、橫向可達1:256;另一路有級縮放BRS(Binary Ratio Scaler支持CIF和QCIF格式。
音頻接口以I2S為基礎,通過(guò)編程控制以支持MSB-FIRST的不同格式及不同的時(shí)序格式。
本系統中該部分主要實(shí)現功能如下:
(1)通過(guò)DEBI接收SZ1510產(chǎn)生的MPEG-1數據,傳輸到內存;
(2)通過(guò)視頻接口,接收SAA7114輸出的視頻解碼信號,并進(jìn)行亮度、色度、飽和度的控制,并實(shí)現無(wú)級縮放功能實(shí)現視頻預覽功能;
(3)通過(guò)音頻接口,接收PCM1800E輸出的PCM編碼信號,傳輸到內存,實(shí)現聲音監聽(tīng)功能;
(4)提供符合PCI2.1規范的接口,將板上數據傳輸到主機內存。
3 軟件設計
軟件設計主要包括驅動(dòng)程序設計和應用層的API設計。
驅動(dòng)程序主要負責與硬件打交道,應用層API主要負責與驅動(dòng)程序接口。由于設計了應用層的API,應用程序可很容易在上面進(jìn)行開(kāi)發(fā)。
3.1 驅動(dòng)程序設計
為了支持Windows2000和Windows98采用WDMWindows Driver Model 驅動(dòng)程序。WDM 作為微軟的最新驅動(dòng)程序模型與傳統的Win3.x和Win95使用的VxD驅動(dòng)完全不同。WDM可支持電源管理、自動(dòng)配置和熱插拔等。WDM驅動(dòng)的設計可以采用Driver StudioDS、Windriver、DDKDriver Device Kit等。本系統驅動(dòng)采用Windows 2000 DDK借助VC6.0設計。
3.1.1 MPEG-I壓縮部分
在驅動(dòng)中,重置SZ1510后,就可以裝載相應工作模式的微碼;根據需要,設置好相應寄存值后就可以啟動(dòng)SZ1510對視頻數據進(jìn)行MPEG-1編碼。每當產(chǎn)生的壓縮數據超過(guò)SZ1510內部的FIFO門(mén)限后,SZ1510產(chǎn)生相應中斷,內核調用中斷例程,在中斷例程中調用中斷延遲例程DPC,在中斷延遲例程中接收產(chǎn)生的壓縮數據。SZ1510提供兩種方式提取數據,一種用I2C總線(xiàn)接口方式,另一種用DEBI方式。
在本系統中,采用DEBI進(jìn)行壓縮數據的傳輸??紤]到壓縮數據產(chǎn)生的速度,本系統開(kāi)了32頁(yè)大小的緩沖區,在中斷延遲例程中填充該緩沖區。每當填滿(mǎn)8頁(yè)大小后,產(chǎn)生一個(gè)事件通知應用層進(jìn)行數據讀取。通過(guò)這種方式,可以避免壓縮數據的丟失。
其流程圖如圖3所示。
在驅動(dòng)中,壓縮數據的提取方式將極大地影響生成MPEG文件的質(zhì)量。如果處理不當,將導致馬賽克、跳幀等現象。
3.1.2 驅動(dòng)程序中用戶(hù)緩沖區的訪(fǎng)問(wèn)
驅動(dòng)程序訪(fǎng)問(wèn)用戶(hù)內存主要通過(guò)緩沖I/O和直接I/O。緩沖I/OI/O管理器創(chuàng )建一個(gè)內核模式拷貝緩沖區,并把用戶(hù)緩沖區的內容拷貝到該緩沖區中,并在IRP首部的AssociateIrp.SystemBuffer域中存儲該非分頁(yè)內存地址。驅動(dòng)程序可簡(jiǎn)單地讀寫(xiě)該塊內存。直接I/O,I/O管理器為輸入數據提供一個(gè)內核模式拷貝緩沖區,對輸出數據提供一個(gè)內存描述符(MDL)。為了使用緩沖I/O或直接I/O在創(chuàng )建設備時(shí),必須設置設備對象的Flags域中的DO_BUFFERED_IO標志位來(lái)使用緩沖I/O或設置DO_DIRECT_IO標志位來(lái)使用直接I/O。
在本驅動(dòng)中由于緩沖I/O和直接I/O都被使用,DO_BUFFERED_IO標志位和DO_DIRECT_IO標志位都被設置。
在定義IOCTL碼中,對緩沖I/O使用METHOD_BUFFEERED對直接I/O使用METHOD_OUT_DIRECT。
3.2 應用層API設計
應用層對驅動(dòng)程序的訪(fǎng)問(wèn)通過(guò)調用Win32 I/O函數(如ReadFile、WriteFile和DeviceIoControl)訪(fǎng)問(wèn)。當應用層調用Win32 I/O函數以請求I/O后,該請求由內核的I/O系統服務(wù)接收,I/O管理器對該請求構造合適的IRP包,并將其傳給驅動(dòng)程序棧,IRP在棧中進(jìn)行傳遞,傳到驅動(dòng)程序進(jìn)行處理,并將結果返回給應用程序。
通過(guò)應用層API,在其上面可進(jìn)一步開(kāi)發(fā)各類(lèi)應用程序。
本系統達到了預期的要求,能夠在音視頻采集過(guò)程中對視頻、音頻進(jìn)行實(shí)時(shí)預覽、監聽(tīng)。壓縮生成的文件可在標準媒體播放器上播放,并可對生成的VCD文件進(jìn)行刻錄,然后由VCD機播放.
評論