38HRESULT STDMETHODCALLTYPE SourceResolver::Invoke(IMFAsyncResult *pAsyncResult)
40 QMutexLocker locker(&m_mutex);
42 if (!m_sourceResolver)
45 MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;
46 IUnknown* pSource = NULL;
47 State *state =
static_cast<State*>(pAsyncResult->GetStateNoAddRef());
50 if (state->fromStream())
51 hr = m_sourceResolver->EndCreateObjectFromByteStream(pAsyncResult, &ObjectType, &pSource);
53 hr = m_sourceResolver->EndCreateObjectFromURL(pAsyncResult, &ObjectType, &pSource);
55 if (state->sourceResolver() != m_sourceResolver) {
61 m_cancelCookie->Release();
62 m_cancelCookie = NULL;
71 m_mediaSource->Release();
75 hr = pSource->QueryInterface(IID_PPV_ARGS(&m_mediaSource));
82 emit mediaSourceReady();
94 QMutexLocker locker(&m_mutex);
96 if (!m_sourceResolver)
97 hr = MFCreateSourceResolver(&m_sourceResolver);
105 qWarning() <<
"Failed to create Source Resolver!";
108 QString urlString = url.toString();
109 m_stream =
new MFStream(stream,
false);
110 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
111 m_stream, urlString.isEmpty() ? 0 :
reinterpret_cast<LPCWSTR>(urlString.utf16()),
112 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
113 , NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
115 qWarning() <<
"Unsupported stream!";
119#ifdef DEBUG_MEDIAFOUNDATION
120 qDebug() <<
"loading :" << url;
121 qDebug() <<
"url path =" << url.path().mid(1);
125 if (url.scheme() == QLatin1String(
"file")) {
126 stream =
new QFile(url.path().mid(1));
127 if (stream->open(QIODevice::ReadOnly)) {
128 m_stream =
new MFStream(stream,
true);
129 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
130 m_stream,
reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
131 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
132 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
134 qWarning() <<
"Unsupported stream!";
139 emit error(QMediaPlayer::FormatError);
143 if (url.scheme() == QLatin1String(
"qrc")) {
146 stream =
new QFile(QLatin1Char(
':') + url.path());
147 if (stream->open(QIODevice::ReadOnly)) {
148 m_stream =
new MFStream(stream,
true);
149 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
150 m_stream,
reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
151 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
152 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
154 qWarning() <<
"Unsupported stream!";
159 emit error(QMediaPlayer::FormatError);
162 hr = m_sourceResolver->BeginCreateObjectFromURL(
163 reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
164 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
165 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
false));
167 qWarning() <<
"Unsupported url scheme!";