73HRESULT STDMETHODCALLTYPE SourceResolver::Invoke(IMFAsyncResult *pAsyncResult)
75 QMutexLocker locker(&m_mutex);
77 if (!m_sourceResolver)
80 MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;
81 IUnknown* pSource = NULL;
82 State *state =
static_cast<State*>(pAsyncResult->GetStateNoAddRef());
85 if (state->fromStream())
86 hr = m_sourceResolver->EndCreateObjectFromByteStream(pAsyncResult, &ObjectType, &pSource);
88 hr = m_sourceResolver->EndCreateObjectFromURL(pAsyncResult, &ObjectType, &pSource);
90 if (state->sourceResolver() != m_sourceResolver) {
96 m_cancelCookie->Release();
97 m_cancelCookie = NULL;
106 m_mediaSource->Release();
107 m_mediaSource = NULL;
110 hr = pSource->QueryInterface(IID_PPV_ARGS(&m_mediaSource));
117 emit mediaSourceReady();
129 QMutexLocker locker(&m_mutex);
131 if (!m_sourceResolver)
132 hr = MFCreateSourceResolver(&m_sourceResolver);
140 qWarning() <<
"Failed to create Source Resolver!";
143 QString urlString = url.toString();
144 m_stream =
new MFStream(stream,
false);
145 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
146 m_stream, urlString.isEmpty() ? 0 :
reinterpret_cast<LPCWSTR>(urlString.utf16()),
147 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
148 , NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
150 qWarning() <<
"Unsupported stream!";
154#ifdef DEBUG_MEDIAFOUNDATION
155 qDebug() <<
"loading :" << url;
156 qDebug() <<
"url path =" << url.path().mid(1);
160 if (url.scheme() == QLatin1String(
"file")) {
161 stream =
new QFile(url.path().mid(1));
162 if (stream->open(QIODevice::ReadOnly)) {
163 m_stream =
new MFStream(stream,
true);
164 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
165 m_stream,
reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
166 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
167 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
169 qWarning() <<
"Unsupported stream!";
174 emit error(QMediaPlayer::FormatError);
178 if (url.scheme() == QLatin1String(
"qrc")) {
181 stream =
new QFile(QLatin1Char(
':') + url.path());
182 if (stream->open(QIODevice::ReadOnly)) {
183 m_stream =
new MFStream(stream,
true);
184 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
185 m_stream,
reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
186 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
187 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
189 qWarning() <<
"Unsupported stream!";
194 emit error(QMediaPlayer::FormatError);
197 hr = m_sourceResolver->BeginCreateObjectFromURL(
198 reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
199 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
200 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
false));
202 qWarning() <<
"Unsupported url scheme!";