我正在为Windows Media Player编写一个音频DSP插件,插件充当DMO。我试图让WMP向我发送单声道22.050 kHz音频的音频数据。但是,无论我做什么,播放器都会将所有音频重新采样为立体声44.1k数据。即使我正在播放的文件是22.050khz波形文件,我仍然会在插件中获得44.1音频。Windows Media Player DSP插件格式协商
我指定了我的插件可以通过GetInputType/GetOutputType
函数处理的数据,但无论发生什么事的时候SetInputType/SetOutputType
被称为格式都回到44.1k。有没有人知道发生了什么?我试着写ValidateMediaType
只接受我想要的采样率,但后来我根本没有收到任何数据。我的GetInputType
功能低于
STDMETHODIMP CWMPIPSpeaker::GetInputType (
DWORD dwInputStreamIndex,
DWORD dwTypeIndex,
DMO_MEDIA_TYPE *pmt)
{
HRESULT hr = S_OK;
if (0 != dwInputStreamIndex)
{
return DMO_E_INVALIDSTREAMINDEX ;
}
// only support one preferred type
if (0 != dwTypeIndex)
{
return DMO_E_NO_MORE_ITEMS;
}
if (NULL == pmt)
{
return E_POINTER;
}
hr = MoInitMediaType(pmt, sizeof(WAVEFORMATEX));
WAVEFORMATEX* format = ((WAVEFORMATEX*)pmt->pbFormat);
format->nChannels = 1;
format->nSamplesPerSec = 22050;
format->wFormatTag = WAVE_FORMAT_PCM;
format->wBitsPerSample = 16;
format->cbSize = 0;
format->nBlockAlign = (format->nChannels * format->wBitsPerSample)/8;
format->nAvgBytesPerSec = format->nBlockAlign * format->nSamplesPerSec;
pmt->formattype = FORMAT_WaveFormatEx;
pmt->lSampleSize = format->nBlockAlign;
pmt->bFixedSizeSamples = true;
pmt->majortype = MEDIATYPE_Audio;
pmt->subtype = MEDIASUBTYPE_PCM;
return hr;
}
您是否在您的'SetInputType'中为44.1 kHz格式返回错误代码? – 2012-01-12 19:10:09
另一个可能的原因是您的DMO不是WMP使用的唯一一个。它具有内部音量标准化,SRS效果等等,它们可以在音频数据实际到达DMO之前切换到44.1 kHz。 – 2012-01-12 19:24:27
我确实返回了错误代码。问题最终成为WMP本身,但感谢您的建议 – Nate 2012-01-12 20:24:31