Simplify gst_vaapidecode_set_caps() and fix memory leak.

This commit is contained in:
gb 2010-05-11 16:09:49 +00:00 committed by Gwenole Beauchesne
parent 6f5e593abd
commit 710ab89fca

View file

@ -334,19 +334,17 @@ static gboolean
gst_vaapidecode_set_caps(GstPad *pad, GstCaps *caps)
{
GstVaapiDecode * const decode = GST_VAAPIDECODE(GST_OBJECT_PARENT(pad));
GstPad *other_pad;
GstCaps *other_caps = NULL;
GstStructure *structure;
const GValue *v_width, *v_height, *v_framerate, *v_par;
gboolean success;
g_return_val_if_fail(pad == decode->sinkpad, FALSE);
decode->decoder_caps = gst_caps_ref(caps);
if (pad == decode->sinkpad) {
other_pad = decode->srcpad;
other_caps = gst_caps_from_string(gst_vaapidecode_src_caps_str);
}
else {
other_pad = decode->sinkpad;
other_caps = gst_caps_from_string(gst_vaapidecode_sink_caps_str);
}
if (!other_caps)
return FALSE;
/* Negotiation succeeded, so now configure ourselves */
structure = gst_caps_get_structure(caps, 0);
@ -355,9 +353,6 @@ gst_vaapidecode_set_caps(GstPad *pad, GstCaps *caps)
v_framerate = gst_structure_get_value(structure, "framerate");
v_par = gst_structure_get_value(structure, "pixel-aspect-ratio");
if (pad == decode->sinkpad)
decode->decoder_caps = gst_caps_ref(caps);
structure = gst_caps_get_structure(other_caps, 0);
gst_structure_set_value(structure, "width", v_width);
gst_structure_set_value(structure, "height", v_height);
@ -366,7 +361,9 @@ gst_vaapidecode_set_caps(GstPad *pad, GstCaps *caps)
if (v_par)
gst_structure_set_value(structure, "pixel-aspect-ratio", v_par);
return gst_pad_set_caps(other_pad, other_caps);
success = gst_pad_set_caps(decode->srcpad, other_caps);
gst_caps_unref(other_caps);
return success;
}
static GstFlowReturn