diff options
Diffstat (limited to 'src/multimedia/platform/qplatformvideosink.cpp')
-rw-r--r-- | src/multimedia/platform/qplatformvideosink.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/multimedia/platform/qplatformvideosink.cpp b/src/multimedia/platform/qplatformvideosink.cpp new file mode 100644 index 000000000..abf82af0f --- /dev/null +++ b/src/multimedia/platform/qplatformvideosink.cpp @@ -0,0 +1,78 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qplatformvideosink_p.h" +#include "qmultimediautils_p.h" + +QT_BEGIN_NAMESPACE + +QPlatformVideoSink::QPlatformVideoSink(QVideoSink *parent) : QObject(parent), m_sink(parent) { } + +QPlatformVideoSink::~QPlatformVideoSink() = default; + +QSize QPlatformVideoSink::nativeSize() const +{ + QMutexLocker locker(&m_mutex); + return m_nativeSize; +} + +void QPlatformVideoSink::setNativeSize(QSize s) +{ + { + QMutexLocker locker(&m_mutex); + if (m_nativeSize == s) + return; + m_nativeSize = s; + } + emit m_sink->videoSizeChanged(); +} + +void QPlatformVideoSink::setVideoFrame(const QVideoFrame &frame) +{ + bool sizeChanged = false; + + { + QMutexLocker locker(&m_mutex); + if (frame == m_currentVideoFrame) + return; + m_currentVideoFrame = frame; + m_currentVideoFrame.setSubtitleText(m_subtitleText); + const auto size = qRotatedFrameSize(frame); + if (size != m_nativeSize) { + m_nativeSize = size; + sizeChanged = true; + } + } + + // emit signals outside the mutex to avoid deadlocks on the user side + if (sizeChanged) + emit m_sink->videoSizeChanged(); + emit m_sink->videoFrameChanged(frame); +} + +QVideoFrame QPlatformVideoSink::currentVideoFrame() const +{ + QMutexLocker locker(&m_mutex); + return m_currentVideoFrame; +} + +void QPlatformVideoSink::setSubtitleText(const QString &subtitleText) +{ + { + QMutexLocker locker(&m_mutex); + if (m_subtitleText == subtitleText) + return; + m_subtitleText = subtitleText; + } + emit m_sink->subtitleTextChanged(subtitleText); +} + +QString QPlatformVideoSink::subtitleText() const +{ + QMutexLocker locker(&m_mutex); + return m_subtitleText; +} + +QT_END_NAMESPACE + +#include "moc_qplatformvideosink_p.cpp" |