From: Ilkka Ollakka Date: Wed, 22 Sep 2010 09:48:41 +0000 (+0300) Subject: transcode: destroy spu on transcode_spu_close X-Git-Tag: 1.2.0-pre1~5240 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=41b8c2e1f660c767ee7a96ab69204b94b1470ca8;p=vlc transcode: destroy spu on transcode_spu_close Fixes issue for me when doing transcode{}:gather: --sout-keep and subtitle overlaying from dvbs. Otherwise keeps last subtitles on video if new channel doesn't contain dvbs track. also consistenty as spu_Create is called on transcode_spu_new() --- diff --git a/modules/stream_out/transcode/spu.c b/modules/stream_out/transcode/spu.c index 85f45d3238..3f1540bbd3 100644 --- a/modules/stream_out/transcode/spu.c +++ b/modules/stream_out/transcode/spu.c @@ -99,8 +99,9 @@ int transcode_spu_new( sout_stream_t *p_stream, sout_stream_id_t *id ) return VLC_SUCCESS; } -void transcode_spu_close( sout_stream_id_t *id) +void transcode_spu_close( sout_stream_t *p_stream, sout_stream_id_t *id) { + sout_stream_sys_t *p_sys = p_stream->p_sys; /* Close decoder */ if( id->p_decoder->p_module ) module_unneed( id->p_decoder, id->p_decoder->p_module ); @@ -110,6 +111,12 @@ void transcode_spu_close( sout_stream_id_t *id) /* Close encoder */ if( id->p_encoder->p_module ) module_unneed( id->p_encoder, id->p_encoder->p_module ); + + if( p_sys->p_spu ) + { + spu_Destroy( p_sys->p_spu ); + p_sys->p_spu = NULL; + } } int transcode_spu_process( sout_stream_t *p_stream, @@ -179,7 +186,7 @@ bool transcode_spu_add( sout_stream_t *p_stream, es_format_t *p_fmt, if( !id->id ) { - transcode_spu_close( id ); + transcode_spu_close( p_stream, id ); return false; } } diff --git a/modules/stream_out/transcode/transcode.c b/modules/stream_out/transcode/transcode.c index 6db76ca5cd..fd5fad2db9 100644 --- a/modules/stream_out/transcode/transcode.c +++ b/modules/stream_out/transcode/transcode.c @@ -616,7 +616,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id ) if( p_sys->b_osd ) transcode_osd_close( p_stream, id ); else - transcode_spu_close( id ); + transcode_spu_close( p_stream, id ); break; } } diff --git a/modules/stream_out/transcode/transcode.h b/modules/stream_out/transcode/transcode.h index 23f9ab75e6..cde007298f 100644 --- a/modules/stream_out/transcode/transcode.h +++ b/modules/stream_out/transcode/transcode.h @@ -107,7 +107,7 @@ bool transcode_osd_add ( sout_stream_t *, es_format_t *, sout_stream_id_t *); /* SPU */ int transcode_spu_new ( sout_stream_t *, sout_stream_id_t * ); -void transcode_spu_close ( sout_stream_id_t * ); +void transcode_spu_close ( sout_stream_t *, sout_stream_id_t * ); int transcode_spu_process( sout_stream_t *, sout_stream_id_t *, block_t *, block_t ** ); bool transcode_spu_add ( sout_stream_t *, es_format_t *, sout_stream_id_t *);