From 1248b00c80aff2f24ce094a89ec58ce5c172afb8 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Sat, 20 Jun 2015 13:36:27 +0200 Subject: [PATCH] videoaggregator: simplifies and improves sink_get_caps. The problem here was that after removing the formats and all the things we could convert, we then intersected these caps with the template caps. Hence if a subclass offered permissive sink templates (eg all the possible formats videoconvert handles), but only one output format, then at negotiation time getcaps returned caps with the format restricted to that format, even though we do handle conversion. https://bugzilla.gnome.org/show_bug.cgi?id=751255 --- gst-libs/gst/video/gstvideoaggregator.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c index a66ed3a350..2943036b30 100644 --- a/gst-libs/gst/video/gstvideoaggregator.c +++ b/gst-libs/gst/video/gstvideoaggregator.c @@ -842,7 +842,6 @@ gst_videoaggregator_pad_sink_getcaps (GstPad * pad, GstVideoAggregator * vagg, { GstCaps *srccaps; GstCaps *template_caps; - GstCaps *filtered_caps; GstCaps *returned_caps; GstStructure *s; gboolean had_current_caps = TRUE; @@ -870,14 +869,13 @@ gst_videoaggregator_pad_sink_getcaps (GstPad * pad, GstVideoAggregator * vagg, NULL); } - filtered_caps = srccaps; - if (filter) - filtered_caps = gst_caps_intersect (srccaps, filter); - returned_caps = gst_caps_intersect (filtered_caps, template_caps); + if (filter) { + returned_caps = gst_caps_intersect (srccaps, filter); + gst_caps_unref (srccaps); + } else { + returned_caps = srccaps; + } - gst_caps_unref (srccaps); - if (filter) - gst_caps_unref (filtered_caps); if (had_current_caps) gst_caps_unref (template_caps);