diff --git a/sys/uvch264/gstuvch264_src.c b/sys/uvch264/gstuvch264_src.c index 4d22317697..87b647434a 100644 --- a/sys/uvch264/gstuvch264_src.c +++ b/sys/uvch264/gstuvch264_src.c @@ -2994,7 +2994,7 @@ error: } static GstCaps * -gst_uvc_h264_src_getcaps (GstPad * pad, GstObject * parent) +gst_uvc_h264_src_getcaps (GstPad * pad, GstObject * parent, GstQuery * query) { GstUvcH264Src *self = GST_UVC_H264_SRC (parent); GstCaps *template = NULL; @@ -3008,10 +3008,15 @@ gst_uvc_h264_src_getcaps (GstPad * pad, GstObject * parent) template = gst_caps_new_empty (); if (self->v4l2_src) { + GstCaps *filter; GstPad *v4l_pad = gst_element_get_static_pad (self->v4l2_src, "src"); GstCaps *v4l_caps = gst_pad_query_caps (v4l_pad, NULL); GstCaps *new_caps = gst_uvc_h264_src_transform_caps (self, v4l_caps); + gst_query_parse_caps (query, &filter); + v4l_caps = gst_pad_query_caps (v4l_pad, filter); + new_caps = gst_uvc_h264_src_transform_caps (self, v4l_caps); + result = gst_caps_intersect (new_caps, template); gst_object_unref (v4l_pad); gst_caps_unref (v4l_caps); @@ -3031,7 +3036,8 @@ gst_uvc_h264_src_query (GstPad * pad, GstObject * parent, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CAPS: - gst_query_set_caps_result (query, gst_uvc_h264_src_getcaps (pad, parent)); + gst_query_set_caps_result (query, + gst_uvc_h264_src_getcaps (pad, parent, query)); ret = TRUE; default: ret = gst_pad_query_default (pad, parent, query);