From 39a99d25872f64dacd470fda86ba2193a55cda52 Mon Sep 17 00:00:00 2001 From: Ilkka Ollakka Date: Sat, 23 Nov 2013 13:04:03 +0200 Subject: [PATCH] transcode: check if input has changed before sync check --- modules/stream_out/transcode/audio.c | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/stream_out/transcode/audio.c b/modules/stream_out/transcode/audio.c index 92a0218c38..874535c6a4 100644 --- a/modules/stream_out/transcode/audio.c +++ b/modules/stream_out/transcode/audio.c @@ -202,6 +202,23 @@ int transcode_audio_process( sout_stream_t *p_stream, while( (p_audio_buf = id->p_decoder->pf_decode_audio( id->p_decoder, &in )) ) { + /* Check if audio format has changed, and filters need reinit */ + if( unlikely( ( id->p_decoder->fmt_out.audio.i_rate != p_sys->fmt_audio.i_rate ) || + ( id->p_decoder->fmt_out.audio.i_physical_channels != p_sys->fmt_audio.i_physical_channels ) ) ) + { + msg_Info( p_stream, "Audio changed, trying to reinitialize filters" ); + if( id->p_af_chain != NULL ) + aout_FiltersDelete( (vlc_object_t *)NULL, id->p_af_chain ); + + /* decoders don't set audio.i_format, but audio filters use it */ + id->p_decoder->fmt_out.audio.i_format = id->p_decoder->fmt_out.i_codec; + aout_FormatPrepare( &id->p_decoder->fmt_out.audio ); + + if( transcode_audio_initialize_filters( p_stream, id, p_sys, &id->p_decoder->fmt_out.audio ) != VLC_SUCCESS ) + return VLC_EGENERIC; + + } + if( p_sys->b_master_sync ) { mtime_t i_pts = date_Get( &id->interpolated_pts ); @@ -226,23 +243,6 @@ int transcode_audio_process( sout_stream_t *p_stream, p_audio_buf->i_dts = p_audio_buf->i_pts; - /* Check if audio format has changed, and filters need reinit */ - if( unlikely( ( id->p_decoder->fmt_out.audio.i_rate != p_sys->fmt_audio.i_rate ) || - ( id->p_decoder->fmt_out.audio.i_physical_channels != p_sys->fmt_audio.i_physical_channels ) ) ) - { - msg_Info( p_stream, "Audio changed, trying to reinitialize filters" ); - if( id->p_af_chain != NULL ) - aout_FiltersDelete( (vlc_object_t *)NULL, id->p_af_chain ); - - /* decoders don't set audio.i_format, but audio filters use it */ - id->p_decoder->fmt_out.audio.i_format = id->p_decoder->fmt_out.i_codec; - aout_FormatPrepare( &id->p_decoder->fmt_out.audio ); - - if( transcode_audio_initialize_filters( p_stream, id, p_sys, &id->p_decoder->fmt_out.audio ) != VLC_SUCCESS ) - return VLC_EGENERIC; - - } - /* Run filter chain */ p_audio_buf = aout_FiltersPlay( id->p_af_chain, p_audio_buf, INPUT_RATE_DEFAULT ); -- 2.39.2