summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/windows
diff options
context:
space:
mode:
authorAndré de la Rocha <andre.rocha@qt.io>2022-02-10 12:36:12 +0100
committerAndré de la Rocha <andre.rocha@qt.io>2022-04-01 09:12:26 -0300
commitcf33c31b06190f853635242b34eea0820d9fb041 (patch)
treeb6b8b3e8f6550dd522b977bbbb27ff409f61e29c /src/plugins/multimedia/windows
parent2a7babe9e6f695e9effa5334734bd8e6d997644a (diff)
Do QVideoFrame to QImage conversion using shaders
Use existing shaders to do format conversion, in order to reduce overall CPU use, rendering the frame in an offscreen texture that is read back and used to generate a QImage. Task-number: QTBUG-99969 Change-Id: Iaae9acb573c49e81c177dbcb6c1ec4d3a9cab89d Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/plugins/multimedia/windows')
-rw-r--r--src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp
index 88bb8ebb8..96c7836cf 100644
--- a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp
+++ b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp
@@ -161,7 +161,7 @@ public:
std::unique_ptr<QRhiTexture> texture(int plane) const override
{
- if (!rhi || !m_d2d11tex || plane > 0)
+ if (!m_rhi || !m_d2d11tex || plane > 0)
return {};
D3D11_TEXTURE2D_DESC desc = {};
m_d2d11tex->GetDesc(&desc);
@@ -173,7 +173,7 @@ public:
else
return {};
- std::unique_ptr<QRhiTexture> tex(rhi->newTexture(format, QSize{int(desc.Width), int(desc.Height)}, 1, {}));
+ std::unique_ptr<QRhiTexture> tex(m_rhi->newTexture(format, QSize{int(desc.Width), int(desc.Height)}, 1, {}));
tex->createFrom({quint64(m_d2d11tex.get()), 0});
return tex;
}
@@ -243,6 +243,7 @@ public:
m_d3dglHandle = m_wgl.wglDXOpenDeviceNV(m_device.get());
if (!m_d3dglHandle) {
+ m_texture.reset();
qCDebug(qLcEvrD3DPresentEngine) << "Failed to open D3D device";
return;
}
@@ -274,7 +275,7 @@ public:
std::unique_ptr<QRhiTexture> texture(int plane) const override
{
- if (!rhi || !m_texture || plane > 0)
+ if (!m_rhi || !m_texture || plane > 0)
return {};
D3DSURFACE_DESC desc;
@@ -287,7 +288,7 @@ public:
else
return {};
- std::unique_ptr<QRhiTexture> tex(rhi->newTexture(format, QSize{int(desc.Width), int(desc.Height)}, 1, {}));
+ std::unique_ptr<QRhiTexture> tex(m_rhi->newTexture(format, QSize{int(desc.Width), int(desc.Height)}, 1, {}));
tex->createFrom({quint64(m_glTextureName), 0});
return tex;
}