From c634ef9610022c21630905c193cc9ecbcfd9a736 Mon Sep 17 00:00:00 2001 From: Sven Ulland Date: Tue, 20 Jan 2026 17:15:36 +0100 Subject: [PATCH] pipewiresrc: Fix video crop metadata not being set Since commit a1f33a99df changed buffer handling to create new GstBuffers instead of reusing pool buffers, the video crop metadata was silently lost. The code used gst_buffer_get_video_crop_meta() which returns NULL on a fresh buffer, so the crop values from PipeWire were never applied. Change to gst_buffer_add_video_crop_meta() to actually attach the metadata to the buffer. Also remove the now-obsolete call in gst_pipewire_pool_wrap_buffer. This was discovered when using the XDG Desktop Portal's RemoteDesktop interface: the full desktop was being delivered instead of just the selected window, because the crop region metadata was not being propagated to the GStreamer buffer. Fixes: a1f33a99df ("gst: dequeue a shared buffer instead of original pool buffer"), from merge request !1258 CC: @jameshilliard --- src/gst/gstpipewirepool.c | 2 -- src/gst/gstpipewiresrc.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gst/gstpipewirepool.c b/src/gst/gstpipewirepool.c index 5581c64ac..3bcf99de7 100644 --- a/src/gst/gstpipewirepool.c +++ b/src/gst/gstpipewirepool.c @@ -209,8 +209,6 @@ void gst_pipewire_pool_wrap_buffer (GstPipeWirePool *pool, struct pw_buffer *b) data->b = b; data->buf = buf; data->crop = spa_buffer_find_meta_data (b->buffer, SPA_META_VideoCrop, sizeof(*data->crop)); - if (data->crop) - gst_buffer_add_video_crop_meta(buf); data->videotransform = spa_buffer_find_meta_data (b->buffer, SPA_META_VideoTransform, sizeof(*data->videotransform)); data->cursor = spa_buffer_find_meta_data (b->buffer, SPA_META_Cursor, sizeof(*data->cursor)); diff --git a/src/gst/gstpipewiresrc.c b/src/gst/gstpipewiresrc.c index 8bfd799a1..b0de17dfd 100644 --- a/src/gst/gstpipewiresrc.c +++ b/src/gst/gstpipewiresrc.c @@ -781,7 +781,7 @@ static GstBuffer *dequeue_buffer(GstPipeWireSrc *pwsrc) crop = data->crop; if (crop) { - GstVideoCropMeta *meta = gst_buffer_get_video_crop_meta(buf); + GstVideoCropMeta *meta = gst_buffer_add_video_crop_meta(buf); if (meta) { meta->x = crop->region.position.x; meta->y = crop->region.position.y;