Commit 39a99d25 authored by Ilkka Ollakka's avatar Ilkka Ollakka

transcode: check if input has changed before sync check

parent 7e251ae7
...@@ -202,6 +202,23 @@ int transcode_audio_process( sout_stream_t *p_stream, ...@@ -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, while( (p_audio_buf = id->p_decoder->pf_decode_audio( id->p_decoder,
&in )) ) &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 ) if( p_sys->b_master_sync )
{ {
mtime_t i_pts = date_Get( &id->interpolated_pts ); mtime_t i_pts = date_Get( &id->interpolated_pts );
...@@ -226,23 +243,6 @@ int transcode_audio_process( sout_stream_t *p_stream, ...@@ -226,23 +243,6 @@ int transcode_audio_process( sout_stream_t *p_stream,
p_audio_buf->i_dts = p_audio_buf->i_pts; 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 */ /* Run filter chain */
p_audio_buf = aout_FiltersPlay( id->p_af_chain, p_audio_buf, p_audio_buf = aout_FiltersPlay( id->p_af_chain, p_audio_buf,
INPUT_RATE_DEFAULT ); INPUT_RATE_DEFAULT );
......
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