From: Matthew Waters Date: Thu, 12 Mar 2015 10:14:50 +0000 (+0000) Subject: glfilter: advertise resize in the caps negotiation properly X-Git-Tag: 1.19.3~511^2~1989^2~1009 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f9ac4984ebd8e33f62e18d864905960a2f4e560b;p=platform%2Fupstream%2Fgstreamer.git glfilter: advertise resize in the caps negotiation properly --- diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c index 8a0a498..cf1c8ff 100644 --- a/gst-libs/gst/gl/gstglfilter.c +++ b/gst-libs/gst/gl/gstglfilter.c @@ -707,6 +707,36 @@ done: return othercaps; } +/* copies the given caps */ +static GstCaps * +gst_gl_filter_caps_remove_size (GstCaps * caps) +{ + GstStructure *st; + GstCapsFeatures *f; + gint i, n; + GstCaps *res; + + res = gst_caps_new_empty (); + + n = gst_caps_get_size (caps); + for (i = 0; i < n; i++) { + st = gst_caps_get_structure (caps, i); + f = gst_caps_get_features (caps, i); + + /* If this is already expressed by the existing caps + * skip this structure */ + if (i > 0 && gst_caps_is_subset_structure_full (res, st, f)) + continue; + + st = gst_structure_copy (st); + gst_structure_remove_fields (st, "width", "height", NULL); + + gst_caps_append_structure_full (res, st, gst_caps_features_copy (f)); + } + + return res; +} + static GstCaps * gst_gl_filter_set_caps_features (const GstCaps * caps, const gchar * feature_name) @@ -751,9 +781,13 @@ gst_gl_filter_transform_caps (GstBaseTransform * bt, result = gst_caps_merge (gl_caps, result); } - tmp = result; GST_DEBUG_OBJECT (bt, "transfer returned caps %" GST_PTR_FORMAT, tmp); + tmp = gst_gl_filter_caps_remove_size (result); + gst_caps_unref (result); + result = tmp; + GST_DEBUG_OBJECT (bt, "size removal returned caps %" GST_PTR_FORMAT, tmp); + if (direction == GST_PAD_SRC) { result = gst_gl_color_convert_transform_caps (filter->context, direction, tmp,