summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu.duponchelle@opencreed.com>2015-06-20 13:36:27 +0200
committerMathieu Duponchelle <mathieu.duponchelle@opencreed.com>2015-06-23 00:57:59 +0200
commit1248b00c80aff2f24ce094a89ec58ce5c172afb8 (patch)
tree67194b19e22254b2669b861b2a26bb44b5f99c65
parent55a5c5f7df7ef37a2924b23337687bbc83cb7744 (diff)
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.c14
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);