diff options
author | Mathieu Duponchelle <mathieu.duponchelle@opencreed.com> | 2015-06-20 13:36:27 +0200 |
---|---|---|
committer | Mathieu Duponchelle <mathieu.duponchelle@opencreed.com> | 2015-06-23 00:57:59 +0200 |
commit | 1248b00c80aff2f24ce094a89ec58ce5c172afb8 (patch) | |
tree | 67194b19e22254b2669b861b2a26bb44b5f99c65 | |
parent | 55a5c5f7df7ef37a2924b23337687bbc83cb7744 (diff) | |
download | gstreamer-plugins-bad-1248b00c80aff2f24ce094a89ec58ce5c172afb8.tar.gz |
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
-rw-r--r-- | gst-libs/gst/video/gstvideoaggregator.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c index a66ed3a35..2943036b3 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); |