diff --git a/src/multimediaquick/qsgvideonode_p.cpp b/src/multimediaquick/qsgvideonode_p.cpp index bbde32788..528719f53 100644 --- a/src/multimediaquick/qsgvideonode_p.cpp +++ b/src/multimediaquick/qsgvideonode_p.cpp @@ -106,8 +106,6 @@ public: bool m_texturesDirty = false; QVideoFrame m_currentFrame; - enum { NVideoFrameSlots = 4 }; - QVideoFrame m_videoFrameSlots[NVideoFrameSlots]; QScopedPointer m_textures[3]; std::unique_ptr m_videoFrameTextures; }; @@ -118,10 +116,6 @@ void QSGVideoMaterial::updateTextures(QRhi *rhi, QRhiResourceUpdateBatch *resour if (!m_texturesDirty) return; - // keep the video frames alive until we know that they are not needed anymore - Q_ASSERT(NVideoFrameSlots >= rhi->resourceLimit(QRhi::FramesInFlight)); - m_videoFrameSlots[rhi->currentFrameSlot()] = m_currentFrame; - // update and upload all textures m_videoFrameTextures = QVideoTextureHelper::createTextures(m_currentFrame, rhi, resourceUpdates, std::move(m_videoFrameTextures)); for (int plane = 0; plane < 3; ++plane) diff --git a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp index 6dc8a3a57..9e7024028 100644 --- a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp +++ b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp @@ -115,8 +115,9 @@ private: class QVideoFrameD3D11Textures: public QVideoFrameTextures { public: - QVideoFrameD3D11Textures(std::unique_ptr &&tex, ComPtr &&d3d11tex) - : m_tex(std::move(tex)) + QVideoFrameD3D11Textures(std::unique_ptr &&tex, ComPtr &&d3d11tex, const ComPtr& sample) + : m_sample{sample} + , m_tex(std::move(tex)) , m_d3d11tex(std::move(d3d11tex)) {} @@ -126,6 +127,7 @@ public: }; private: + ComPtr m_sample; std::unique_ptr m_tex; ComPtr m_d3d11tex; }; @@ -167,7 +169,7 @@ public: std::unique_ptr tex(rhi->newTexture(format, QSize{int(desc.Width), int(desc.Height)}, 1, {})); tex->createFrom({quint64(d3d11tex.Get()), 0}); - return std::make_unique(std::move(tex), std::move(d3d11tex)); + return std::make_unique(std::move(tex), std::move(d3d11tex), m_sample); } else { qCDebug(qLcEvrD3DPresentEngine) << "Failed to obtain D3D11Texture2D from D3D9Texture2D handle";