2016-07-24 82 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率。 之后,当我们创建一个新的媒体类型时,我们需要将这些属性设置为新的媒体类型。然后在阅读器上设置新的媒体类型。