]> git.sesse.net Git - vlc/commitdiff
* src/audio_ouput/input.c: better on-the-fly switching of audio filters.
authorGildas Bazin <gbazin@videolan.org>
Mon, 10 May 2004 12:21:29 +0000 (12:21 +0000)
committerGildas Bazin <gbazin@videolan.org>
Mon, 10 May 2004 12:21:29 +0000 (12:21 +0000)
src/audio_output/common.c
src/audio_output/input.c
src/audio_output/mixer.c

index 6c3e633cf5fd4295b7b07f04839eea4481c0dd67..96a4366c6d8b78f19cfea8a64e0a6f388b26ae36 100644 (file)
@@ -2,7 +2,7 @@
  * common.c : audio output management of common data structures
  *****************************************************************************
  * Copyright (C) 2002-2004 VideoLAN
- * $Id: common.c,v 1.19 2004/01/06 12:02:05 zorglub Exp $
+ * $Id$
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -401,6 +401,9 @@ void aout_FifoDestroy( aout_instance_t * p_aout, aout_fifo_t * p_fifo )
         aout_BufferFree( p_buffer );
         p_buffer = p_next;
     }
+
+    p_fifo->p_first = NULL;
+    p_fifo->pp_last = &p_fifo->p_first;
 }
 
 
index fb530b505770ed06ca41a091cf200d5db0cc3acc..6c80db1ada7ed07c5dda2b41d3da7178d730c5e3 100644 (file)
@@ -308,9 +308,21 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input,
 
     if( p_input->b_restart )
     {
+        aout_fifo_t fifo, dummy_fifo;
+        int p_first_byte_to_mix;
+
         vlc_mutex_lock( &p_aout->mixer_lock );
+
+        /* A little trick to avoid loosing our input fifo */
+        aout_FifoInit( p_aout, &dummy_fifo, p_aout->mixer.mixer.i_rate );
+        p_first_byte_to_mix = p_input->p_first_byte_to_mix;
+        fifo = p_input->fifo;
+        p_input->fifo = dummy_fifo;
         aout_InputDelete( p_aout, p_input );
         aout_InputNew( p_aout, p_input );
+        p_input->p_first_byte_to_mix = p_first_byte_to_mix;
+        p_input->fifo = fifo;
+
         vlc_mutex_unlock( &p_aout->mixer_lock );
     }
 
index 315cf44babc52475638e3c9bdca1cc6dd9a87a2f..f7431a1bf772b8a4ee63bc2fd169b96bc15f9f07 100644 (file)
@@ -2,7 +2,7 @@
  * mixer.c : audio output mixing operations
  *****************************************************************************
  * Copyright (C) 2002-2004 VideoLAN
- * $Id: mixer.c,v 1.30 2004/03/03 20:39:52 gbazin Exp $
+ * $Id$
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -261,16 +261,14 @@ static int MixBuffer( aout_instance_t * p_aout )
             {
                 p_input->p_first_byte_to_mix = p_buffer->p_buffer;
             }
-            mixer_nb_bytes = p_input->p_first_byte_to_mix
-                              - p_buffer->p_buffer;
+            mixer_nb_bytes = p_input->p_first_byte_to_mix - p_buffer->p_buffer;
 
             if ( !((i_nb_bytes + p_aout->mixer.mixer.i_bytes_per_frame
                      > mixer_nb_bytes) &&
                    (i_nb_bytes < p_aout->mixer.mixer.i_bytes_per_frame
                      + mixer_nb_bytes)) )
             {
-                msg_Warn( p_aout,
-                          "mixer start isn't output start ("I64Fd")",
+                msg_Warn( p_aout, "mixer start isn't output start ("I64Fd")",
                           i_nb_bytes - mixer_nb_bytes );
 
                 /* Round to the nearest multiple */