summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/player
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@qt.io>2016-08-01 11:52:05 +0200
committerYoann Lopes <yoann.lopes@qt.io>2016-08-01 11:52:05 +0200
commit339944b284e9dd11302dd013f9d9a10ad0d9055a (patch)
treec2952d186b1dbc6f2380448fa2cfd9ec55043da6 /src/plugins/directshow/player
parent53d0a1e5454f4e5beecdea19acb9df11c87cc375 (diff)
parentd7d31d63db5f0029a4a5e24d998601baee8bade0 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Diffstat (limited to 'src/plugins/directshow/player')
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp2
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp24
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.h6
3 files changed, 27 insertions, 5 deletions
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index fa5ce3d55..ccc25d30b 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -552,8 +552,6 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
m_executedTasks |= Render;
}
-
- m_loop->wake();
}
void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker)
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
index e08ac1f9d..b86125df9 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
@@ -52,11 +52,20 @@ DirectShowVideoRendererControl::DirectShowVideoRendererControl(DirectShowEventLo
, m_loop(loop)
, m_surface(0)
, m_filter(0)
+#ifdef HAVE_EVR
+ , m_evrPresenter(0)
+#endif
{
}
DirectShowVideoRendererControl::~DirectShowVideoRendererControl()
{
+#ifdef HAVE_EVR
+ if (m_evrPresenter) {
+ m_evrPresenter->setSurface(Q_NULLPTR);
+ m_evrPresenter->Release();
+ }
+#endif
if (m_filter)
m_filter->Release();
}
@@ -71,6 +80,14 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
if (m_surface == surface)
return;
+#ifdef HAVE_EVR
+ if (m_evrPresenter) {
+ m_evrPresenter->setSurface(Q_NULLPTR);
+ m_evrPresenter->Release();
+ m_evrPresenter = 0;
+ }
+#endif
+
if (m_filter) {
m_filter->Release();
m_filter = 0;
@@ -81,12 +98,13 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
if (m_surface) {
#ifdef HAVE_EVR
m_filter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer);
- EVRCustomPresenter *evrPresenter = new EVRCustomPresenter(m_surface);
- if (!evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, evrPresenter)) {
+ m_evrPresenter = new EVRCustomPresenter(m_surface);
+ if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) {
m_filter->Release();
m_filter = 0;
+ m_evrPresenter->Release();
+ m_evrPresenter = 0;
}
- evrPresenter->Release();
if (!m_filter)
#endif
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h
index 17dd4705b..9d1a23933 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.h
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h
@@ -45,6 +45,9 @@
#include "qvideorenderercontrol.h"
class DirectShowEventLoop;
+#ifdef HAVE_EVR
+class EVRCustomPresenter;
+#endif
QT_USE_NAMESPACE
@@ -67,6 +70,9 @@ private:
DirectShowEventLoop *m_loop;
QAbstractVideoSurface *m_surface;
IBaseFilter *m_filter;
+#ifdef HAVE_EVR
+ EVRCustomPresenter *m_evrPresenter;
+#endif
};
#endif