MSVAD虚拟驱动程序丢失音频数据包以便在MS Windows 10 1703中进行渲染

时间:2017-07-24 14:40:25

标签: windows audio driver wdk

我在WDK 8.0的MSVAD基础上编写了一个虚拟音频驱动程序。该驱动程序在MS Win XP,Vista,8.x和10井上运行。但是在Windows Creators Update(1703)启动后,我注意到声音开始失去并且滞后于我的驱动程序。

我做了一些研究并检测到以下情况:驱动程序复制的音频数据少于预期。例如:

CMiniportWaveCyclicStreamMSVAD :: CopyTo()接收1920字节,CMiniportWaveCyclicStreamMSVAD :: CopyFrom()在输出时发送较少的音频数据(1764)。为什么????

请有任何想法!

1 个答案:

答案 0 :(得分:0)

我只为我的项目编写解决方案。无论如何,这个发现的bug也可以帮助你修复你的驱动程序。

原因:

我的音频通道始终有一个带有WAVEFORMATEX参数的流:nSamplesPerSec = 44100和nAvgBytesPerSec = 176400.在MS Win10 1703中,MSVAD驱动程序更改了流的输入参数:nSamplesPerSec = 48000和nAvgBytesPerSec = 192000.但输出参数仍然存在相同:nSamplesPerSec = 44100和nAvgBytesPerSec = 176400.因此驱动程序接收1920个字节并发出1764个字节。因此,驱动程序每10毫秒就会丢失156个字节的声音。

解决方案:

强制驱动程序选择源的参数:nSamplesPerSec = 44100和nAvgBytesPerSec = 176400.为此,打开文件kshelper.cpp并找到函数GetWaveFormatEx()。在return pWfx;添加检查之前:

if (pWfx->nSamplesPerSec != 44100)
{
    DPF_ENTER(("[%s] - FAIL",__FUNCTION__));
    return NULL;
}
else
{
    DPF_ENTER(("[%s]-ok",__FUNCTION__));
    return pWfx;
}

我希望MS在下一个WDK中修复该错误。