Согласование формата плагина DSP проигрывателя Windows Media - PullRequest
0 голосов
/ 12 января 2012

Я пишу аудио-плагин DSP для Windows Media Player с плагином, действующим как DMO. Я пытаюсь заставить WMP посылать мне аудиоданные в моно 22,050 кГц аудио. Тем не менее, независимо от того, что я делаю, проигрыватель повторно сэмплирует все аудио в стерео данные 44.1k. Даже если файл, который я играю, является волновым файлом 22.050 кГц, я все равно получаю 44.1 аудио в моем плагине.

Я указываю данные, которые мой плагин может обрабатывать с помощью функций 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;
}

1 Ответ

1 голос
/ 13 января 2012

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

Надеюсь, это поможет всем, кто сталкивается с этой "функцией".

...