From fe0e51914afe5ee63b8c82bb72d4c99f96c7152b Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Wed, 4 Jan 2017 11:21:51 -0300 Subject: [PATCH] encodebin: Fix stream_group_free when creating it went bad Avoiding trying to use NULL pointers --- gst/encoding/gstencodebin.c | 38 ++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/gst/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c index fc698c1479..e8319948e7 100644 --- a/gst/encoding/gstencodebin.c +++ b/gst/encoding/gstencodebin.c @@ -2032,23 +2032,24 @@ stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup) if (sgroup->restriction_sid != 0) g_signal_handler_disconnect (sgroup->profile, sgroup->restriction_sid); - if (ebin->muxer) { - /* outqueue - Muxer */ - tmppad = gst_element_get_static_pad (sgroup->outqueue, "src"); - pad = gst_pad_get_peer (tmppad); + if (sgroup->outqueue) { + if (ebin->muxer) { + /* outqueue - Muxer */ + tmppad = gst_element_get_static_pad (sgroup->outqueue, "src"); + pad = gst_pad_get_peer (tmppad); - if (pad) { - /* Remove muxer request sink pad */ - gst_pad_unlink (tmppad, pad); - if (GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad)) == - GST_PAD_REQUEST) - gst_element_release_request_pad (ebin->muxer, pad); - gst_object_unref (pad); + if (pad) { + /* Remove muxer request sink pad */ + gst_pad_unlink (tmppad, pad); + if (GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad)) == + GST_PAD_REQUEST) + gst_element_release_request_pad (ebin->muxer, pad); + gst_object_unref (pad); + } + gst_object_unref (tmppad); } - gst_object_unref (tmppad); - } - if (sgroup->outqueue) gst_element_set_state (sgroup->outqueue, GST_STATE_NULL); + } if (sgroup->formatter) { /* capsfilter - formatter - outqueue */ @@ -2056,13 +2057,16 @@ stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup) gst_element_set_state (sgroup->outfilter, GST_STATE_NULL); gst_element_unlink (sgroup->formatter, sgroup->outqueue); gst_element_unlink (sgroup->outfilter, sgroup->formatter); - } else { + } else if (sgroup->outfilter) { /* Capsfilter - outqueue */ gst_element_set_state (sgroup->outfilter, GST_STATE_NULL); gst_element_unlink (sgroup->outfilter, sgroup->outqueue); } - gst_element_set_state (sgroup->outqueue, GST_STATE_NULL); - gst_bin_remove (GST_BIN (ebin), sgroup->outqueue); + + if (sgroup->outqueue) { + gst_element_set_state (sgroup->outqueue, GST_STATE_NULL); + gst_bin_remove (GST_BIN (ebin), sgroup->outqueue); + } /* streamcombiner - parser - capsfilter */ if (sgroup->parser) {