aboutsummaryrefslogtreecommitdiff
path: root/gst/videoparsers/gstmpeg4videoparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/videoparsers/gstmpeg4videoparse.c')
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index 9b7344f0..29caec7f 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -767,10 +767,12 @@ gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps)
static GstCaps *
gst_mpeg4vparse_get_caps (GstBaseParse * parse, GstCaps * filter)
{
- GstCaps *peercaps;
+ GstCaps *peercaps, *templ;
GstCaps *res;
+ templ = gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD (parse));
peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
+
if (peercaps) {
guint i, n;
@@ -783,15 +785,16 @@ gst_mpeg4vparse_get_caps (GstBaseParse * parse, GstCaps * filter)
gst_structure_remove_field (s, "parsed");
}
- res =
- gst_caps_intersect_full (peercaps,
- gst_pad_get_pad_template_caps (GST_BASE_PARSE_SRC_PAD (parse)),
- GST_CAPS_INTERSECT_FIRST);
+ res = gst_caps_intersect_full (peercaps, templ, GST_CAPS_INTERSECT_FIRST);
gst_caps_unref (peercaps);
+
+ /* Append the template caps because we still want to accept
+ * caps without any fields in the case upstream does not
+ * know anything.
+ */
+ gst_caps_append (res, templ);
} else {
- res =
- gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
- (parse)));
+ res = templ;
}
if (filter) {