14 ComPtr<IMFMediaType> mediaType;
15 m_sourceReader.Reset();
20 ComPtr<IMFAttributes> attr;
21 MFCreateAttributes(attr.GetAddressOf(), 1);
22 if (FAILED(attr->SetUnknown(MF_SOURCE_READER_ASYNC_CALLBACK,
this)))
24 if (FAILED(attr->SetUINT32(MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN, TRUE)))
27 HRESULT hr = MFCreateSourceReaderFromMediaSource(
source, attr.Get(), m_sourceReader.GetAddressOf());
29 qWarning() <<
"MFDecoderSourceReader: failed to set up source reader: "
30 << std::system_category().message(hr).c_str();
34 m_sourceReader->SetStreamSelection(DWORD(MF_SOURCE_READER_ALL_STREAMS), FALSE);
35 m_sourceReader->SetStreamSelection(DWORD(MF_SOURCE_READER_FIRST_AUDIO_STREAM), TRUE);
37 ComPtr<IMFMediaType> pPartialType;
38 MFCreateMediaType(pPartialType.GetAddressOf());
39 pPartialType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
40 pPartialType->SetGUID(MF_MT_SUBTYPE, sampleFormat ==
QAudioFormat::Float ? MFAudioFormat_Float : MFAudioFormat_PCM);
41 m_sourceReader->SetCurrentMediaType(DWORD(MF_SOURCE_READER_FIRST_AUDIO_STREAM),
nullptr, pPartialType.Get());
42 m_sourceReader->GetCurrentMediaType(DWORD(MF_SOURCE_READER_FIRST_AUDIO_STREAM), mediaType.GetAddressOf());
44 m_sourceReader->SetStreamSelection(DWORD(MF_SOURCE_READER_FIRST_AUDIO_STREAM), TRUE);