* esd.c : EsounD module
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
- * $Id: esd.c,v 1.3 2002/08/13 14:53:46 sam Exp $
+ * $Id: esd.c,v 1.10 2002/08/25 09:39:59 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
static void Close ( vlc_object_t * );
static int SetFormat ( aout_instance_t * );
-static void Play ( aout_instance_t *, aout_buffer_t * );
+static void Play ( aout_instance_t * );
static int ESDThread ( aout_instance_t * );
/*****************************************************************************
/* ESD latency is calculated for 44100 Hz. We don't have any way to get the
* number of buffered samples, so I assume ESD_BUF_SIZE/2 */
p_sys->latency =
- (mtime_t)( esd_get_latency( esd_open_sound(NULL) ) + ESD_BUF_SIZE / 2
- * p_aout->output.output.i_rate / ESD_DEFAULT_RATE
- * aout_FormatTo( &p_aout->output.output, 1 ) )
+ (mtime_t)( esd_get_latency( esd_open_sound(NULL) ) + ESD_BUF_SIZE/2
+ * p_aout->output.output.i_bytes_per_frame
+ * p_aout->output.output.i_rate
+ / ESD_DEFAULT_RATE )
* (mtime_t)1000000
- / (mtime_t)aout_FormatToByterate( &p_aout->output.output,
- p_aout->output.output.i_rate );
+ / p_aout->output.output.i_bytes_per_frame
+ / p_aout->output.output.i_rate;
p_sys->b_initialized = VLC_TRUE;
/*****************************************************************************
* Play: queue a buffer for playing by ESDThread
*****************************************************************************/
-static void Play( aout_instance_t *p_aout, aout_buffer_t * p_buffer )
+static void Play( aout_instance_t *p_aout )
{
- aout_FifoPush( p_aout, &p_aout->output.fifo, p_buffer );
}
/*****************************************************************************
/* Get the presentation date of the next write() operation. It
* is equal to the current date + buffered samples + esd latency */
- p_buffer = aout_OutputNextBuffer( p_aout, mdate() + p_sys->latency );
+ p_buffer = aout_OutputNextBuffer( p_aout, mdate() + p_sys->latency,
+ VLC_FALSE );
if ( p_buffer != NULL )
{
p_bytes = p_buffer->p_buffer;
- i_size = aout_FormatToSize( &p_aout->output.output,
- p_buffer->i_nb_samples );
+ i_size = p_buffer->i_nb_bytes;
}
else
{
- i_size = aout_FormatToSize( &p_aout->output.output,
- ESD_BUF_SIZE * 2 );
+ i_size = ESD_BUF_SIZE * 2
+ / p_aout->output.output.i_frame_length
+ * p_aout->output.output.i_bytes_per_frame;
p_bytes = alloca( i_size );
memset( p_bytes, 0, i_size );
}