[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