diff options
author | André de la Rocha <andre.rocha@qt.io> | 2022-02-10 12:36:12 +0100 |
---|---|---|
committer | André de la Rocha <andre.rocha@qt.io> | 2022-04-01 09:12:26 -0300 |
commit | cf33c31b06190f853635242b34eea0820d9fb041 (patch) | |
tree | b6b8b3e8f6550dd522b977bbbb27ff409f61e29c /src/plugins/multimedia/windows | |
parent | 2a7babe9e6f695e9effa5334734bd8e6d997644a (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.cpp | 9 |
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; } |