mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
ext/lame/gstlame.*: Fix leak (by calling lame_init_params() before lame_close()); handle
Original commit message from CVS: Based on patch by: Roland Kay <roland.kay at ox compsoc net> * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain), (gst_lame_setup): * ext/lame/gstlame.h: Fix leak (by calling lame_init_params() before lame_close()); handle NULL return from lame_init() more gracefully. Fixes #385311.
This commit is contained in:
parent
3f967e2e18
commit
90d92814d4
2 changed files with 32 additions and 0 deletions
|
@ -572,6 +572,11 @@ gst_lame_init (GstLame * lame)
|
|||
|
||||
/* create an encoder state so we can ask about defaults */
|
||||
lame->lgf = lame_init ();
|
||||
if (lame->lgf == NULL)
|
||||
goto init_error;
|
||||
|
||||
if (lame_init_params (lame->lgf) < 0)
|
||||
goto init_error;
|
||||
|
||||
lame->samplerate = 44100;
|
||||
lame->num_channels = 2;
|
||||
|
@ -623,6 +628,19 @@ gst_lame_init (GstLame * lame)
|
|||
lame->lgf = NULL;
|
||||
|
||||
GST_DEBUG_OBJECT (lame, "done initializing");
|
||||
lame->init_error = FALSE;
|
||||
return;
|
||||
|
||||
/* ERRORS */
|
||||
init_error:
|
||||
{
|
||||
GST_ERROR_OBJECT (lame, "error initializing");
|
||||
lame->init_error = TRUE;
|
||||
if (lame->lgf) {
|
||||
lame_close (lame->lgf);
|
||||
lame->lgf = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define CHECK_AND_FIXUP_BITRATE(obj,pspec,rate) \
|
||||
|
@ -974,6 +992,9 @@ gst_lame_chain (GstPad * pad, GstBuffer * buf)
|
|||
|
||||
GST_LOG_OBJECT (lame, "entered chain");
|
||||
|
||||
if (lame->init_error)
|
||||
goto init_error;
|
||||
|
||||
if (!lame->setup)
|
||||
goto not_setup;
|
||||
|
||||
|
@ -1062,6 +1083,12 @@ not_setup:
|
|||
("encoder not initialized (input is not audio?)"));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
init_error:
|
||||
{
|
||||
gst_buffer_unref (buf);
|
||||
GST_ELEMENT_ERROR (lame, LIBRARY, INIT, (NULL), (NULL));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* set up the encoder state */
|
||||
|
@ -1088,6 +1115,9 @@ gst_lame_setup (GstLame * lame)
|
|||
|
||||
lame->lgf = lame_init ();
|
||||
|
||||
if (lame->lgf == NULL)
|
||||
return FALSE;
|
||||
|
||||
/* let lame choose a default samplerate */
|
||||
lame_set_out_samplerate (lame->lgf, 0);
|
||||
|
||||
|
|
|
@ -53,6 +53,8 @@ struct _GstLame {
|
|||
/*< private >*/
|
||||
GstPad *srcpad, *sinkpad;
|
||||
|
||||
gboolean init_error; /* an error occured in the instance init function */
|
||||
|
||||
gint samplerate;
|
||||
gint num_channels;
|
||||
gboolean setup;
|
||||
|
|
Loading…
Reference in a new issue