45HRESULT STDMETHODCALLTYPE SourceResolver::Invoke(IMFAsyncResult *pAsyncResult)
47 QMutexLocker locker(&m_mutex);
49 if (!m_sourceResolver)
52 MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;
53 IUnknown* pSource = NULL;
54 State *state =
static_cast<State*>(pAsyncResult->GetStateNoAddRef());
57 if (state->fromStream())
58 hr = m_sourceResolver->EndCreateObjectFromByteStream(pAsyncResult, &ObjectType, &pSource);
60 hr = m_sourceResolver->EndCreateObjectFromURL(pAsyncResult, &ObjectType, &pSource);
62 if (state->sourceResolver() != m_sourceResolver) {
68 m_cancelCookie->Release();
69 m_cancelCookie = NULL;
78 m_mediaSource->Release();
82 hr = pSource->QueryInterface(IID_PPV_ARGS(&m_mediaSource));
89 emit mediaSourceReady();
101 QMutexLocker locker(&m_mutex);
103 if (!m_sourceResolver)
104 hr = MFCreateSourceResolver(&m_sourceResolver);
112 qWarning() <<
"Failed to create Source Resolver!";
115 QString urlString = url.toString();
116 m_stream =
new MFStream(stream,
false);
117 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
118 m_stream, urlString.isEmpty() ? 0 :
reinterpret_cast<LPCWSTR>(urlString.utf16()),
119 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
120 , NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
122 qWarning() <<
"Unsupported stream!";
126#ifdef DEBUG_MEDIAFOUNDATION
127 qDebug() <<
"loading :" << url;
128 qDebug() <<
"url path =" << url.path().mid(1);
132 if (url.scheme() == QLatin1String(
"file")) {
133 stream =
new QFile(url.path().mid(1));
134 if (stream->open(QIODevice::ReadOnly)) {
135 m_stream =
new MFStream(stream,
true);
136 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
137 m_stream,
reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
138 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
139 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
141 qWarning() <<
"Unsupported stream!";
146 emit error(QMediaPlayer::FormatError);
150 if (url.scheme() == QLatin1String(
"qrc")) {
153 stream =
new QFile(QLatin1Char(
':') + url.path());
154 if (stream->open(QIODevice::ReadOnly)) {
155 m_stream =
new MFStream(stream,
true);
156 hr = m_sourceResolver->BeginCreateObjectFromByteStream(
157 m_stream,
reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
158 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
159 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
true));
161 qWarning() <<
"Unsupported stream!";
166 emit error(QMediaPlayer::FormatError);
169 hr = m_sourceResolver->BeginCreateObjectFromURL(
170 reinterpret_cast<
const OLECHAR *>(url.toString().utf16()),
171 MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
172 NULL, &m_cancelCookie,
this,
new State(m_sourceResolver,
false));
174 qWarning() <<
"Unsupported url scheme!";