summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2013-12-05 15:55:06 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-11 10:31:25 +0100
commit653041db1dbceb8e404949d98b6a34e6d05cbe1f (patch)
tree225e6d0041b0f1dafb497cb91d1885cba08e9af6
parent51b7864bb8879ea181da33fbeb36080dbed623ea (diff)
downloadqtmultimedia-653041db1dbceb8e404949d98b6a34e6d05cbe1f.tar.gz
WMF: fix some crashes.
Task-number: QTBUG-30827 Change-Id: Iafc53f7095ad9c086b3982afb2af045c54497dc9 Reviewed-by: Christian Stromme <christian.stromme@digia.com>
-rw-r--r--src/plugins/wmf/player/mfplayersession.cpp8
-rw-r--r--src/plugins/wmf/player/mfvideorenderercontrol.cpp3
-rw-r--r--src/plugins/wmf/sourceresolver.cpp4
3 files changed, 10 insertions, 5 deletions
diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp
index 8e0235e94..c324116ee 100644
--- a/src/plugins/wmf/player/mfplayersession.cpp
+++ b/src/plugins/wmf/player/mfplayersession.cpp
@@ -411,6 +411,8 @@ MFPlayerSession::MFPlayerSession(MFPlayerService *playerService)
, m_rateSupport(0)
, m_volumeControl(0)
, m_netsourceStatistics(0)
+ , m_duration(0)
+ , m_sourceResolver(0)
, m_hCloseEvent(0)
, m_closing(false)
, m_pendingRate(1)
@@ -536,7 +538,7 @@ void MFPlayerSession::load(const QMediaContent &media, QIODevice *stream)
clear();
QMediaResourceList resources = media.resources();
- if (m_status == QMediaPlayer::LoadingMedia)
+ if (m_status == QMediaPlayer::LoadingMedia && m_sourceResolver)
m_sourceResolver->cancel();
if (resources.isEmpty() && !stream) {
@@ -581,7 +583,7 @@ void MFPlayerSession::handleSourceError(long hr)
void MFPlayerSession::handleMediaSourceReady()
{
- if (QMediaPlayer::LoadingMedia != m_status)
+ if (QMediaPlayer::LoadingMedia != m_status || !m_sourceResolver)
return;
#ifdef DEBUG_MEDIAFOUNDATION
qDebug() << "handleMediaSourceReady";
@@ -1786,7 +1788,7 @@ void MFPlayerSession::handleSessionEvent(IMFMediaEvent *sessionEvent)
{
HRESULT hrStatus = S_OK;
HRESULT hr = sessionEvent->GetStatus(&hrStatus);
- if (FAILED(hr)) {
+ if (FAILED(hr) || !m_session) {
sessionEvent->Release();
return;
}
diff --git a/src/plugins/wmf/player/mfvideorenderercontrol.cpp b/src/plugins/wmf/player/mfvideorenderercontrol.cpp
index 83768c8e2..e10cebb26 100644
--- a/src/plugins/wmf/player/mfvideorenderercontrol.cpp
+++ b/src/plugins/wmf/player/mfvideorenderercontrol.cpp
@@ -1085,6 +1085,9 @@ namespace
HRESULT onDispatchWorkItem(IMFAsyncResult* pAsyncResult)
{
QMutexLocker locker(&m_mutex);
+ if (m_shutdown)
+ return MF_E_SHUTDOWN;
+
HRESULT hr = S_OK;
IUnknown *pState = NULL;
hr = pAsyncResult->GetState(&pState);
diff --git a/src/plugins/wmf/sourceresolver.cpp b/src/plugins/wmf/sourceresolver.cpp
index 3f39671f9..9ac126bda 100644
--- a/src/plugins/wmf/sourceresolver.cpp
+++ b/src/plugins/wmf/sourceresolver.cpp
@@ -197,7 +197,7 @@ void SourceResolver::load(QMediaResourceList& resources, QIODevice* stream)
#ifdef TEST_STREAMING
//Testing stream function
if (url.scheme() == QLatin1String("file")) {
- stream = new QFile(url.path().mid(1), this);
+ stream = new QFile(url.path().mid(1));
if (stream->open(QIODevice::ReadOnly)) {
m_stream = new MFStream(stream, true);
hr = m_sourceResolver->BeginCreateObjectFromByteStream(
@@ -217,7 +217,7 @@ void SourceResolver::load(QMediaResourceList& resources, QIODevice* stream)
if (url.scheme() == QLatin1String("qrc")) {
// If the canonical URL refers to a Qt resource, open with QFile and use
// the stream playback capability to play.
- stream = new QFile(QLatin1Char(':') + url.path(), this);
+ stream = new QFile(QLatin1Char(':') + url.path());
if (stream->open(QIODevice::ReadOnly)) {
m_stream = new MFStream(stream, true);
hr = m_sourceResolver->BeginCreateObjectFromByteStream(