[vlc-commits] transcode: check if input has changed before sync check
Ilkka Ollakka
git at videolan.org
Sat Apr 19 10:32:08 CEST 2014
vlc/vlc-2.1 | branch: master | Ilkka Ollakka <ileoo at videolan.org> | Sat Nov 23 13:04:03 2013 +0200| [feca6658b4b84b4bc8b7a08431e811813277d31b] | committer: Rafaël Carré
transcode: check if input has changed before sync check
(cherry picked from commit 39a99d25872f64dacd470fda86ba2193a55cda52)
Signed-off-by: Rafaël Carré <funman at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=feca6658b4b84b4bc8b7a08431e811813277d31b
---
modules/stream_out/transcode/audio.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/modules/stream_out/transcode/audio.c b/modules/stream_out/transcode/audio.c
index f3fc3b6..83e9556 100644
--- a/modules/stream_out/transcode/audio.c
+++ b/modules/stream_out/transcode/audio.c
@@ -221,6 +221,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 ) + 1;
More information about the vlc-commits
mailing list