]> git.sesse.net Git - vlc/commitdiff
HUGE cleanings in audio output:
authorCyril Deguet <asmax@videolan.org>
Mon, 14 Jan 2002 12:15:10 +0000 (12:15 +0000)
committerCyril Deguet <asmax@videolan.org>
Mon, 14 Jan 2002 12:15:10 +0000 (12:15 +0000)
- removed AOUT_INTF_*_FIFO, which where not used
- factorized S16StereoPlay, U8MonoPlay, and so on.., in a single
  function aout_FillBuffer (in aout_common.c)
  (unsigned 8bit may be broken, but I have no stream to test with :(

- last step to be done: factorize aout_s8, aout_s16, ... thanks to a macro

Makefile
include/audio_output.h
src/audio_output/aout_common.c [new file with mode: 0644]
src/audio_output/aout_common.h
src/audio_output/aout_ext-dec.c
src/audio_output/aout_s16.c
src/audio_output/aout_s8.c
src/audio_output/aout_u16.c
src/audio_output/aout_u8.c
src/audio_output/audio_output.c

index 1ff8bced7c37434527786d6e740281baa2d60c9e..0b660f357bd4d3952581984ae07b849b247e6d45 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -126,7 +126,7 @@ PLUGINS_TARGETS := ac3_adec/ac3_adec \
 INTERFACE := main interface intf_msg intf_playlist intf_eject
 INPUT := input input_ext-dec input_ext-intf input_dec input_programs input_clock mpeg_system
 VIDEO_OUTPUT := video_output video_text vout_pictures vout_subpictures
-AUDIO_OUTPUT := audio_output aout_ext-dec aout_u8 aout_s8 aout_u16 aout_s16 aout_spdif
+AUDIO_OUTPUT := audio_output aout_common aout_ext-dec aout_u8 aout_s8 aout_u16 aout_s16 aout_spdif
 MISC := mtime modules netutils iso_lang
 
 C_OBJ :=       $(INTERFACE:%=src/interface/%.o) \
index acc0b0b7e96a7511860c3443e34ef8eabecf4867..be1f5bf2f3f207775a6276a673647056dd1d8276 100644 (file)
@@ -2,7 +2,7 @@
  * audio_output.h : audio output thread interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: audio_output.h,v 1.40 2002/01/09 00:33:37 asmax Exp $
+ * $Id: audio_output.h,v 1.41 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *          Cyril Deguet <asmax@via.ecp.fr>
@@ -120,11 +120,9 @@ typedef struct aout_fifo_s
   ( ((((fifo).l_end_frame + 1) - (fifo).l_start_frame) & AOUT_FIFO_SIZE) == 0 )
 
 #define AOUT_EMPTY_FIFO         0
-#define AOUT_INTF_MONO_FIFO     1
-#define AOUT_INTF_STEREO_FIFO   2
-#define AOUT_ADEC_MONO_FIFO     3
-#define AOUT_ADEC_STEREO_FIFO   4
-#define AOUT_ADEC_SPDIF_FIFO    5
+#define AOUT_ADEC_MONO_FIFO     1
+#define AOUT_ADEC_STEREO_FIFO   2
+#define AOUT_ADEC_SPDIF_FIFO    3
 
 /*****************************************************************************
  * aout_thread_t : audio output thread descriptor
diff --git a/src/audio_output/aout_common.c b/src/audio_output/aout_common.c
new file mode 100644 (file)
index 0000000..75a9882
--- /dev/null
@@ -0,0 +1,122 @@
+/*****************************************************************************
+ * aout_common.c: generic audio output functions
+ *****************************************************************************
+ * Copyright (C) 1999-2002 VideoLAN
+ * $Id
+ *
+ * Authors: Michel Kaempf <maxx@via.ecp.fr>
+ *          Cyril Deguet <asmax@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdio.h>                                           /* "intf_msg.h" */
+#include <stdlib.h>                            /* calloc(), malloc(), free() */
+#include <string.h>
+
+#include <videolan/vlc.h>
+
+#include "audio_output.h"
+#include "aout_common.h"
+
+/*****************************************************************************
+ * Functions
+ *****************************************************************************/
+
+/* Read data from decoder fifo, and put it in S32_buffer */
+void aout_FillBuffer( aout_thread_t * p_aout, aout_fifo_t * p_fifo )
+{
+    long l_buffer = 0;
+    long l_buffer_limit, l_units;
+
+    switch ( p_fifo->i_type )
+    {
+    case AOUT_EMPTY_FIFO:
+
+        break;
+
+    case AOUT_ADEC_MONO_FIFO:
+    case AOUT_ADEC_STEREO_FIFO:
+
+        l_units = p_aout->l_units;
+        while ( l_units > 0 )
+        {
+            if( !p_fifo->b_next_frame )
+            {
+                if( NextFrame(p_aout, p_fifo, p_aout->date + 
+                        ((((mtime_t)(l_buffer >> 1)) * 1000000) / 
+                        ((mtime_t)p_aout->l_rate))) )
+                {
+                    break;
+                }
+            }
+            l_buffer_limit = p_aout->l_units << p_aout->b_stereo;
+
+            while ( l_buffer < l_buffer_limit )
+            {
+                if( p_aout->b_stereo )
+                {
+                    p_aout->s32_buffer[l_buffer++] +=
+                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
+                    p_aout->s32_buffer[l_buffer++] +=
+                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
+                }
+                else
+                {
+                    p_aout->s32_buffer[l_buffer++] +=
+                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
+                }
+
+                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
+                if( p_fifo->l_unit >= ((AOUT_FIFO_SIZE + 1) * 
+                        (p_fifo->l_frame_size >> p_fifo->b_stereo)) )
+                {
+                    p_fifo->l_unit -= ((AOUT_FIFO_SIZE + 1) * 
+                            (p_fifo->l_frame_size >> p_fifo->b_stereo));
+                }
+            }
+            if ( p_fifo->l_units > l_units )
+            {
+                p_fifo->l_units -= l_units;
+                break;
+            }
+            else /* p_fifo->l_units <= l_units */
+            {
+                l_units -= p_fifo->l_units;
+
+                vlc_mutex_lock( &p_fifo->data_lock );
+                p_fifo->l_start_frame = p_fifo->l_next_frame;
+                vlc_cond_signal( &p_fifo->data_wait );
+                vlc_mutex_unlock( &p_fifo->data_lock );
+
+                /* p_fifo->b_start_frame = 1; */
+                p_fifo->l_next_frame += 1;
+                p_fifo->l_next_frame &= AOUT_FIFO_SIZE;
+                p_fifo->b_next_frame = 0;
+            }
+        }
+        break;
+
+    default:
+
+        intf_DbgMsg("aout debug: unknown fifo type (%i)", p_fifo->i_type);
+        break;
+    }
+}
+
index a701f28a67470f5f7d8bc282f900fb12c6ade164..b04ac36437593a325b68a22ab4d38ea1f9956b9b 100644 (file)
@@ -2,9 +2,10 @@
  * aout_common.h: audio output inner functions
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: aout_common.h,v 1.6 2001/11/07 22:58:13 jlj Exp $
+ * $Id: aout_common.h,v 1.7 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
+ *          Cyril Deguet <asmax@via.ecp.fr>   
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 /* Creating as many aout_Thread functions as configurations was one solution,
  * examining the different cases in the Thread loop of an unique function was
  * another. I chose the first solution. */
-void aout_U8MonoThread        ( aout_thread_t * p_aout );
-void aout_U8StereoThread      ( aout_thread_t * p_aout );
-void aout_S8MonoThread        ( aout_thread_t * p_aout );
-void aout_S8StereoThread      ( aout_thread_t * p_aout );
-void aout_U16MonoThread       ( aout_thread_t * p_aout );
-void aout_U16StereoThread     ( aout_thread_t * p_aout );
-void aout_S16MonoThread       ( aout_thread_t * p_aout );
-void aout_S16StereoThread     ( aout_thread_t * p_aout );
+void aout_U8Thread            ( aout_thread_t * p_aout );
+void aout_S8Thread            ( aout_thread_t * p_aout );
+void aout_U16Thread           ( aout_thread_t * p_aout );
+void aout_S16Thread           ( aout_thread_t * p_aout );
 void aout_SpdifThread         ( aout_thread_t * p_aout );
+void aout_FillBuffer          ( aout_thread_t * p_aout, aout_fifo_t * p_fifo );
+
 
 #define UPDATE_INCREMENT( increment, integer ) \
     if ( ((increment).l_remainder += (increment).l_euclidean_remainder) >= 0 )\
index d73061addc00d04ed4129099dc641fd7fdf1f9ef..5d217ff82ebdcc651867378514999b1a99fef2c3 100644 (file)
@@ -2,7 +2,7 @@
  * aout_ext-dec.c : exported fifo management functions
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: aout_ext-dec.c,v 1.9 2002/01/09 00:33:37 asmax Exp $
+ * $Id: aout_ext-dec.c,v 1.10 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *          Cyril Deguet <asmax@via.ecp.fr>
@@ -114,22 +114,6 @@ aout_fifo_t * aout_CreateFifo( int i_type, int i_channels, long l_rate,
     /* Initialize the new fifo structure */
     switch ( p_aout->fifo[i_fifo].i_type = i_type )
     {
-        case AOUT_INTF_MONO_FIFO:
-        case AOUT_INTF_STEREO_FIFO:
-            p_aout->fifo[i_fifo].b_die = 0;
-
-            p_aout->fifo[i_fifo].i_channels = i_channels;
-            p_aout->fifo[i_fifo].b_stereo = ( i_channels == 2 );
-            p_aout->fifo[i_fifo].l_rate = l_rate;
-
-            p_aout->fifo[i_fifo].buffer = p_buffer;
-
-            p_aout->fifo[i_fifo].l_unit = 0;
-            InitializeIncrement( &p_aout->fifo[i_fifo].unit_increment,
-                                 l_rate, p_aout->l_rate );
-            p_aout->fifo[i_fifo].l_units = l_units;
-            break;
-
         case AOUT_ADEC_MONO_FIFO:
         case AOUT_ADEC_STEREO_FIFO:
         case AOUT_ADEC_SPDIF_FIFO:
@@ -225,14 +209,6 @@ void aout_FreeFifo( aout_fifo_t * p_fifo )
 
             break;
 
-        case AOUT_INTF_MONO_FIFO:
-        case AOUT_INTF_STEREO_FIFO:
-
-            free( p_fifo->buffer );
-            p_fifo->i_type = AOUT_EMPTY_FIFO;
-
-            break;
-
         case AOUT_ADEC_MONO_FIFO:
         case AOUT_ADEC_STEREO_FIFO:
         case AOUT_ADEC_SPDIF_FIFO:
index af1552c5ce24d7bc14e6a30da38f28c58277861d..1bc69c96aa5183cda2aa524fcc5b10f3967505c4 100644 (file)
@@ -2,8 +2,10 @@
  * aout_s16.c: 16 bit signed audio output functions
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
+ * $Id
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
+ *          Cyril Deguet <asmax@via.ecp.fr>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include "audio_output.h"
 #include "aout_common.h"
 
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-static void S16Play( aout_thread_t * p_aout, aout_fifo_t * p_fifo );
-
 /*****************************************************************************
  * Functions
  *****************************************************************************/
-void aout_S16MonoThread( aout_thread_t * p_aout )
-{
-    int  i_fifo;
-    long l_buffer, l_buffer_limit, l_bytes;
-
-    /* As the s32_buffer was created with calloc(), we don't have to set this
-     * memory to zero and we can immediately jump into the thread's loop */
-    while ( ! p_aout->b_die )
-    {
-        vlc_mutex_lock( &p_aout->fifos_lock );
-
-        for ( i_fifo = 0; i_fifo < AOUT_MAX_FIFOS; i_fifo++ )
-        {
-            if( p_aout->fifo[i_fifo].b_die )
-            {
-                aout_FreeFifo( &p_aout->fifo[i_fifo] );
-            }
-            else
-            {
-                S16Play( p_aout, &p_aout->fifo[i_fifo] );
-            }
-        }
-
-        vlc_mutex_unlock( &p_aout->fifos_lock );
-
-        l_buffer_limit = p_aout->l_units; /* p_aout->b_stereo == 0 */
-
-        for ( l_buffer = 0; l_buffer < l_buffer_limit; l_buffer++ )
-        {
-            ((s16 *)p_aout->buffer)[l_buffer] =
-                     (s16)( ( p_aout->s32_buffer[l_buffer] / AOUT_MAX_FIFOS )
-                            * p_aout->i_volume / 256 ) ;
-            p_aout->s32_buffer[l_buffer] = 0;
-        }
-
-        l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit );
-
-        /* sizeof(s16) << (p_aout->b_stereo) == 2 */
-        p_aout->date = mdate() + ((((mtime_t)((l_bytes + 2 * p_aout->i_latency) / 2)) * 1000000)
-                                   / ((mtime_t)p_aout->l_rate))
-                        + p_main->i_desync;
-        p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer,
-                         l_buffer_limit * sizeof(s16) );
-
-        if ( l_bytes > (l_buffer_limit * sizeof(s16)) )
-        {
-            msleep( p_aout->l_msleep );
-        }
-    }
-
-    vlc_mutex_lock( &p_aout->fifos_lock );
-
-    for ( i_fifo = 0; i_fifo < AOUT_MAX_FIFOS; i_fifo++ )
-    {
-        aout_FreeFifo( &p_aout->fifo[i_fifo] );
-    }
-
-    vlc_mutex_unlock( &p_aout->fifos_lock );
 
-}
-
-void aout_S16StereoThread( aout_thread_t * p_aout )
+void aout_S16Thread( aout_thread_t * p_aout )
 {
     int  i_fifo;
     long l_buffer, l_buffer_limit, l_bytes;
@@ -120,13 +57,13 @@ void aout_S16StereoThread( aout_thread_t * p_aout )
             }
             else
             {
-                S16Play( p_aout, &p_aout->fifo[i_fifo] );
+                aout_FillBuffer( p_aout, &p_aout->fifo[i_fifo] );
             }
         }
 
         vlc_mutex_unlock( &p_aout->fifos_lock );
 
-        l_buffer_limit = p_aout->l_units << 1; /* p_aout->b_stereo == 1 */
+        l_buffer_limit = p_aout->l_units <<  p_aout->b_stereo;
 
         for ( l_buffer = 0; l_buffer < l_buffer_limit; l_buffer++ )
         {
@@ -138,10 +75,10 @@ void aout_S16StereoThread( aout_thread_t * p_aout )
 
         l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit );
 
-        /* sizeof(s16) << (p_aout->b_stereo) == 4 */
-        p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 4)) * 1000000)
-                                   / ((mtime_t)p_aout->l_rate))
-                        + p_main->i_desync;
+        p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 
+                (sizeof(s16) << p_aout->b_stereo))) * 1000000) / 
+                ((mtime_t)p_aout->l_rate)) + p_main->i_desync;
+                
         p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer,
                          l_buffer_limit * sizeof(s16) );
 
@@ -161,146 +98,3 @@ void aout_S16StereoThread( aout_thread_t * p_aout )
     vlc_mutex_unlock( &p_aout->fifos_lock );
 }
 
-/* Following functions are local */
-
-static void S16Play( aout_thread_t * p_aout, aout_fifo_t * p_fifo )
-{
-    long l_buffer = 0;
-    long l_buffer_limit, l_units;
-
-    switch ( p_fifo->i_type )
-    {
-    case AOUT_EMPTY_FIFO:
-
-        break;
-
-    case AOUT_INTF_MONO_FIFO:
-
-        if ( p_fifo->l_units > p_aout->l_units )
-        {
-            /* p_aout->b_stereo == 1 */
-            while ( l_buffer < (p_aout->l_units << 1) )
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            p_fifo->l_units -= p_aout->l_units;
-        }
-        else /* p_fifo->l_units <= p_aout->l_units */
-        {
-            /* p_aout->b_stereo == 1 */
-            while ( l_buffer < (p_fifo->l_units << 1) )
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            free( p_fifo->buffer ); /* !! */
-            p_fifo->i_type = AOUT_EMPTY_FIFO; /* !! */
-        }
-        break;
-
-    case AOUT_INTF_STEREO_FIFO:
-
-        if ( p_fifo->l_units > p_aout->l_units )
-        {
-            /* p_aout->b_stereo == 1 */
-            while ( l_buffer < (p_aout->l_units << 1) )
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            p_fifo->l_units -= p_aout->l_units;
-        }
-        else /* p_fifo->l_units <= p_aout->l_units */
-        {
-            /* p_aout->b_stereo == 1 */
-            while ( l_buffer < (p_fifo->l_units << 1) )
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            free( p_fifo->buffer );
-            p_fifo->i_type = AOUT_EMPTY_FIFO;
-        }
-        break;
-
-    case AOUT_ADEC_MONO_FIFO:
-    case AOUT_ADEC_STEREO_FIFO:
-
-        l_units = p_aout->l_units;
-        while ( l_units > 0 )
-        {
-            if( !p_fifo->b_next_frame )
-            {
-                if( NextFrame(p_aout, p_fifo, p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
-                {
-                    break;
-                }
-            }
-            l_buffer_limit = p_aout->l_units << p_aout->b_stereo;
-
-            while ( l_buffer < l_buffer_limit )
-            {
-                if( p_aout->b_stereo )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-                }
-                else
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                }
-
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                if ( p_fifo->l_unit >= 
-                     ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> p_fifo->b_stereo)) )
-                {
-                    p_fifo->l_unit -= 
-                        ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> p_fifo->b_stereo));
-                }
-            }
-            if ( p_fifo->l_units > l_units )
-            {
-               p_fifo->l_units -= l_units;
-                break;
-            }
-            else /* p_fifo->l_units <= l_units */
-            {
-                l_units -= p_fifo->l_units;
-
-                vlc_mutex_lock( &p_fifo->data_lock );
-                p_fifo->l_start_frame = p_fifo->l_next_frame;
-                vlc_cond_signal( &p_fifo->data_wait );
-                vlc_mutex_unlock( &p_fifo->data_lock );
-
-                /* p_fifo->b_start_frame = 1; */
-                p_fifo->l_next_frame += 1;
-                p_fifo->l_next_frame &= AOUT_FIFO_SIZE;
-                p_fifo->b_next_frame = 0;
-            }
-        }
-        break;
-
-    default:
-
-        intf_DbgMsg("aout debug: unknown fifo type (%i)", p_fifo->i_type);
-        break;
-    }
-}
-
index e0ddd5f9fe1108f318bff1b2a1924739ca9627df..00d38f7769f1f23ff66ed98f40e012248221eff5 100644 (file)
@@ -2,7 +2,7 @@
  * aout_s8.c: 8 bit signed audio output functions
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: aout_s8.c,v 1.5 2001/12/30 07:09:56 sam Exp $
+ * $Id: aout_s8.c,v 1.6 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *
 /*****************************************************************************
  * Functions
  *****************************************************************************/
-void aout_S8MonoThread( aout_thread_t * p_aout )
+void aout_S8Thread( aout_thread_t * p_aout )
 {
-    intf_ErrMsg( "aout error: 8 bit signed mono thread unsupported" );
-}
-
-void aout_S8StereoThread( aout_thread_t * p_aout )
-{
-    intf_ErrMsg( "aout error: 8 bit signed stereo thread unsupported" );
+    intf_ErrMsg( "aout error: 8 bit signed thread unsupported" );
 }
 
index d81a51b4a775f53f4850802c70ad5323ca1dc9ef..7949d4e3d232a2f7650be04b5e016f92f97ddc65 100644 (file)
@@ -2,7 +2,7 @@
  * aout_u16.c: 16 bit unsigned audio output functions
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: aout_u16.c,v 1.5 2001/12/30 07:09:56 sam Exp $
+ * $Id: aout_u16.c,v 1.6 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *
 /*****************************************************************************
  * Functions
  *****************************************************************************/
-void aout_U16MonoThread( aout_thread_t * p_aout )
+void aout_U16Thread( aout_thread_t * p_aout )
 {
-    intf_ErrMsg( "aout error: 16 bit unsigned mono thread unsupported" );
-}
-
-void aout_U16StereoThread( aout_thread_t * p_aout )
-{
-    intf_ErrMsg( "aout error: 16 bit unsigned stereo thread unsupported" );
+    intf_ErrMsg( "aout error: 16 bit unsigned thread unsupported" );
 }
 
index a032c4129fd58c1c41b7e084f0e3d88f91b6e563..8f3413813ebad3fd41aaf813b821e4946f01faaa 100644 (file)
@@ -2,9 +2,10 @@
  * aout_u8.c: 8 bit unsigned audio output functions
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: aout_u8.c,v 1.10 2001/12/30 07:09:56 sam Exp $
+ * $Id: aout_u8.c,v 1.11 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
+ *          Cyril Deguet <asmax@via.ecp.fr>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include "audio_output.h"
 #include "aout_common.h"
 
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-static void U8MonoPlay   ( aout_thread_t * p_aout, aout_fifo_t * p_fifo );
-static void U8StereoPlay ( aout_thread_t * p_aout, aout_fifo_t * p_fifo );
 
 /*****************************************************************************
  * Functions
  *****************************************************************************/
-void aout_U8MonoThread( aout_thread_t * p_aout )
-{
-    int i_fifo;
-    long l_buffer, l_buffer_limit, l_bytes;
-
-    /* As the s32_buffer was created with calloc(), we don't have to set this
-     * memory to zero and we can immediately jump into the thread's loop */
-    while ( ! p_aout->b_die )
-    {
-        vlc_mutex_lock( &p_aout->fifos_lock );
-
-        for ( i_fifo = 0; i_fifo < AOUT_MAX_FIFOS; i_fifo++ )
-        {
-            if( p_aout->fifo[i_fifo].b_die )
-            {
-                aout_FreeFifo( &p_aout->fifo[i_fifo] );
-            }
-            else
-            {
-                U8MonoPlay( p_aout, &p_aout->fifo[i_fifo] );
-            }
-        }
-
-        vlc_mutex_unlock( &p_aout->fifos_lock );
-
-        l_buffer_limit = p_aout->l_units; /* p_aout->b_stereo == 0 */
-
-        for ( l_buffer = 0; l_buffer < l_buffer_limit; l_buffer++ )
-        {
-            ((u8 *)p_aout->buffer)[l_buffer] = (u8)( ( (p_aout->s32_buffer[l_buffer] / AOUT_MAX_FIFOS / 256 ) + 128 ) * p_aout->i_volume / 256 );
-            p_aout->s32_buffer[l_buffer] = 0;
-        }
-
-        l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit );
-        /* sizeof(u8) << (p_aout->b_stereo) == 1 */
-        p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 1)) * 1000000)
-                                   / ((mtime_t)p_aout->l_rate))
-                        + p_main->i_desync;
-        p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(u8) );
-        if ( l_bytes > (l_buffer_limit * sizeof(u8) * 2) ) /* There are 2 channels (left & right) */
-        {
-            msleep( p_aout->l_msleep );
-        }
-    }
-
-    vlc_mutex_lock( &p_aout->fifos_lock );
-
-    for ( i_fifo = 0; i_fifo < AOUT_MAX_FIFOS; i_fifo++ )
-    {
-        aout_FreeFifo( &p_aout->fifo[i_fifo] );
-    }
-
-    vlc_mutex_unlock( &p_aout->fifos_lock );
-}
 
-void aout_U8StereoThread( aout_thread_t * p_aout )
+void aout_U8Thread( aout_thread_t * p_aout )
 {
     int i_fifo;
     long l_buffer, l_buffer_limit, l_bytes;
@@ -117,26 +58,29 @@ void aout_U8StereoThread( aout_thread_t * p_aout )
             }
             else
             {
-                U8StereoPlay( p_aout, &p_aout->fifo[i_fifo] );
+                aout_FillBuffer( p_aout, &p_aout->fifo[i_fifo] );
             }
         }
 
         vlc_mutex_unlock( &p_aout->fifos_lock );
 
-        l_buffer_limit = p_aout->l_units  << 1 ; /* p_aout->b_stereo == 1 */
+        l_buffer_limit = p_aout->l_units << p_aout->b_stereo;
 
         for ( l_buffer = 0; l_buffer < l_buffer_limit; l_buffer++ )
         {
-            ((u8 *)p_aout->buffer)[l_buffer] = (u8)( ( (p_aout->s32_buffer[l_buffer] / AOUT_MAX_FIFOS / 256) + 128 ) * p_aout->i_volume / 256 );
+            ((u8 *)p_aout->buffer)[l_buffer] = 
+                    (u8)( ( (p_aout->s32_buffer[l_buffer] / AOUT_MAX_FIFOS / 256) 
+                    + 128 ) * p_aout->i_volume / 256 );
             p_aout->s32_buffer[l_buffer] = 0;
         }
         l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit );
-        /* sizeof(u8) << (p_aout->b_stereo) == 2 */
-        p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 2)) * 1000000)
-                                   / ((mtime_t)p_aout->l_rate))
-                        + p_main->i_desync;
+        
+        p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 
+                sizeof(u8) << (p_aout->b_stereo))) * 1000000) / 
+                ((mtime_t)p_aout->l_rate)) + p_main->i_desync;
  
-        p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(u8) );
+        p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * 
+                sizeof(u8) );
         if ( l_bytes > (l_buffer_limit * sizeof(u8)) )
         {
             msleep( p_aout->l_msleep );
@@ -153,443 +97,3 @@ void aout_U8StereoThread( aout_thread_t * p_aout )
     vlc_mutex_unlock( &p_aout->fifos_lock );
 }
 
-/* Following functions are local */
-
-static void U8MonoPlay( aout_thread_t * p_aout, aout_fifo_t * p_fifo )
-{
-    long l_buffer = 0;
-    long l_buffer_limit, l_units;
-
-    switch ( p_fifo->i_type )
-    {
-    case AOUT_EMPTY_FIFO:
-
-        break;
-
-    case AOUT_INTF_MONO_FIFO:
-
-        if ( p_fifo->l_units > p_aout->l_units )
-        {
-            /* p_aout->b_stereo == 0 */
-            while ( l_buffer < (p_aout->l_units) )
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            p_fifo->l_units -= p_aout->l_units;
-        }
-        else
-        {
-            /* p_aout->b_stereo == 0 */
-            while ( l_buffer < (p_fifo->l_units) )
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            free( p_fifo->buffer ); /* !! */
-            p_fifo->i_type = AOUT_EMPTY_FIFO; /* !! */
-            intf_DbgMsg("aout debug: audio output fifo (%p) destroyed", p_fifo); /* !! */
-        }
-        break;
-
-    case AOUT_INTF_STEREO_FIFO:
-
-        if ( p_fifo->l_units > p_aout->l_units )
-        {
-            /* p_aout->b_stereo == 0 */
-            while ( l_buffer < (p_aout->l_units) )
-            {
-                /* I mix half left - half right */
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] ) / 2 +
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] ) / 2;
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            p_fifo->l_units -= p_aout->l_units;
-        }
-        else
-        {
-            /* p_aout->b_stereo == 0 */
-            while ( l_buffer < (p_fifo->l_units) )
-            {
-                /* I mix half left - half right */
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] ) / 2 +
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] ) / 2;
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            free( p_fifo->buffer ); /* !! */
-            p_fifo->i_type = AOUT_EMPTY_FIFO; /* !! */
-            intf_DbgMsg("aout debug: audio output fifo (%p) destroyed", p_fifo); /* !! */
-        }
-        break;
-
-    case AOUT_ADEC_MONO_FIFO:
-
-        l_units = p_aout->l_units;
-
-        while ( l_units > 0 )
-        {
-            if ( !p_fifo->b_next_frame )
-            {
-                if ( NextFrame(p_aout, p_fifo, p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
-                {
-                    break;
-                }
-            }
-
-            if ( p_fifo->l_units > l_units )
-            {
-                /* p_aout->b_stereo == 0 */
-                l_buffer_limit = p_aout->l_units;
-
-                while ( l_buffer < l_buffer_limit )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 0 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 0 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0));
-                    }
-                }
-                p_fifo->l_units -= l_units;
-                break;
-            }
-            else
-            {
-                /* p_aout->b_stereo == 0 */
-                l_buffer_limit = l_buffer + (p_fifo->l_units);
-
-                while ( l_buffer < l_buffer_limit )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 0 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 0 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0));
-                    }
-                }
-                l_units -= p_fifo->l_units;
-
-                vlc_mutex_lock( &p_fifo->data_lock );
-                p_fifo->l_start_frame = p_fifo->l_next_frame;
-                vlc_cond_signal( &p_fifo->data_wait );
-                vlc_mutex_unlock( &p_fifo->data_lock );
-
-                /* p_fifo->b_start_frame = 1; */
-                p_fifo->l_next_frame += 1;
-                p_fifo->l_next_frame &= AOUT_FIFO_SIZE;
-                p_fifo->b_next_frame = 0;
-            }
-        }
-        break;
-
-    case AOUT_ADEC_STEREO_FIFO:
-
-        l_units = p_aout->l_units;
-
-        while ( l_units > 0 )
-        {
-            if ( !p_fifo->b_next_frame )
-            {
-                if ( NextFrame(p_aout, p_fifo, p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
-                {
-                    break;
-                }
-            }
-
-            if ( p_fifo->l_units > l_units )
-            {
-                /* p_aout->b_stereo == 0 */
-                l_buffer_limit = p_aout->l_units;
-
-                while ( l_buffer < l_buffer_limit )
-                {
-                    /* I mix half left - half right */
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] ) / 2 +
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] ) / 2;
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 1 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 1 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1));
-                    }
-                }
-                p_fifo->l_units -= l_units;
-                break;
-            }
-            else
-            {
-                /* p_aout->b_stereo == 0 */
-                l_buffer_limit = l_buffer + (p_fifo->l_units);
-
-                while ( l_buffer < l_buffer_limit )
-                {
-                    /* I mix half left - half right */
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] ) / 2 +
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] ) / 2;
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 1 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 1 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1));
-                    }
-                }
-                l_units -= p_fifo->l_units;
-
-                vlc_mutex_lock( &p_fifo->data_lock );
-                p_fifo->l_start_frame = p_fifo->l_next_frame;
-                vlc_cond_signal( &p_fifo->data_wait );
-                vlc_mutex_unlock( &p_fifo->data_lock );
-
-                /* p_fifo->b_start_frame = 1; */
-                p_fifo->l_next_frame += 1;
-                p_fifo->l_next_frame &= AOUT_FIFO_SIZE;
-                p_fifo->b_next_frame = 0;
-            }
-        }
-        break;
-
-    default:
-
-        intf_DbgMsg("aout debug: unknown fifo type (%i)", p_fifo->i_type);
-
-        break;
-    }
-}
-
-static void U8StereoPlay( aout_thread_t * p_aout, aout_fifo_t * p_fifo )
-{
-    long l_buffer = 0;
-    long l_buffer_limit, l_units;
-
-    switch ( p_fifo->i_type )
-    {
-    case AOUT_EMPTY_FIFO:
-
-        break;
-
-    case AOUT_INTF_MONO_FIFO:
-
-        if ( p_fifo->l_units > p_aout->l_units )
-        {
-            while ( l_buffer < (p_aout->l_units << 1) ) /* p_aout->b_stereo == 1 */
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            p_fifo->l_units -= p_aout->l_units;
-        }
-        else
-        {
-            while ( l_buffer < (p_fifo->l_units << 1) ) /* p_aout->b_stereo == 1 */
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            free( p_fifo->buffer ); /* !! */
-            p_fifo->i_type = AOUT_EMPTY_FIFO; /* !! */
-            intf_DbgMsg("aout debug: audio output fifo (%p) destroyed", p_fifo); /* !! */
-        }
-        break;
-
-    case AOUT_INTF_STEREO_FIFO:
-
-        if ( p_fifo->l_units > p_aout->l_units )
-        {
-            while ( l_buffer < (p_aout->l_units << 1) ) /* p_aout->b_stereo == 1 */
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            p_fifo->l_units -= p_aout->l_units;
-        }
-        else
-        {
-            while ( l_buffer < (p_fifo->l_units << 1) ) /* p_aout->b_stereo == 1 */
-            {
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                p_aout->s32_buffer[l_buffer++] +=
-                    (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-                UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-            }
-            free( p_fifo->buffer ); /* !! */
-            p_fifo->i_type = AOUT_EMPTY_FIFO; /* !! */
-            intf_DbgMsg("aout debug: audio output fifo (%p) destroyed", p_fifo); /* !! */
-        }
-        break;
-
-    case AOUT_ADEC_MONO_FIFO:
-
-        l_units = p_aout->l_units;
-
-        while ( l_units > 0 )
-        {
-            if ( !p_fifo->b_next_frame )
-            {
-                if ( NextFrame(p_aout, p_fifo, p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
-                {
-                    break;
-                }
-            }
-
-            if ( p_fifo->l_units > l_units )
-            {
-                l_buffer_limit = p_aout->l_units << 1; /* p_aout->b_stereo == 1 */
-                while ( l_buffer < l_buffer_limit )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 0 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 0 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0));
-                    }
-                }
-                p_fifo->l_units -= l_units;
-                break;
-            }
-            else
-            {
-                /* p_aout->b_stereo == 1 */
-                l_buffer_limit = l_buffer + (p_fifo->l_units << 1);
-
-                while ( l_buffer < l_buffer_limit )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[p_fifo->l_unit] );
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 0 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 0 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 0));
-                    }
-                }
-                l_units -= p_fifo->l_units;
-
-                vlc_mutex_lock( &p_fifo->data_lock );
-                p_fifo->l_start_frame = p_fifo->l_next_frame;
-                vlc_cond_signal( &p_fifo->data_wait );
-                vlc_mutex_unlock( &p_fifo->data_lock );
-
-                /* p_fifo->b_start_frame = 1; */
-                p_fifo->l_next_frame += 1;
-                p_fifo->l_next_frame &= AOUT_FIFO_SIZE;
-                p_fifo->b_next_frame = 0;
-            }
-        }
-        break;
-
-    case AOUT_ADEC_STEREO_FIFO:
-
-        l_units = p_aout->l_units;
-
-        while ( l_units > 0 )
-        {
-            if ( !p_fifo->b_next_frame )
-            {
-                if ( NextFrame(p_aout, p_fifo, p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
-                {
-                    break;
-                }
-            }
-
-            if ( p_fifo->l_units > l_units )
-            {
-                l_buffer_limit = p_aout->l_units << 1; /* p_aout->b_stereo == 1 */
-                while ( l_buffer < l_buffer_limit )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 1 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 1 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1));
-                    }
-                }
-                p_fifo->l_units -= l_units;
-                break;
-            }
-            else
-            {
-                /* p_aout->b_stereo == 1 */
-                l_buffer_limit = l_buffer + (p_fifo->l_units << 1);
-
-                while ( l_buffer < l_buffer_limit )
-                {
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit] );
-                    p_aout->s32_buffer[l_buffer++] +=
-                        (s32)( ((s16 *)p_fifo->buffer)[2*p_fifo->l_unit+1] );
-
-                    UPDATE_INCREMENT( p_fifo->unit_increment, p_fifo->l_unit )
-                    if ( p_fifo->l_unit >= /* p_fifo->b_stereo == 1 */
-                         ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1)) )
-                    {
-                        p_fifo->l_unit -= /* p_fifo->b_stereo == 1 */
-                            ((AOUT_FIFO_SIZE + 1) * (p_fifo->l_frame_size >> 1));
-                    }
-                }
-                l_units -= p_fifo->l_units;
-
-                vlc_mutex_lock( &p_fifo->data_lock );
-                p_fifo->l_start_frame = p_fifo->l_next_frame;
-                vlc_cond_signal( &p_fifo->data_wait );
-                vlc_mutex_unlock( &p_fifo->data_lock );
-
-                /* p_fifo->b_start_frame = 1; */
-                p_fifo->l_next_frame += 1;
-                p_fifo->l_next_frame &= AOUT_FIFO_SIZE;
-                p_fifo->b_next_frame = 0;
-            }
-        }
-        break;
-
-    default:
-        intf_DbgMsg("aout debug: unknown fifo type (%i)", p_fifo->i_type);
-        break;
-    }
-}
-
index f727343e3a690cfe05873a13a694f4faf48a3ad9..c0d5f3b3498a8deefd15b3caac05aeaf52574f17 100644 (file)
@@ -2,7 +2,7 @@
  * audio_output.c : audio output thread
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: audio_output.c,v 1.70 2002/01/09 00:33:37 asmax Exp $
+ * $Id: audio_output.c,v 1.71 2002/01/14 12:15:10 asmax Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *          Cyril Deguet <asmax@via.ecp.fr>
@@ -212,27 +212,27 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
         case AOUT_FMT_U8:
             intf_WarnMsg( 2, "aout info: unsigned 8 bits mono thread" );
             l_bytes = 1 * sizeof(u8) * p_aout->l_units;
-            pf_aout_thread = aout_U8MonoThread;
+            pf_aout_thread = aout_U8Thread;
             break;
 
         case AOUT_FMT_S8:
             intf_WarnMsg( 2, "aout info: signed 8 bits mono thread" );
             l_bytes = 1 * sizeof(s8) * p_aout->l_units;
-            pf_aout_thread = aout_S8MonoThread;
+            pf_aout_thread = aout_S8Thread;
             break;
 
         case AOUT_FMT_U16_LE:
         case AOUT_FMT_U16_BE:
             intf_WarnMsg( 2, "aout info: unsigned 16 bits mono thread" );
             l_bytes = 1 * sizeof(u16) * p_aout->l_units;
-            pf_aout_thread = aout_U16MonoThread;
+            pf_aout_thread = aout_U16Thread;
             break;
 
         case AOUT_FMT_S16_LE:
         case AOUT_FMT_S16_BE:
             intf_WarnMsg( 2, "aout info: signed 16 bits mono thread" );
             l_bytes = 1 * sizeof(s16) * p_aout->l_units;
-            pf_aout_thread = aout_S16MonoThread;
+            pf_aout_thread = aout_S16Thread;
             break;
 
         default:
@@ -249,27 +249,27 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
         case AOUT_FMT_U8:
             intf_WarnMsg( 2, "aout info: unsigned 8 bits stereo thread" );
             l_bytes = 2 * sizeof(u8) * p_aout->l_units;
-            pf_aout_thread = aout_U8StereoThread;
+            pf_aout_thread = aout_U8Thread;
             break;
 
         case AOUT_FMT_S8:
             intf_WarnMsg( 2, "aout info: signed 8 bits stereo thread" );
             l_bytes = 2 * sizeof(s8) * p_aout->l_units;
-            pf_aout_thread = aout_S8StereoThread;
+            pf_aout_thread = aout_S8Thread;
             break;
 
         case AOUT_FMT_U16_LE:
         case AOUT_FMT_U16_BE:
             intf_WarnMsg( 2, "aout info: unsigned 16 bits stereo thread" );
             l_bytes = 2 * sizeof(u16) * p_aout->l_units;
-            pf_aout_thread = aout_U16StereoThread;
+            pf_aout_thread = aout_U16Thread;
             break;
 
         case AOUT_FMT_S16_LE:
         case AOUT_FMT_S16_BE:
             intf_WarnMsg( 2, "aout info: signed 16 bits stereo thread" );
             l_bytes = 2 * sizeof(s16) * p_aout->l_units;
-            pf_aout_thread = aout_S16StereoThread;
+            pf_aout_thread = aout_S16Thread;
             break;
 
         case AOUT_FMT_AC3: