首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSVAD虚拟驱动程序丢失用于在MS Windows 10 1703中呈现的音频数据包

MSVAD虚拟驱动程序丢失用于在MS Windows 10 1703中呈现的音频数据包
EN

Stack Overflow用户
提问于 2017-07-24 22:40:25
回答 1查看 245关注 0票数 2

我从WDK8.0编写了一个基于MSVAD的虚拟音频驱动程序。该驱动程序在MS Win XP、Vista、8.x和10上运行良好。但在Windows创建者更新(1703)开始后,我注意到我的驱动程序开始丢失和滞后的声音。

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

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

欢迎有任何想法!

EN

回答 1

Stack Overflow用户

发布于 2017-08-10 14:46:22

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

原因:

我的音频通道总是有一个带有nAvgBytesPerSec参数的流: WAVEFORMATEX = 44100和WAVEFORMATEX= 176400。在MSVAD1703中,Win10驱动程序更改流的输入参数: nSamplesPerSec = 48000和nAvgBytesPerSec = 192000。但是输出参数保持不变: nSamplesPerSec = 44100和nAvgBytesPerSec = 176400。因此,驱动器接收1920字节,发送1764字节。因此,驱动程序每10mS会丢失156字节的声音。

解决方案:

强制驱动器选择信号源的参数: nSamplesPerSec = 44100,nAvgBytesPerSec = 176400。对于它,打开文件kshelper.cpp并找到函数GetWaveFormatEx()。在return pWfx;之前添加检查:

代码语言:javascript
复制
if (pWfx->nSamplesPerSec != 44100)
{
    DPF_ENTER(("[%s] - FAIL",__FUNCTION__));
    return NULL;
}
else
{
    DPF_ENTER(("[%s]-ok",__FUNCTION__));
    return pWfx;
}

我希望微软能在下一个WDK修复这个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45283442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档