2016-07-24 46 views
0

Ich verwende Windows Media Foundation zum Dekodieren von Audiodateien. Ich bin in der Lage, die meisten Dateien zu dekodieren, neben denen, die MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED sagen.Windows Media Foundation: Änderung des aktuellen Medientyps

Wenn ich eine aktuelle Medientyp Änderung in einem Moment habe, wie man damit umgehen?

Hier ist ein Teil des Codes:

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? 
      } 
    } 

Vielen Dank im Voraus.

Antwort

0

Ich fand einen Weg, dies zu überwinden. Wenn wir GetCurrentMediaType anrufen, müssen wir irgendwo 2 Eigenschaften behalten: channels und sample Rate. Nachdem wir einen neuen Medientyp erstellt haben, müssen wir diese Eigenschaften auf den neuen Medientyp festlegen. Legen Sie dann den neuen Medientyp für den Reader fest.