diff options
author | Yoann Lopes <yoann.lopes@qt.io> | 2016-08-01 11:52:05 +0200 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@qt.io> | 2016-08-01 11:52:05 +0200 |
commit | 339944b284e9dd11302dd013f9d9a10ad0d9055a (patch) | |
tree | c2952d186b1dbc6f2380448fa2cfd9ec55043da6 /src/plugins/directshow | |
parent | 53d0a1e5454f4e5beecdea19acb9df11c87cc375 (diff) | |
parent | d7d31d63db5f0029a4a5e24d998601baee8bade0 (diff) | |
download | qtmultimedia-339944b284e9dd11302dd013f9d9a10ad0d9055a.tar.gz |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: Ic29cb09048003f18ff86d4546cd547be715eaec8
Diffstat (limited to 'src/plugins/directshow')
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 |