Files
yoctor-layers/meta-st/meta-st-openstlinux/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0020-gtkwaylandsink-do-not-use-drm-dumb-pool-with-DMAbuf-.patch
2024-07-11 14:16:35 +02:00

66 lines
2.5 KiB
Diff

From f7b4ff8313d4e2197bdb91d21cd0a7beb59b7b7c Mon Sep 17 00:00:00 2001
From: Hugues Fruchet <hugues.fruchet@foss.st.com>
Date: Wed, 14 Jun 2023 11:24:49 +0200
Subject: [PATCH 20/21] gtkwaylandsink: do not use drm dumb pool with DMAbuf
buffers
There is no need to use our DRM dumb pool if buffer to
render is already a DMABuf, just import it and render it.
This fixes a DMAbuf memory leakage identfied with command:
watch "cat /sys/kernel/debug/dma_buf/bufinfo | grep attached "
Signed-off-by: Hugues Fruchet <hugues.fruchet@foss.st.com>
---
ext/gtk/gstgtkwaylandsink.c | 6 +++++-
ext/wayland/gstwaylandsink.c | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/ext/gtk/gstgtkwaylandsink.c b/ext/gtk/gstgtkwaylandsink.c
index 2debee6..7537200 100644
--- a/ext/gtk/gstgtkwaylandsink.c
+++ b/ext/gtk/gstgtkwaylandsink.c
@@ -1175,12 +1175,16 @@ gst_gtk_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
wbuf = gst_wl_linux_dmabuf_construct_wl_buffer (buffer, priv->display,
&priv->video_info);
+ if (wbuf)
+ GST_LOG_OBJECT (self,
+ "buffer %" GST_PTR_FORMAT " is DMABuf", buffer);
+
/* DMABuf did not work, let try and make this a dmabuf, it does not matter
* if it was a SHM since the compositor needs to copy that anyway, and
* offloading the compositor from a copy helps maintaining a smoother
* desktop.
*/
- if (!priv->skip_dumb_buffer_copy) {
+ if (!wbuf && !priv->skip_dumb_buffer_copy) {
GstVideoFrame src, dst;
if (!gst_gtk_wayland_activate_drm_dumb_pool (self)) {
diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
index 24a7174..1662241 100644
--- a/ext/wayland/gstwaylandsink.c
+++ b/ext/wayland/gstwaylandsink.c
@@ -907,12 +907,16 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
wbuf = gst_wl_linux_dmabuf_construct_wl_buffer (buffer, self->display,
&self->video_info);
+ if (wbuf)
+ GST_LOG_OBJECT (self,
+ "buffer %" GST_PTR_FORMAT " is DMABuf", buffer);
+
/* DMABuf did not work, let try and make this a dmabuf, it does not matter
* if it was a SHM since the compositor needs to copy that anyway, and
* offloading the compositor from a copy helps maintaining a smoother
* desktop.
*/
- if (!self->skip_dumb_buffer_copy) {
+ if (!wbuf && !self->skip_dumb_buffer_copy) {
GstVideoFrame src, dst;
if (!gst_wayland_activate_drm_dumb_pool (self)) {
--
2.25.1