compositor: fix prepare_frame obscuring check
authorMathieu Duponchelle <mathieu@centricular.com>
Thu, 26 Nov 2020 17:16:10 +0000 (18:16 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 22 Apr 2022 17:43:50 +0000 (17:43 +0000)
A pad without a buffer or with a GAP buffer cannot obscure a
pad below it. Ignore those when considering whether a pad should
be drawn.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/708>

subprojects/gst-plugins-base/gst/compositor/compositor.c

index 1c08715..7dde46b 100644 (file)
@@ -575,6 +575,20 @@ gst_compositor_pad_prepare_frame_start (GstVideoAggregatorPad * pad,
   if (l)
     l = l->next;
   for (; l; l = l->next) {
+    GstBuffer *pad_buffer;
+
+    pad_buffer =
+        gst_video_aggregator_pad_get_current_buffer (GST_VIDEO_AGGREGATOR_PAD
+        (l->data));
+
+    if (pad_buffer == NULL)
+      continue;
+
+    if (gst_buffer_get_size (pad_buffer) == 0 &&
+        GST_BUFFER_FLAG_IS_SET (pad_buffer, GST_BUFFER_FLAG_GAP)) {
+      continue;
+    }
+
     if (_pad_obscures_rectangle (vagg, l->data, frame_rect)) {
       frame_obscured = TRUE;
       break;