2012-01-12 4 views
0

Я пишу аудио-плагин DSP для Windows Media Player с плагином, действующим как DMO. Я пытаюсь получить WMP для отправки аудиоданных в моно 22.050 кГц аудио. Однако, независимо от того, что я делаю, плеер перепроверяет все аудио в стерео 44.1k данные. Даже если файл, который я играю, представляет собой 22,050 кГц волновой файл, я все равно получаю 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; 
} 
+0

Вы возвращаете код и код ошибки в вашем 'SetInputType' для форматов 44,1 кГц? –

+0

Другая возможная причина заключается в том, что ваша DMO не единственная использующая WMP. Он имеет внутреннюю нормализацию объема, эффекты SRS и т. Д., Которые растут в цепочке, и они могут предпочесть переключиться на 44,1 кГц до того, как аудиоданные действительно достигнут вашей DMO. –

+0

Я вернул код ошибки. Проблема оказалась самой WMP, но спасибо за предложения – Nate

ответ

1

Ну, к сожалению, проблема в том, что я не проблема. Я архивирую это здесь для будущей справки из-за всех проблем, вызванных этой проблемой. Я нашел подробный отчет по problem on an msdn blog и, похоже, что в Vista и позже вы не можете согласовывать типы медиа для плагинов DMO по дизайну. Я не могу сказать, что согласен с этим решением, но я имею в виду, что я должен сам сделать преобразование, если захочу иметь данные с дискретизацией.

Надеюсь, это поможет любому, кто попадает в эту «особенность».