qml, qml6: Fix leak of QSGMaterial/Geometry (and therefore a possible GstBuffer)
authorMatthew Waters <matthew@centricular.com>
Wed, 21 Feb 2024 08:09:20 +0000 (19:09 +1100)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 22 Feb 2024 10:26:31 +0000 (10:26 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6160>

subprojects/gst-plugins-good/ext/qt/qtitem.cc
subprojects/gst-plugins-good/ext/qt6/qt6glitem.cc

index 8ca7015db210e14fa70127769b7c82b5b9dd1b99..0a85ab870478e6fa75716b7dff61eb8006e7985f 100644 (file)
@@ -314,8 +314,10 @@ QtGLVideoItem::updatePaintNode(QSGNode * oldNode,
     texNode = new QSGGeometryNode();
     geometry = new QSGGeometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4);
     texNode->setGeometry(geometry);
+    texNode->setFlag(QSGGeometryNode::Flag::OwnsGeometry);
     tex = GstQSGMaterial::new_for_format(GST_VIDEO_INFO_FORMAT (&this->priv->v_info));
     texNode->setMaterial(tex);
+    texNode->setFlag(QSGGeometryNode::Flag::OwnsMaterial);
   }
 
   if ((old_buffer = tex->getBuffer(&was_bound))) {
index c43e40d59a28504fd4e1618b1e4a299fcf249ec8..99c256708e834a483520d804d346152ab4a01854 100644 (file)
@@ -309,10 +309,12 @@ Qt6GLVideoItem::updatePaintNode(QSGNode * oldNode,
     texNode = new QSGGeometryNode();
     geometry = new QSGGeometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4);
     texNode->setGeometry(geometry);
+    texNode->setFlag(QSGGeometryNode::OwnsGeometry);
     tex = GstQSGMaterial::new_for_format(GST_VIDEO_INFO_FORMAT (&this->priv->v_info));
     tex->setFiltering(is_smooth ? QSGTexture::Filtering::Linear :
         QSGTexture::Filtering::Nearest);
     texNode->setMaterial(tex);
+    texNode->setFlag(QSGGeometryNode::OwnsMaterial);
   }
 
   if ((old_buffer = tex->getBuffer(&was_bound))) {