diff options
Diffstat (limited to 'src/plugins/wmf/player')
-rw-r--r-- | src/plugins/wmf/player/mfplayersession.cpp | 7 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfvideorenderercontrol.cpp | 24 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfvideorenderercontrol.h | 5 |
3 files changed, 35 insertions, 1 deletions
diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp index 1d145edc4..daf6f801f 100644 --- a/src/plugins/wmf/player/mfplayersession.cpp +++ b/src/plugins/wmf/player/mfplayersession.cpp @@ -47,6 +47,7 @@ #include <QtCore/qdebug.h> #include <QtCore/qfile.h> #include <QtCore/qbuffer.h> +#include <QtMultimedia/qmediametadata.h> #include "mfplayercontrol.h" #include "mfevrvideowindowcontrol.h" @@ -428,9 +429,15 @@ IMFTopologyNode* MFPlayerSession::addOutputNode(MediaType mediaType, IMFTopology if (mediaType == Audio) { activate = m_playerService->audioEndpointControl()->createActivate(); } else if (mediaType == Video) { + + QSize resolution = m_playerService->metaDataControl()->metaData(QMediaMetaData::Resolution).toSize(); + QRect cropRect = QRect(QPoint(), resolution); + if (m_playerService->videoRendererControl()) { + m_playerService->videoRendererControl()->setCropRect(cropRect); activate = m_playerService->videoRendererControl()->createActivate(); } else if (m_playerService->videoWindowControl()) { + m_playerService->videoWindowControl()->setCropRect(cropRect); activate = m_playerService->videoWindowControl()->createActivate(); } else { qWarning() << "no videoWindowControl or videoRendererControl, unable to add output node for video data"; diff --git a/src/plugins/wmf/player/mfvideorenderercontrol.cpp b/src/plugins/wmf/player/mfvideorenderercontrol.cpp index 94d5f68be..38455090b 100644 --- a/src/plugins/wmf/player/mfvideorenderercontrol.cpp +++ b/src/plugins/wmf/player/mfvideorenderercontrol.cpp @@ -2239,10 +2239,12 @@ public: STDMETHODIMP DetachObject(); void setSurface(QAbstractVideoSurface *surface); + void setCropRect(QRect cropRect); private: EVRCustomPresenter *m_presenter; QAbstractVideoSurface *m_surface; + QRect m_cropRect; QMutex m_mutex; }; @@ -2305,6 +2307,14 @@ void MFVideoRendererControl::setSurface(QAbstractVideoSurface *surface) static_cast<VideoRendererActivate*>(m_currentActivate)->setSurface(m_surface); } +void MFVideoRendererControl::setCropRect(QRect cropRect) +{ + m_cropRect = cropRect; + + if (m_presenterActivate) + m_presenterActivate->setCropRect(cropRect); +} + void MFVideoRendererControl::customEvent(QEvent *event) { if (m_presenterActivate) @@ -2365,6 +2375,7 @@ IMFActivate* MFVideoRendererControl::createActivate() if (SUCCEEDED(MFCreateVideoRendererActivate(::GetShellWindow(), &m_currentActivate))) { m_presenterActivate = new EVRCustomPresenterActivate; m_currentActivate->SetUnknown(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE, m_presenterActivate); + m_presenterActivate->setCropRect(m_cropRect); } else { m_currentActivate = new VideoRendererActivate(this); } @@ -2388,6 +2399,7 @@ HRESULT EVRCustomPresenterActivate::ActivateObject(REFIID riid, void **ppv) QMutexLocker locker(&m_mutex); if (!m_presenter) { m_presenter = new EVRCustomPresenter; + m_presenter->setCropRect(m_cropRect); if (m_surface) m_presenter->setSurface(m_surface); } @@ -2423,5 +2435,17 @@ void EVRCustomPresenterActivate::setSurface(QAbstractVideoSurface *surface) m_presenter->setSurface(surface); } +void EVRCustomPresenterActivate::setCropRect(QRect cropRect) +{ + QMutexLocker locker(&m_mutex); + if (m_cropRect == cropRect) + return; + + m_cropRect = cropRect; + + if (m_presenter) + m_presenter->setCropRect(cropRect); +} + #include "moc_mfvideorenderercontrol.cpp" #include "mfvideorenderercontrol.moc" diff --git a/src/plugins/wmf/player/mfvideorenderercontrol.h b/src/plugins/wmf/player/mfvideorenderercontrol.h index da9e97ba9..8eab19b40 100644 --- a/src/plugins/wmf/player/mfvideorenderercontrol.h +++ b/src/plugins/wmf/player/mfvideorenderercontrol.h @@ -43,6 +43,7 @@ #include "qvideorenderercontrol.h" #include <mfapi.h> #include <mfidl.h> +#include <qrect.h> QT_USE_NAMESPACE @@ -61,6 +62,8 @@ public: IMFActivate* createActivate(); void releaseActivate(); + void setCropRect(QRect cropRect); + protected: void customEvent(QEvent *event); @@ -74,8 +77,8 @@ private: QAbstractVideoSurface *m_surface; IMFActivate *m_currentActivate; IMFSampleGrabberSinkCallback *m_callback; - EVRCustomPresenterActivate *m_presenterActivate; + QRect m_cropRect; }; #endif |