diff options
Diffstat (limited to 'src/plugins/multimedia/android/common/qandroidvideooutput.cpp')
-rw-r--r-- | src/plugins/multimedia/android/common/qandroidvideooutput.cpp | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/src/plugins/multimedia/android/common/qandroidvideooutput.cpp b/src/plugins/multimedia/android/common/qandroidvideooutput.cpp index 5a4eebf51..0724a8359 100644 --- a/src/plugins/multimedia/android/common/qandroidvideooutput.cpp +++ b/src/plugins/multimedia/android/common/qandroidvideooutput.cpp @@ -6,9 +6,10 @@ #include <rhi/qrhi.h> #include <QtGui/private/qopenglextensions_p.h> -#include <private/qabstractvideobuffer_p.h> +#include <private/qhwvideobuffer_p.h> #include <private/qvideoframeconverter_p.h> #include <private/qplatformvideosink_p.h> +#include <private/qvideoframe_p.h> #include <qvideosink.h> #include <qopenglcontext.h> #include <qopenglfunctions.h> @@ -49,27 +50,24 @@ private: std::shared_ptr<AndroidTextureThread> m_thread; }; - -class AndroidTextureVideoBuffer : public QRhiWithThreadGuard, public QAbstractVideoBuffer +class AndroidTextureVideoBuffer : public QRhiWithThreadGuard, public QHwVideoBuffer { public: - AndroidTextureVideoBuffer( - std::shared_ptr<QRhi> rhi, std::shared_ptr<AndroidTextureThread> thread, - std::unique_ptr<QRhiTexture> tex, const QSize &size) - : QRhiWithThreadGuard(std::move(rhi), std::move(thread)) - , QAbstractVideoBuffer(QVideoFrame::RhiTextureHandle, m_guardRhi.get()) - , m_size(size) - , m_tex(std::move(tex)) + AndroidTextureVideoBuffer(std::shared_ptr<QRhi> rhi, + std::shared_ptr<AndroidTextureThread> thread, + std::unique_ptr<QRhiTexture> tex, const QSize &size) + : QRhiWithThreadGuard(std::move(rhi), std::move(thread)), + QHwVideoBuffer(QVideoFrame::RhiTextureHandle, m_guardRhi.get()), + m_size(size), + m_tex(std::move(tex)) {} - QVideoFrame::MapMode mapMode() const override { return m_mapMode; } - - MapData map(QVideoFrame::MapMode mode) override; + MapData map(QtVideo::MapMode mode) override; void unmap() override { m_image = {}; - m_mapMode = QVideoFrame::NotMapped; + m_mapMode = QtVideo::MapMode::NotMapped; } std::unique_ptr<QVideoFrameTextures> mapTextures(QRhi *rhi) override @@ -81,39 +79,39 @@ private: QSize m_size; std::unique_ptr<QRhiTexture> m_tex; QImage m_image; - QVideoFrame::MapMode m_mapMode = QVideoFrame::NotMapped; + QtVideo::MapMode m_mapMode = QtVideo::MapMode::NotMapped; }; -class ImageFromVideoFrameHelper : public QAbstractVideoBuffer +class ImageFromVideoFrameHelper : public QHwVideoBuffer { public: ImageFromVideoFrameHelper(AndroidTextureVideoBuffer &atvb) - : QAbstractVideoBuffer(QVideoFrame::RhiTextureHandle, atvb.rhi()) - , m_atvb(atvb) + : QHwVideoBuffer(QVideoFrame::RhiTextureHandle, atvb.rhi()), m_atvb(atvb) {} std::unique_ptr<QVideoFrameTextures> mapTextures(QRhi *rhi) override { return m_atvb.mapTextures(rhi); } - QVideoFrame::MapMode mapMode() const override { return QVideoFrame::NotMapped; } - MapData map(QVideoFrame::MapMode) override { return {}; } + + MapData map(QtVideo::MapMode) override { return {}; } void unmap() override {} private: AndroidTextureVideoBuffer &m_atvb; }; -QAbstractVideoBuffer::MapData AndroidTextureVideoBuffer::map(QVideoFrame::MapMode mode) +QAbstractVideoBuffer::MapData AndroidTextureVideoBuffer::map(QtVideo::MapMode mode) { QAbstractVideoBuffer::MapData mapData; - if (m_mapMode == QVideoFrame::NotMapped && mode == QVideoFrame::ReadOnly) { - m_mapMode = QVideoFrame::ReadOnly; - m_image = qImageFromVideoFrame(QVideoFrame(new ImageFromVideoFrameHelper(*this), - QVideoFrameFormat(m_size, QVideoFrameFormat::Format_RGBA8888))); - mapData.nPlanes = 1; + if (m_mapMode == QtVideo::MapMode::NotMapped && mode == QtVideo::MapMode::ReadOnly) { + m_mapMode = QtVideo::MapMode::ReadOnly; + m_image = qImageFromVideoFrame(QVideoFramePrivate::createFrame( + std::make_unique<ImageFromVideoFrameHelper>(*this), + QVideoFrameFormat(m_size, QVideoFrameFormat::Format_RGBA8888))); + mapData.planeCount = 1; mapData.bytesPerLine[0] = m_image.bytesPerLine(); - mapData.size[0] = static_cast<int>(m_image.sizeInBytes()); + mapData.dataSize[0] = static_cast<int>(m_image.sizeInBytes()); mapData.data[0] = m_image.bits(); } |