summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2013-04-08 08:15:15 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2013-04-08 08:30:38 +0200
commitd0133a2d11566ff4c0cded7af8dfdff0046e0e8b (patch)
treea672053867e9401fbf651b89b05ffb79623a9de6
parentc07efdabd8fcf02f100c9810a7a99a367dea4b34 (diff)
videoconvert: Allow passthrough for ANY caps features
-rw-r--r--gst/videoconvert/gstvideoconvert.c19
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;