diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-12-26 12:26:35 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-12-28 15:33:00 +0000 |
commit | e5039f5344fe3bb28c243d924bc4f39b12d9a7f4 (patch) | |
tree | 6520b1057182df19a90160ad30b8e3964c501584 /src | |
parent | 7220147c1be55a40c5f8ff1b7bb1d0a0984ef829 (diff) |
Move QImageVideoBuffer to a separate file
The class is to be resued in eglfs screen capture.
Pick-to: 6.6 6.5
Change-Id: I3161757ce7590e4299f9f017d4be4d50a2560db0
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Mikko Hallamaa <mikko.hallamaa@qt.io>
(cherry picked from commit 9b737c463cf391928e33addc7320ecd490a21675)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/multimedia/video/qimagevideobuffer.cpp | 39 | ||||
-rw-r--r-- | src/multimedia/video/qimagevideobuffer_p.h | 41 | ||||
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qgrabwindowsurfacecapture.cpp | 38 |
4 files changed, 83 insertions, 36 deletions
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt index a6ea3e70f..a207ce7dc 100644 --- a/src/multimedia/CMakeLists.txt +++ b/src/multimedia/CMakeLists.txt @@ -71,6 +71,7 @@ qt_internal_add_module(Multimedia recording/qcapturablewindow.cpp recording/qcapturablewindow.h recording/qcapturablewindow_p.h video/qabstractvideobuffer.cpp video/qabstractvideobuffer_p.h video/qmemoryvideobuffer.cpp video/qmemoryvideobuffer_p.h + video/qimagevideobuffer.cpp video/qimagevideobuffer_p.h video/qvideoframe.cpp video/qvideoframe.h video/qvideosink.cpp video/qvideosink.h video/qvideotexturehelper.cpp video/qvideotexturehelper_p.h diff --git a/src/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/video/qimagevideobuffer.cpp new file mode 100644 index 000000000..293d17252 --- /dev/null +++ b/src/multimedia/video/qimagevideobuffer.cpp @@ -0,0 +1,39 @@ +// Copyright (C) 2023 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 "qimagevideobuffer_p.h" + +QT_BEGIN_NAMESPACE + +QImageVideoBuffer::QImageVideoBuffer(QImage image) + : QAbstractVideoBuffer(QVideoFrame::NoHandle), m_image(std::move(image)) +{ +} + +QVideoFrame::MapMode QImageVideoBuffer::mapMode() const +{ + return m_mapMode; +} + +QAbstractVideoBuffer::MapData QImageVideoBuffer::map(QVideoFrame::MapMode mode) +{ + MapData mapData; + if (m_mapMode == QVideoFrame::NotMapped && !m_image.isNull() + && mode != QVideoFrame::NotMapped) { + m_mapMode = mode; + + mapData.nPlanes = 1; + mapData.bytesPerLine[0] = m_image.bytesPerLine(); + mapData.data[0] = m_image.bits(); + mapData.size[0] = m_image.sizeInBytes(); + } + + return mapData; +} + +void QImageVideoBuffer::unmap() +{ + m_mapMode = QVideoFrame::NotMapped; +} + +QT_END_NAMESPACE diff --git a/src/multimedia/video/qimagevideobuffer_p.h b/src/multimedia/video/qimagevideobuffer_p.h new file mode 100644 index 000000000..83fc21d4f --- /dev/null +++ b/src/multimedia/video/qimagevideobuffer_p.h @@ -0,0 +1,41 @@ +// Copyright (C) 2023 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 + +#ifndef QIMAGEVIDEOBUFFER_P_H +#define QIMAGEVIDEOBUFFER_P_H + +#include <private/qabstractvideobuffer_p.h> +#include <qimage.h> + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +class Q_MULTIMEDIA_EXPORT QImageVideoBuffer : public QAbstractVideoBuffer +{ +public: + QImageVideoBuffer(QImage image); + + QVideoFrame::MapMode mapMode() const override; + + MapData map(QVideoFrame::MapMode mode) override; + + void unmap() override; + +private: + QVideoFrame::MapMode m_mapMode = QVideoFrame::NotMapped; + QImage m_image; +}; + +QT_END_NAMESPACE + +#endif // QIMAGEVIDEOBUFFER_P_H diff --git a/src/plugins/multimedia/ffmpeg/qgrabwindowsurfacecapture.cpp b/src/plugins/multimedia/ffmpeg/qgrabwindowsurfacecapture.cpp index f9951a742..8ed3aecd9 100644 --- a/src/plugins/multimedia/ffmpeg/qgrabwindowsurfacecapture.cpp +++ b/src/plugins/multimedia/ffmpeg/qgrabwindowsurfacecapture.cpp @@ -6,14 +6,14 @@ #include "qscreencapture.h" #include "qffmpegsurfacecapturegrabber_p.h" -#include "private/qabstractvideobuffer_p.h" +#include "private/qimagevideobuffer_p.h" +#include "private/qcapturablewindow_p.h" #include "qscreen.h" #include "qmutex.h" #include "qwaitcondition.h" #include "qpixmap.h" #include "qguiapplication.h" -#include "private/qcapturablewindow_p.h" #include "qwindow.h" #include "qpointer.h" @@ -25,40 +25,6 @@ namespace { using WindowUPtr = std::unique_ptr<QWindow>; -class QImageVideoBuffer : public QAbstractVideoBuffer -{ -public: - QImageVideoBuffer(QImage &&image) - : QAbstractVideoBuffer(QVideoFrame::NoHandle), m_image(std::move(image)) - { - } - - QVideoFrame::MapMode mapMode() const override { return m_mapMode; } - - MapData map(QVideoFrame::MapMode mode) override - { - MapData mapData; - if (m_mapMode == QVideoFrame::NotMapped && !m_image.isNull() && mode != QVideoFrame::NotMapped) { - m_mapMode = mode; - - mapData.nPlanes = 1; - mapData.bytesPerLine[0] = m_image.bytesPerLine(); - mapData.data[0] = m_image.bits(); - mapData.size[0] = m_image.sizeInBytes(); - } - - return mapData; - } - - void unmap() override - { - m_mapMode = QVideoFrame::NotMapped; - } - - QVideoFrame::MapMode m_mapMode = QVideoFrame::NotMapped; - QImage m_image; -}; - } // namespace class QGrabWindowSurfaceCapture::Grabber : public QFFmpegSurfaceCaptureGrabber |