2016-07-24 80 views
0

我正在使用Windows Media Foundation解碼音頻文件。除了那些表示MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED的文件之外,我能夠解碼大部分文件。Windows Media Foundation:當前媒體類型更改

如果我在某個時刻更改了當前媒體類型,該如何處理它?

下面是部分代碼:

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性能:channelssample率。 之後,當我們創建一個新的媒體類型時,我們需要將這些屬性設置爲新的媒體類型。然後在閱讀器上設置新的媒體類型。