* aout_sdl.c : audio sdl functions library
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: aout_sdl.c,v 1.26 2002/02/24 20:51:10 gbazin Exp $
+ * $Id: aout_sdl.c,v 1.29 2002/06/01 12:32:00 sam Exp $
*
* Authors: Michel Kaempf <maxx@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
#include <fcntl.h> /* open(), O_WRONLY */
#include <string.h> /* strerror() */
#include <unistd.h> /* write(), close() */
-#include <stdio.h> /* "intf_msg.h" */
#include <stdlib.h> /* calloc(), malloc(), free() */
-#include <videolan/vlc.h>
+#include <vlc/vlc.h>
+#include <vlc/aout.h>
#include SDL_INCLUDE_FILE
-#include "audio_output.h" /* aout_thread_t */
-
/*****************************************************************************
* aout_sys_t: dsp audio output method descriptor
*****************************************************************************
/* the overflow limit is used to prevent the fifo from growing too big */
#define OVERFLOWLIMIT 100000
-typedef struct aout_sys_s
+struct aout_sys_s
{
byte_t * audio_buf;
int i_audio_end;
- boolean_t b_active;
-
-} aout_sys_t;
+ vlc_bool_t b_active;
+};
/*****************************************************************************
* Local prototypes.
*****************************************************************************/
static int aout_Open ( aout_thread_t *p_aout );
static int aout_SetFormat ( aout_thread_t *p_aout );
-static long aout_GetBufInfo ( aout_thread_t *p_aout, long l_buffer_info );
+static int aout_GetBufInfo ( aout_thread_t *p_aout, int i_buffer_info );
static void aout_Play ( aout_thread_t *p_aout,
byte_t *buffer, int i_size );
static void aout_Close ( aout_thread_t *p_aout );
static int aout_Open( aout_thread_t *p_aout )
{
SDL_AudioSpec desired;
- int i_channels = p_aout->b_stereo ? 2 : 1;
if( SDL_WasInit( SDL_INIT_AUDIO ) != 0 )
{
if( p_aout->p_sys == NULL )
{
- intf_ErrMsg( "aout error: %s", strerror(ENOMEM) );
+ msg_Err( p_aout, "out of memory" );
return( 1 );
}
#endif
) < 0 )
{
- intf_ErrMsg( "aout error: can't initialize SDL (%s)", SDL_GetError() );
+ msg_Err( p_aout, "cannot initialize SDL (%s)", SDL_GetError() );
free( p_aout->p_sys );
return( 1 );
}
p_aout->p_sys->audio_buf = malloc( OVERFLOWLIMIT );
/* Initialize some variables */
- desired.freq = p_aout->l_rate;
/* TODO: write conversion beetween AOUT_FORMAT_DEFAULT
* AND AUDIO* from SDL. */
+ desired.freq = p_aout->i_rate;
+#ifdef WORDS_BIGENDIAN
+ desired.format = AUDIO_S16MSB; /* stereo 16 bits */
+#else
desired.format = AUDIO_S16LSB; /* stereo 16 bits */
- desired.channels = i_channels;
+#endif
+ desired.channels = p_aout->i_channels;
desired.callback = aout_SDLCallback;
desired.userdata = p_aout->p_sys;
desired.samples = 1024;
*/
if( SDL_OpenAudio( &desired, NULL ) < 0 )
{
- intf_ErrMsg( "aout error: SDL_OpenAudio failed (%s)", SDL_GetError() );
+ msg_Err( p_aout, "SDL_OpenAudio failed (%s)", SDL_GetError() );
SDL_QuitSubSystem( SDL_INIT_AUDIO );
free( p_aout->p_sys );
return( -1 );
{
/* TODO: finish and clean this */
SDL_AudioSpec desired;
- int i_stereo = p_aout->b_stereo ? 2 : 1;
/*i_format = p_aout->i_format;*/
- desired.freq = p_aout->l_rate; /* Set the output rate */
+ desired.freq = p_aout->i_rate; /* Set the output rate */
+#ifdef WORDS_BIGENDIAN
+ desired.format = AUDIO_S16MSB; /* stereo 16 bits */
+#else
desired.format = AUDIO_S16LSB; /* stereo 16 bits */
- desired.channels = i_stereo;
+#endif
+ desired.channels = p_aout->i_channels;
desired.callback = aout_SDLCallback;
desired.userdata = p_aout->p_sys;
desired.samples = 2048;
* aout_GetBufInfo: buffer status query
*****************************************************************************
* returns the number of bytes in the audio buffer compared to the size of
- * l_buffer_limit...
+ * i_buffer_limit...
*****************************************************************************/
-static long aout_GetBufInfo( aout_thread_t *p_aout, long l_buffer_limit )
+static int aout_GetBufInfo( aout_thread_t *p_aout, int i_buffer_limit )
{
- if(l_buffer_limit > p_aout->p_sys->i_audio_end)
+ if(i_buffer_limit > p_aout->p_sys->i_audio_end)
{
/* returning 0 here juste gives awful sound in the speakers :/ */
- return( l_buffer_limit );
+ return( i_buffer_limit );
}
- return( p_aout->p_sys->i_audio_end - l_buffer_limit);
+ return( p_aout->p_sys->i_audio_end - i_buffer_limit);
}
/*****************************************************************************
*****************************************************************************/
static void aout_SDLCallback( void *userdata, byte_t *stream, int len )
{
- struct aout_sys_s * p_sys = userdata;
+ aout_sys_t * p_sys = userdata;
if( p_sys->i_audio_end > OVERFLOWLIMIT )
{
- intf_ErrMsg( "aout error: aout_SDLCallback overflowed" );
+//X msg_Err( p_aout, "aout_SDLCallback overflowed" );
free( p_sys->audio_buf );
p_sys->audio_buf = NULL;