summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/directshow/player/directshowvideorenderercontrol.cpp')
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp24
1 files changed, 21 insertions, 3 deletions
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