Commit f8c5996f authored by Gildas Bazin's avatar Gildas Bazin

* modules/stream_out/transcode.c, src/input/decoder.c, src/input/control.c:...

* modules/stream_out/transcode.c, src/input/decoder.c, src/input/control.c: fixed a bunch of memory leaks. Patch courtesy of Wallace Wadge (wwadge at gmail) + modifications by me.
parent 9da70ef6
...@@ -849,7 +849,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -849,7 +849,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->p_encoder->fmt_out ); id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->p_encoder->fmt_out );
id->b_transcode = VLC_TRUE; id->b_transcode = VLC_TRUE;
if( !id->id ) goto error; if( !id->id )
{
transcode_audio_close( p_stream, id );
goto error;
}
date_Init( &id->interpolated_pts, p_fmt->audio.i_rate, 1 ); date_Init( &id->interpolated_pts, p_fmt->audio.i_rate, 1 );
} }
...@@ -904,7 +908,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -904,7 +908,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->p_encoder->fmt_out ); id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->p_encoder->fmt_out );
id->b_transcode = VLC_TRUE; id->b_transcode = VLC_TRUE;
if( !id->id ) goto error; if( !id->id )
{
transcode_spu_close( p_stream, id );
goto error;
}
} }
else if( p_fmt->i_cat == SPU_ES && p_sys->b_soverlay ) else if( p_fmt->i_cat == SPU_ES && p_sys->b_soverlay )
{ {
...@@ -955,6 +963,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -955,6 +963,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
if( id->p_encoder ) if( id->p_encoder )
{ {
vlc_object_detach( id->p_encoder ); vlc_object_detach( id->p_encoder );
es_format_Clean( &id->p_encoder->fmt_out );
vlc_object_destroy( id->p_encoder ); vlc_object_destroy( id->p_encoder );
} }
...@@ -996,6 +1005,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id ) ...@@ -996,6 +1005,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
if( id->p_encoder ) if( id->p_encoder )
{ {
vlc_object_detach( id->p_encoder ); vlc_object_detach( id->p_encoder );
es_format_Clean( &id->p_encoder->fmt_out );
vlc_object_destroy( id->p_encoder ); vlc_object_destroy( id->p_encoder );
} }
......
...@@ -196,6 +196,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) ...@@ -196,6 +196,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
NotifyPlaylist( p_input ); NotifyPlaylist( p_input );
} }
return VLC_SUCCESS; return VLC_SUCCESS;
case INPUT_DEL_INFO: case INPUT_DEL_INFO:
{ {
char *psz_cat = (char *)va_arg( args, char * ); char *psz_cat = (char *)va_arg( args, char * );
...@@ -224,6 +225,10 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args ) ...@@ -224,6 +225,10 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
{ {
if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) ) if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )
{ {
free( p_cat->pp_infos[i]->psz_name );
if( p_cat->pp_infos[i]->psz_value )
free( p_cat->pp_infos[i]->psz_value );
free( p_cat->pp_infos[i] );
REMOVE_ELEM( p_cat->pp_infos, p_cat->i_infos, i ); REMOVE_ELEM( p_cat->pp_infos, p_cat->i_infos, i );
break; break;
} }
......
...@@ -537,6 +537,8 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block ) ...@@ -537,6 +537,8 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
p_dec->p_owner->sout.i_id = p_dec->fmt_in.i_id; p_dec->p_owner->sout.i_id = p_dec->fmt_in.i_id;
if( p_dec->fmt_in.psz_language ) if( p_dec->fmt_in.psz_language )
{ {
if( p_dec->p_owner->sout.psz_language )
free( p_dec->p_owner->sout.psz_language );
p_dec->p_owner->sout.psz_language = p_dec->p_owner->sout.psz_language =
strdup( p_dec->fmt_in.psz_language ); strdup( p_dec->fmt_in.psz_language );
} }
...@@ -547,7 +549,8 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block ) ...@@ -547,7 +549,8 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
if( p_dec->p_owner->p_sout_input == NULL ) if( p_dec->p_owner->p_sout_input == NULL )
{ {
msg_Err( p_dec, "cannot create packetizer output" ); msg_Err( p_dec, "cannot create packetizer output (%4.4s)",
(char *)&p_dec->p_owner->sout.i_codec );
p_dec->b_error = VLC_TRUE; p_dec->b_error = VLC_TRUE;
while( p_sout_block ) while( p_sout_block )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment