From 653041db1dbceb8e404949d98b6a34e6d05cbe1f Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 5 Dec 2013 15:55:06 +0100 Subject: WMF: fix some crashes. Task-number: QTBUG-30827 Change-Id: Iafc53f7095ad9c086b3982afb2af045c54497dc9 Reviewed-by: Christian Stromme --- src/plugins/wmf/player/mfplayersession.cpp | 8 +++++--- src/plugins/wmf/player/mfvideorenderercontrol.cpp | 3 +++ src/plugins/wmf/sourceresolver.cpp | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) (limited to 'src/plugins') 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( -- cgit v1.2.3