From 6cb77d0c7f21520287fb777fae44f76ce06db372 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Tue, 10 Apr 2012 17:22:44 +0200 Subject: [PATCH] opusdec: tweak caps negotiation ... so as to avoid leaking caps or manipulating NULL caps. --- ext/opus/gstopusdec.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c index 829d029e09..a21b1878bc 100644 --- a/ext/opus/gstopusdec.c +++ b/ext/opus/gstopusdec.c @@ -214,14 +214,18 @@ gst_opus_dec_negotiate (GstOpusDec * dec, const GstAudioChannelPosition * pos) GstStructure *s; GstAudioInfo info; - caps = gst_caps_truncate (caps); - - caps = gst_caps_make_writable (caps); - s = gst_caps_get_structure (caps, 0); - gst_structure_fixate_field_nearest_int (s, "rate", 48000); - gst_structure_get_int (s, "rate", &dec->sample_rate); - gst_structure_fixate_field_nearest_int (s, "channels", dec->n_channels); - gst_structure_get_int (s, "channels", &dec->n_channels); + if (caps) { + caps = gst_caps_truncate (caps); + caps = gst_caps_make_writable (caps); + s = gst_caps_get_structure (caps, 0); + gst_structure_fixate_field_nearest_int (s, "rate", 48000); + gst_structure_get_int (s, "rate", &dec->sample_rate); + gst_structure_fixate_field_nearest_int (s, "channels", dec->n_channels); + gst_structure_get_int (s, "channels", &dec->n_channels); + gst_caps_unref (caps); + } else { + dec->sample_rate = 48000; + } GST_INFO_OBJECT (dec, "Negotiated %d channels, %d Hz", dec->n_channels, dec->sample_rate);