From fc49a1b508b1759a708b5597133af28ab54b2c10 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 a66ed3a..2943036 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); -- 2.7.4