2016-07-24 3 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으로 전화 할 때 channelssample 속도의 2 가지 속성을 유지해야합니다. 새 미디어 유형을 만들면 이러한 속성을 새 미디어 유형으로 설정해야합니다. 그런 다음 리더에 새 용지 종류를 설정하십시오.

관련 문제