diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-04-08 08:15:15 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-04-08 08:30:38 +0200 |
commit | d0133a2d11566ff4c0cded7af8dfdff0046e0e8b (patch) | |
tree | a672053867e9401fbf651b89b05ffb79623a9de6 | |
parent | c07efdabd8fcf02f100c9810a7a99a367dea4b34 (diff) |
videoconvert: Allow passthrough for ANY caps features
-rw-r--r-- | gst/videoconvert/gstvideoconvert.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/gst/videoconvert/gstvideoconvert.c b/gst/videoconvert/gstvideoconvert.c index 8ecd07964..f9b4495e4 100644 --- a/gst/videoconvert/gstvideoconvert.c +++ b/gst/videoconvert/gstvideoconvert.c @@ -62,7 +62,8 @@ enum PROP_DITHER }; -#define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) +#define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ";" \ + GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", GST_VIDEO_FORMATS_ALL) static GstStaticPadTemplate gst_video_convert_src_template = GST_STATIC_PAD_TEMPLATE ("src", @@ -112,6 +113,7 @@ static GstCaps * gst_video_convert_caps_remove_format_info (GstCaps * caps) { GstStructure *st; + GstCapsFeatures *f; gint i, n; GstCaps *res; @@ -120,17 +122,22 @@ gst_video_convert_caps_remove_format_info (GstCaps * caps) 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 (res, st)) + if (i > 0 && gst_caps_is_subset_structure_full (res, st, f)) continue; st = gst_structure_copy (st); - gst_structure_remove_fields (st, "format", - "colorimetry", "chroma-site", NULL); - - gst_caps_append_structure (res, st); + /* Only remove format info for the cases when we can actually convert */ + if (!gst_caps_features_is_any (f) + && gst_caps_features_is_equal (f, + GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY)) + gst_structure_remove_fields (st, "format", "colorimetry", "chroma-site", + NULL); + + gst_caps_append_structure_full (res, st, gst_caps_features_copy (f)); } return res; |