diff options
-rw-r--r-- | src/plugins/wmf/player/evr9videowindowcontrol.cpp | 5 | ||||
-rw-r--r-- | src/plugins/wmf/player/evr9videowindowcontrol.h | 1 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfplayersession.cpp | 7 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfvideorenderercontrol.cpp | 13 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfvideorenderercontrol.h | 1 |
5 files changed, 24 insertions, 3 deletions
diff --git a/src/plugins/wmf/player/evr9videowindowcontrol.cpp b/src/plugins/wmf/player/evr9videowindowcontrol.cpp index 7f1c71332..b15eef15e 100644 --- a/src/plugins/wmf/player/evr9videowindowcontrol.cpp +++ b/src/plugins/wmf/player/evr9videowindowcontrol.cpp @@ -85,6 +85,11 @@ void Evr9VideoWindowControl::clear() m_currentActivate = NULL; } +void Evr9VideoWindowControl::releaseActivate() +{ + clear(); +} + WId Evr9VideoWindowControl::winId() const { return m_windowId; diff --git a/src/plugins/wmf/player/evr9videowindowcontrol.h b/src/plugins/wmf/player/evr9videowindowcontrol.h index ea4bae56d..01a9c42fa 100644 --- a/src/plugins/wmf/player/evr9videowindowcontrol.h +++ b/src/plugins/wmf/player/evr9videowindowcontrol.h @@ -86,6 +86,7 @@ public: void setSaturation(int saturation); IMFActivate* createActivate(); + void releaseActivate(); void setProcAmpValues(); diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp index c4a561232..7c7320228 100644 --- a/src/plugins/wmf/player/mfplayersession.cpp +++ b/src/plugins/wmf/player/mfplayersession.cpp @@ -476,6 +476,13 @@ void MFPlayerSession::close() m_videoProbeMFT = 0; } + if (m_playerService->videoRendererControl()) { + m_playerService->videoRendererControl()->releaseActivate(); +#ifndef Q_WS_SIMULATOR + } else if (m_playerService->videoWindowControl()) { + m_playerService->videoWindowControl()->releaseActivate(); +#endif + } if (m_session) m_session->Release(); diff --git a/src/plugins/wmf/player/mfvideorenderercontrol.cpp b/src/plugins/wmf/player/mfvideorenderercontrol.cpp index c9b364f65..28fcb5b19 100644 --- a/src/plugins/wmf/player/mfvideorenderercontrol.cpp +++ b/src/plugins/wmf/player/mfvideorenderercontrol.cpp @@ -1781,6 +1781,7 @@ namespace , m_sink(0) , m_rendererControl(rendererControl) , m_attributes(0) + , m_surface(0) { MFCreateAttributes(&m_attributes, 0); m_sink = new MediaSink(rendererControl); @@ -2143,6 +2144,9 @@ MFVideoRendererControl::~MFVideoRendererControl() void MFVideoRendererControl::clear() { + if (m_surface) + m_surface->stop(); + if (m_currentActivate) { m_currentActivate->ShutdownObject(); m_currentActivate->Release(); @@ -2150,6 +2154,11 @@ void MFVideoRendererControl::clear() m_currentActivate = NULL; } +void MFVideoRendererControl::releaseActivate() +{ + clear(); +} + QAbstractVideoSurface *MFVideoRendererControl::surface() const { return m_surface; @@ -2209,10 +2218,8 @@ IMFActivate* MFVideoRendererControl::createActivate() clear(); m_currentActivate = new VideoRendererActivate(this); - if (m_surface) { + if (m_surface) setSurface(m_surface); - supportedFormatsChanged(); - } return m_currentActivate; } diff --git a/src/plugins/wmf/player/mfvideorenderercontrol.h b/src/plugins/wmf/player/mfvideorenderercontrol.h index ba04e73b7..0829e732d 100644 --- a/src/plugins/wmf/player/mfvideorenderercontrol.h +++ b/src/plugins/wmf/player/mfvideorenderercontrol.h @@ -59,6 +59,7 @@ public: void setSurface(QAbstractVideoSurface *surface); IMFActivate* createActivate(); + void releaseActivate(); protected: void customEvent(QEvent *event); |