summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/player
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-02 10:23:28 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-02 10:23:28 +0200
commitf979916804fdcea14e2a560336f31f4046fbe84a (patch)
treeb5ff5737a4a9dd187c056b010e329ed1d601db0f /src/plugins/directshow/player
parent9bdc7c84eea0ff66c937d5f62ffed249321c3c35 (diff)
parent339944b284e9dd11302dd013f9d9a10ad0d9055a (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: .qmake.conf tests/auto/integration/qsoundeffect/BLACKLIST Change-Id: Icd2edd4410a4ee914d489634d26b262c0c146bf4
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 d0c342ed4..1502c6df3 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -528,8 +528,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