summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/wmf/player/evr9videowindowcontrol.cpp5
-rw-r--r--src/plugins/wmf/player/evr9videowindowcontrol.h1
-rw-r--r--src/plugins/wmf/player/mfplayersession.cpp7
-rw-r--r--src/plugins/wmf/player/mfvideorenderercontrol.cpp13
-rw-r--r--src/plugins/wmf/player/mfvideorenderercontrol.h1
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);