<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于PCI總線的MPEG-1壓縮卡軟硬件設(shè)計及實現(xiàn)

          基于PCI總線的MPEG-1壓縮卡軟硬件設(shè)計及實現(xiàn)

          作者: 時間:2012-04-14 來源:網(wǎng)絡(luò) 收藏

            2.5 PCI接口部分設(shè)計

            本系統(tǒng)中PCI接口芯片選用SAA7146A,該芯片并不是通用的PCI接口芯片,而是一個多媒體橋(Multimedia Bridge)。方框圖如圖2。該芯片符合PCI2.1規(guī)范。它有八個DMA通道,三個視頻,四個音頻,一個DEBI(Data Expansion Bus Interface)。還具有兩路視頻通道,可對視頻數(shù)據(jù)進行縮放,一路可無級縮放HPS(High Performace Scaler,其縱向可達1:1024、橫向可達1:256;另一路有級縮放BRS(Binary Ratio Scaler支持CIF和QCIF格式。

            音頻接口以I2S為基礎(chǔ),通過編程控制以支持MSB-FIRST的不同格式及不同的時序格式。

            本系統(tǒng)中該部分主要實現(xiàn)功能如下:

            (1)通過DEBI接收SZ1510產(chǎn)生的數(shù)據(jù),傳輸?shù)絻?nèi)存;

            (2)通過視頻接口,接收SAA7114輸出的視頻解碼信號,并進行亮度、色度、飽和度的控制,并實現(xiàn)無級縮放功能實現(xiàn)視頻預(yù)覽功能;

            (3)通過音頻接口,接收PCM1800E輸出的PCM編碼信號,傳輸?shù)絻?nèi)存,實現(xiàn)聲音監(jiān)聽功能;

            (4)提供符合PCI2.1規(guī)范的接口,將板上數(shù)據(jù)傳輸?shù)街鳈C內(nèi)存。

            3 軟件設(shè)計

            軟件設(shè)計主要包括驅(qū)動程序設(shè)計和應(yīng)用層的API設(shè)計。

            驅(qū)動程序主要負責(zé)與硬件打交道,應(yīng)用層API主要負責(zé)與驅(qū)動程序接口。由于設(shè)計了應(yīng)用層的API,應(yīng)用程序可很容易在上面進行開發(fā)。

            3.1 驅(qū)動程序設(shè)計

            為了支持Windows2000和Windows98采用WDMWindows Driver Model 驅(qū)動程序。WDM 作為微軟的最新驅(qū)動程序模型與傳統(tǒng)的Win3.x和Win95使用的VxD驅(qū)動完全不同。WDM可支持電源管理、自動配置和熱插拔等。WDM驅(qū)動的設(shè)計可以采用Driver StudioDS、Windriver、DDKDriver Device Kit等。本系統(tǒng)驅(qū)動采用Windows 2000 DDK借助VC6.0設(shè)計。

            3.1.1 MPEG-I壓縮部分

            在驅(qū)動中,重置SZ1510后,就可以裝載相應(yīng)工作模式的微碼;根據(jù)需要,設(shè)置好相應(yīng)寄存值后就可以啟動SZ1510對視頻數(shù)據(jù)進行編碼。每當產(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進行壓縮數(shù)據(jù)的傳輸??紤]到壓縮數(shù)據(jù)產(chǎn)生的速度,本系統(tǒng)開了32頁大小的緩沖區(qū),在中斷延遲例程中填充該緩沖區(qū)。每當填滿8頁大小后,產(chǎn)生一個事件通知應(yīng)用層進行數(shù)據(jù)讀取。通過這種方式,可以避免壓縮數(shù)據(jù)的丟失。

            其流程圖如圖3所示。

            在驅(qū)動中,壓縮數(shù)據(jù)的提取方式將極大地影響生成MPEG文件的質(zhì)量。如果處理不當,將導(dǎo)致馬賽克、跳幀等現(xiàn)象。

            3.1.2 驅(qū)動程序中用戶緩沖區(qū)的訪問

            驅(qū)動程序訪問用戶內(nèi)存主要通過緩沖I/O和直接I/O。緩沖I/OI/O管理器創(chuàng)建一個內(nèi)核模式拷貝緩沖區(qū),并把用戶緩沖區(qū)的內(nèi)容拷貝到該緩沖區(qū)中,并在IRP首部的AssociateIrp.SystemBuffer域中存儲該非分頁內(nèi)存地址。驅(qū)動程序可簡單地讀寫該塊內(nèi)存。直接I/O,I/O管理器為輸入數(shù)據(jù)提供一個內(nèi)核模式拷貝緩沖區(qū),對輸出數(shù)據(jù)提供一個內(nèi)存描述符(MDL)。為了使用緩沖I/O或直接I/O在創(chuàng)建設(shè)備時,必須設(shè)置設(shè)備對象的Flags域中的DO_BUFFERED_IO標志位來使用緩沖I/O或設(shè)置DO_DIRECT_IO標志位來使用直接I/O。

            在本驅(qū)動中由于緩沖I/O和直接I/O都被使用,DO_BUFFERED_IO標志位和DO_DIRECT_IO標志位都被設(shè)置。

            在定義IOCTL碼中,對緩沖I/O使用METHOD_BUFFEERED對直接I/O使用METHOD_OUT_DIRECT。

            3.2 應(yīng)用層API設(shè)計

            應(yīng)用層對驅(qū)動程序的訪問通過調(diào)用Win32 I/O函數(shù)(如ReadFile、WriteFile和DeviceIoControl)訪問。當應(yīng)用層調(diào)用Win32 I/O函數(shù)以請求I/O后,該請求由內(nèi)核的I/O系統(tǒng)服務(wù)接收,I/O管理器對該請求構(gòu)造合適的IRP包,并將其傳給驅(qū)動程序棧,IRP在棧中進行傳遞,傳到驅(qū)動程序進行處理,并將結(jié)果返回給應(yīng)用程序。

            通過應(yīng)用層API,在其上面可進一步開發(fā)各類應(yīng)用程序。

            本系統(tǒng)達到了預(yù)期的要求,能夠在音視頻采集過程中對視頻、音頻進行實時預(yù)覽、監(jiān)聽。壓縮生成的文件可在標準媒體播放器上播放,并可對生成的VCD文件進行刻錄,然后由VCD機播放.


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();