天天看點

WINCE聲音驅動模型概述(1)

1.1 WINCE的聲音模型

   标準的WINDOWS CE下的聲音處理模型。

1)  聲音應用在使用WAVE接口函數的時候被COREDLL子產品分了類:如果是簡單的PCM資料,則直接進入ADM子產品,進行SoftWare Mixer或者連Mixer也省了,直接調用Driver放音;如果是壓縮模式的資料則進入ACM子產品進行解壓處理後(比如:GSM/G7XX等等…)再次進入ADM子產品。 此外,如果DRIVER支援硬體的Mixer,則應用層直接Bypass掉ACM和ADM,直接進入到驅動進行軟體或者硬體進行混音和放音。

2)  ACM、Software Mixer都是可選配單元,可以通過系統資料庫或者CE核心配置參數添加或者删除。

1.2 WINCE的聲音驅動模型

l         分層模型

 這是一個标準的分層 MDD-PDD 流式接口模型。 應用層的WAVEAPI都使用WaveAPI Manager(WaveApi.DLL)通過DeviceIOControl映射成為WAV_IOControl函數進行處理。

 MDD層是微軟的标準實作,通過DDSI (device driver service-provider interface )和PDD層實作進行連接配接。MDD通過消息來通知PDD層(PDD_WaveProc處理)

MDD層接口函數

·                 WAV_Close

·                 WAV_Deinit

·                 WAV_Init

·                 WAV_IOControl

·                 WAV_Open

·                 WAV_PowerDown

·                 WAV_PowerUp

·                 WAV_Read

·                 WAV_Seek

·                 WAV_Write

DDSI接口函數

·                 PDD_AudioDeinitialize

·                 PDD_AudioGetInterruptType

·                 PDD_AudioInitialize

·                 PDD_AudioMessage

·                 PDD_AudioPowerHandler

·                 PDD_WaveProc

但是分層模型也有一定的限制

·                 隻支援一個裝置

·                 不支援多個流

·                 對循環支援的不好

·                 對多個流資料支援的不是很好

l         單片模型

對于單片模型,WINCE是希望過渡到這個方案上的。該模型下,驅動的移植

還是很簡單的。同時,該模型也客服了以前隻能通過核心的MIXER來支援多個流的局限,在驅動層面即支援輸入和輸出多個流的混音操作。

l         分層模型的基本運轉

分層模型支援同時放音和錄音操作。MDD層管理着一個中斷處理程式和多個

DMA BUFFERS,一般放音和錄音都使用雙DMA 緩沖。

比如,放音的時候,應用通過WAVEAPI傳遞過來一些資料,MDD層通過 PDD_WaveProc 函數發送 WPDM_START消息給PDD,PDD層将資料拷貝到DMA緩沖,并啟動硬體放音。當DMA完成一個BUFFER的資料傳送後,會産生一個硬體中斷,PDD層會設定一個 AUDIO_STATE_OUT_PLAYING标志 。如果MDD發現有更多的資料要傳送就會通過WPDM_CONTINUE.消息讓PDD層繼續負責填充DMA緩沖,否則就發送一個WPDM_ENDOFDATA.消息讓PDD層停止DMA。

<a href="http://blog.csdn.net/cnhighway/archive/2009/03/18/4001945.aspx"></a>

繼續閱讀