videoaggregator: redo src caps negotiation if a sink pad's caps have changed in the...
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Fri, 3 Mar 2017 14:20:15 +0000 (16:20 +0200)
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Mon, 6 Mar 2017 15:20:56 +0000 (17:20 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=755782

gst-libs/gst/video/gstvideoaggregator.c

index ea2d104..2abb4d5 100644 (file)
@@ -1448,6 +1448,7 @@ gst_video_aggregator_check_reconfigure (GstVideoAggregator * vagg,
       || gst_pad_check_reconfigure (GST_AGGREGATOR_SRC_PAD (vagg))) {
     gboolean ret;
 
+  restart:
     ret = gst_video_aggregator_update_src_caps (vagg);
     if (!ret) {
       gst_pad_mark_reconfigure (GST_AGGREGATOR_SRC_PAD (vagg));
@@ -1486,6 +1487,13 @@ gst_video_aggregator_check_reconfigure (GstVideoAggregator * vagg,
         else
           return GST_FLOW_NOT_NEGOTIATED;
       }
+    } else {
+      /* It is possible that during gst_video_aggregator_update_src_caps()
+       * we got a caps change on one of the sink pads, in which case we need
+       * to redo the negotiation
+       * - https://bugzilla.gnome.org/show_bug.cgi?id=755782 */
+      if (gst_pad_check_reconfigure (GST_AGGREGATOR_SRC_PAD (vagg)))
+        goto restart;
     }
   }