Windows Media Foundation: текущее изменение типа носителя

Я использую Windows Media Foundation для декодирования аудиофайлов. Я могу декодировать большинство файлов, кроме тех, которые говорят MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED,

Если в какой-то момент у меня текущее изменение типа носителя, как с этим справиться?

Вот часть кода:

    IMFSourceReader *pSourceReader = NULL;
IMFMediaType *pAudioType= NULL;

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
MFStartup(MF_VERSION);

MFCreateSourceReaderFromURL(filePath, NULL, &pSourceReader);
pSourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, true)
pSourceReader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, &pAudioType);
MFCreateMediaType(&pAudioType);
pAudioType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
pAudioType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
pAudioType->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, pAudioType);

IMFSample *audioSample = NULL;
DWORD streamIndex, flags;
LONGLONG llAudioTimeStamp;

while (true)
{
pSourceReader->ReadSample(
MF_SOURCE_READER_FIRST_AUDIO_STREAM,
0,                              // Flags.
&streamIndex,                   // Receives the actual stream index.
&flags,                         // Receives status flags.
&llAudioTimeStamp,              // Receives the time stamp.
&audioSample )                  // Receives the sample or NULL.

if (flags & MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED)
{
// what to do here?
}
}

Спасибо заранее.

0

Решение

Я нашел способ преодолеть это.

Когда мы звоним GetCurrentMediaType, мы должны держать где-то 2 свойства: channels а также sample темп.
После, когда мы создаем новый тип медиа, нам нужно установить эти свойства в новый тип медиа. А затем установите новый тип носителя для чтения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]