summaryrefslogtreecommitdiffstats
path: root/src/plugins/common/evr/evrcustompresenter.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-09-08 11:31:04 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-09-09 09:01:52 +0200
commita4057a86f4acb3fad19527e862d3ee0ba48a1574 (patch)
tree82a1bd1217709843b922724a520462b55029ac4a /src/plugins/common/evr/evrcustompresenter.cpp
parentd31e5042ed6d8c1bd4dafe980eb90db4fc3e63de (diff)
parentdfc018e15886cf5d55f246670ba67203948fa764 (diff)
Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"
Diffstat (limited to 'src/plugins/common/evr/evrcustompresenter.cpp')
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 84786e9a9..2bc761c45 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -557,6 +557,7 @@ EVRCustomPresenter::EVRCustomPresenter(QAbstractVideoSurface *surface)
, m_mediaType(0)
, m_surface(0)
, m_canRenderToSurface(false)
+ , m_positionOffset(0)
{
// Initial source rectangle = (0,0,1,1)
m_sourceRect.top = 0;
@@ -1143,7 +1144,7 @@ HRESULT EVRCustomPresenter::flush()
sample->Release();
m_frameStep.samples.clear();
- if (m_renderState == RenderStopped && m_surface->isActive()) {
+ if (m_renderState == RenderStopped && m_surface && m_surface->isActive()) {
// Repaint with black.
presentSample(NULL);
}
@@ -1932,6 +1933,15 @@ void EVRCustomPresenter::presentSample(IMFSample *sample)
QVideoFrame frame = m_presentEngine->makeVideoFrame(sample);
+ // Since start/end times are related to a position when the clock is started,
+ // to have times from the beginning, need to adjust it by adding seeked position.
+ if (m_positionOffset) {
+ if (frame.startTime())
+ frame.setStartTime(frame.startTime() + m_positionOffset);
+ if (frame.endTime())
+ frame.setEndTime(frame.endTime() + m_positionOffset);
+ }
+
if (!m_surface->isActive() || m_surface->surfaceFormat() != m_presentEngine->videoSurfaceFormat()) {
m_surface->stop();
if (!m_surface->start(m_presentEngine->videoSurfaceFormat()))
@@ -1941,6 +1951,11 @@ void EVRCustomPresenter::presentSample(IMFSample *sample)
m_surface->present(frame);
}
+void EVRCustomPresenter::positionChanged(qint64 position)
+{
+ m_positionOffset = position * 1000;
+}
+
HRESULT setDesiredSampleTime(IMFSample *sample, const LONGLONG &sampleTime, const LONGLONG &duration)
{
if (!sample)