wince下wave驅動的調用過程

近日爲了解決telechips的wince平臺下百度carlife語音識別時,出現wavedev.dll報錯的問題。花了兩天的時間來閱讀wavedev的驅動源碼。得到了其調用的過程。比如app在調用waveoutOpen、waveoutWrite等函數時,驅動的執行路徑如下:

1、waveOutOpen,waveOutWrite--->WAV_IOControl(IOCTL_WAV_MESSAGE)--->HandleWaveMessage.switch (WODM_WRITE,WODM_OPEN) --->StreamContext.QueueBuffer---> OutputDeviceContext::StreamReadyToRender--->HardwareContext::StartOutputDMAByTransferType--->HardwareContext::TransferOutputBuffer(DWORD dwDCSR, DWORD TransferType)---->HardwareContext::TransferOutputBuffer(ULONG NumBuf, DWORD TransferType)--->DeviceContext::TransferBuffer---->WaveStreamContext::Render---->OutputStreamContextNonPCM::Render2

2、硬件驅動層播放完pcm數據後,會產生中斷,下面是中斷調用過程:

HardwareContext::InterruptThread()--->HardwareContext::TransferOutputBuffer(DWORD dwDCSR, DWORD TransferType)---->HardwareContext::TransferOutputBuffer(ULONG NumBuf, DWORD TransferType)--->DeviceContext::TransferBuffer---->WaveStreamContext::Render---->OutputStreamContextNonPCM::Render2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章