From: Guillaume Desmottes Date: Wed, 15 Apr 2015 13:22:37 +0000 (+0200) Subject: glmixer: fix caps leak in gst_gl_mixer_pad_sink_getcaps() X-Git-Tag: 1.19.3~511^2~1989^2~935 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e6c5410a2a6bc99a82dc63367677649f40bb6c79;p=platform%2Fupstream%2Fgstreamer.git glmixer: fix caps leak in gst_gl_mixer_pad_sink_getcaps() Caps refcounting was all wrong in this function. Rewrote it and add some comments to make it clearer. Fix caps leaks with the validate.file.glvideomixer.simple.play_15s.synchronized scenario. https://bugzilla.gnome.org/show_bug.cgi?id=747915 Signed-off-by: Guillaume Desmottes --- diff --git a/ext/gl/gstglmixer.c b/ext/gl/gstglmixer.c index ab667a8..96d6e2a 100644 --- a/ext/gl/gstglmixer.c +++ b/ext/gl/gstglmixer.c @@ -213,27 +213,27 @@ gst_gl_mixer_pad_sink_getcaps (GstPad * pad, GstGLMixer * mix, GstCaps * filter) GstCaps *template_caps; GstCaps *filtered_caps; GstCaps *returned_caps; - gboolean had_current_caps = TRUE; template_caps = gst_pad_get_pad_template_caps (pad); sinkcaps = gst_pad_get_current_caps (pad); if (sinkcaps == NULL) { - had_current_caps = FALSE; - sinkcaps = template_caps; + sinkcaps = gst_caps_ref (template_caps); } else { - sinkcaps = gst_caps_merge (sinkcaps, template_caps); + sinkcaps = gst_caps_merge (sinkcaps, gst_caps_ref (template_caps)); } - filtered_caps = sinkcaps; - if (filter) + if (filter) { filtered_caps = gst_caps_intersect (sinkcaps, filter); + gst_caps_unref (sinkcaps); + } else { + filtered_caps = sinkcaps; /* pass ownership */ + } + returned_caps = gst_caps_intersect (filtered_caps, template_caps); - if (filter) - gst_caps_unref (filtered_caps); - if (had_current_caps) - gst_caps_unref (template_caps); + gst_caps_unref (template_caps); + gst_caps_unref (filtered_caps); GST_DEBUG_OBJECT (pad, "returning %" GST_PTR_FORMAT, returned_caps);