From e4bc88492ae824d401393e99091b5585c347fa35 Mon Sep 17 00:00:00 2001 From: Hugues Fruchet Date: Wed, 14 Jun 2023 16:19:49 +0200 Subject: [PATCH] waylandsink: do not use drm dumb pool when importing DMAbuf buffers There is no need to use DRM dumb pool if buffer to render is already a DMABuf, just import it and render it. This fixes a DMAbuf memory leakage when waylandsink downstream element exports DMABuf while waylandsink is configured to be DMABuf exporter (drm-device=/drv/dri/card0): gst-launch-1.0 v4l2src io-mode=4 ! waylandsink drm-device=/dev/dri/card0 leakage identfied with command: watch "cat /sys/kernel/debug/dma_buf/bufinfo | grep attached " Fixes #2729 Part-of: --- .../gst-plugins-bad/ext/wayland/gstwaylandsink.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c b/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c index 8911be4152..bdeca63a15 100644 --- a/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c +++ b/subprojects/gst-plugins-bad/ext/wayland/gstwaylandsink.c @@ -924,12 +924,12 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) wbuf = gst_wl_linux_dmabuf_construct_wl_buffer (buffer, self->display, &self->drm_info); - /* 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) { + /* 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. + */ GstVideoFrame src, dst; if (!gst_wayland_activate_drm_dumb_pool (self)) {