WMF: allow to load media whose content doesn't match its file extension.
This also allows to play streams without providing a MIME type. Task-number: QTBUG-33631 Task-number: QTBUG-33518 Change-Id: Ia106592cb5ed0a0f7ede6308dc8e2c12cf4e63b1 Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
6f0cdc264f
commit
a23b14874c
@@ -175,19 +175,16 @@ void SourceResolver::load(QMediaResourceList& resources, QIODevice* stream)
|
|||||||
qWarning() << "Failed to create Source Resolver!";
|
qWarning() << "Failed to create Source Resolver!";
|
||||||
emit error(hr);
|
emit error(hr);
|
||||||
} else if (stream) {
|
} else if (stream) {
|
||||||
if (resources.count() > 0) {
|
QString url;
|
||||||
QMediaResource resource = resources.takeFirst();
|
if (!resources.isEmpty())
|
||||||
QUrl url = resource.url();
|
url = resources.takeFirst().url().toString();
|
||||||
m_stream = new MFStream(stream, false);
|
m_stream = new MFStream(stream, false);
|
||||||
hr = m_sourceResolver->BeginCreateObjectFromByteStream(m_stream, reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
hr = m_sourceResolver->BeginCreateObjectFromByteStream(
|
||||||
MF_RESOLUTION_MEDIASOURCE, NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
|
m_stream, url.isEmpty() ? 0 : reinterpret_cast<LPCWSTR>(url.utf16()),
|
||||||
if (FAILED(hr)) {
|
MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE
|
||||||
qWarning() << "Unsupported stream!";
|
, NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
|
||||||
emit error(hr);
|
if (FAILED(hr)) {
|
||||||
}
|
qWarning() << "Unsupported stream!";
|
||||||
} else {
|
|
||||||
hr = MF_E_UNSUPPORTED_BYTESTREAM_TYPE;
|
|
||||||
qWarning() << "Can't load stream without a hint of MIME type in a url";
|
|
||||||
emit error(hr);
|
emit error(hr);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -203,8 +200,10 @@ void SourceResolver::load(QMediaResourceList& resources, QIODevice* stream)
|
|||||||
stream = new QFile(url.path().mid(1), this);
|
stream = new QFile(url.path().mid(1), this);
|
||||||
if (stream->open(QIODevice::ReadOnly)) {
|
if (stream->open(QIODevice::ReadOnly)) {
|
||||||
m_stream = new MFStream(stream, true);
|
m_stream = new MFStream(stream, true);
|
||||||
hr = m_sourceResolver->BeginCreateObjectFromByteStream(m_stream, reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
hr = m_sourceResolver->BeginCreateObjectFromByteStream(
|
||||||
MF_RESOLUTION_MEDIASOURCE, NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
|
m_stream, reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
||||||
|
MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
|
||||||
|
NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
qWarning() << "Unsupported stream!";
|
qWarning() << "Unsupported stream!";
|
||||||
emit error(hr);
|
emit error(hr);
|
||||||
@@ -221,8 +220,10 @@ void SourceResolver::load(QMediaResourceList& resources, QIODevice* stream)
|
|||||||
stream = new QFile(QLatin1Char(':') + url.path(), this);
|
stream = new QFile(QLatin1Char(':') + url.path(), this);
|
||||||
if (stream->open(QIODevice::ReadOnly)) {
|
if (stream->open(QIODevice::ReadOnly)) {
|
||||||
m_stream = new MFStream(stream, true);
|
m_stream = new MFStream(stream, true);
|
||||||
hr = m_sourceResolver->BeginCreateObjectFromByteStream(m_stream, reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
hr = m_sourceResolver->BeginCreateObjectFromByteStream(
|
||||||
MF_RESOLUTION_MEDIASOURCE, NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
|
m_stream, reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
||||||
|
MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
|
||||||
|
NULL, &m_cancelCookie, this, new State(m_sourceResolver, true));
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
qWarning() << "Unsupported stream!";
|
qWarning() << "Unsupported stream!";
|
||||||
emit error(hr);
|
emit error(hr);
|
||||||
@@ -232,8 +233,10 @@ void SourceResolver::load(QMediaResourceList& resources, QIODevice* stream)
|
|||||||
emit error(QMediaPlayer::FormatError);
|
emit error(QMediaPlayer::FormatError);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hr = m_sourceResolver->BeginCreateObjectFromURL(reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
hr = m_sourceResolver->BeginCreateObjectFromURL(
|
||||||
MF_RESOLUTION_MEDIASOURCE, NULL, &m_cancelCookie, this, new State(m_sourceResolver, false));
|
reinterpret_cast<const OLECHAR *>(url.toString().utf16()),
|
||||||
|
MF_RESOLUTION_MEDIASOURCE | MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE,
|
||||||
|
NULL, &m_cancelCookie, this, new State(m_sourceResolver, false));
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
qWarning() << "Unsupported url scheme!";
|
qWarning() << "Unsupported url scheme!";
|
||||||
emit error(hr);
|
emit error(hr);
|
||||||
|
|||||||
Reference in New Issue
Block a user