summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/android/common/qandroidvideooutput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/multimedia/android/common/qandroidvideooutput.cpp')
-rw-r--r--src/plugins/multimedia/android/common/qandroidvideooutput.cpp52
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();
}