/* Default output device. You probably should not change this. */
#define AOUT_DEFAULT_DEVICE "/dev/dsp"
-/* Default audio output format (AFMT_S16_NE = Native Endianess) */
-#define AOUT_DEFAULT_FORMAT AFMT_S16_NE
+/* Default audio output format (AOUT_FMT_S16_NE = Native Endianess) */
+#define AOUT_DEFAULT_FORMAT AOUT_FMT_S16_NE
/* Default stereo mode (0 stands for mono, 1 for stereo) */
#define AOUT_DEFAULT_STEREO 1
#define AOUT_FIFO_ISEMPTY( fifo ) ( (fifo).l_end_frame == (fifo).i_start_frame )
#define AOUT_FIFO_ISFULL( fifo ) ( ((((fifo).l_end_frame + 1) - (fifo).l_start_frame) & AOUT_FIFO_SIZE) == 0 )
-/*****************************************************************************
- * aout_sys_t
- *****************************************************************************/
-typedef struct
-{
- /* Path to the audio output device (default is set to "/dev/dsp") */
- char * psz_device;
- int i_fd;
-
- /* Format of the audio output samples (see <sys/soundcard.h>) */
- int i_format;
- /* Following boolean is set to 0 if output sound is mono, 1 if stereo */
- boolean_t b_stereo;
- /* Rate of the audio output sound (in Hz) */
- long l_rate;
-
- /* Buffer information structure, used by aout_sys_getbufinfo() to store the
- * current state of the internal sound card buffer */
- audio_buf_info buf_info;
-
-} aout_sys_t;
-
/*****************************************************************************
* aout_increment_t
*****************************************************************************
int i_type;
boolean_t b_die;
- boolean_t b_stereo;
+ int i_channels;
long l_rate;
vlc_mutex_t data_lock;
/*****************************************************************************
* aout_thread_t : audio output thread descriptor
*****************************************************************************/
-typedef int (aout_sys_open_t) ( aout_sys_t *p_sys );
-typedef int (aout_sys_reset_t) ( aout_sys_t *p_sys );
-typedef int (aout_sys_setformat_t) ( aout_sys_t *p_sys );
-typedef int (aout_sys_setchannels_t) ( aout_sys_t *p_sys );
-typedef int (aout_sys_setrate_t) ( aout_sys_t *p_sys );
-typedef long (aout_sys_getbufinfo_t) ( aout_sys_t *p_sys );
-typedef void (aout_sys_playsamples_t) ( aout_sys_t *p_sys,
+typedef int (aout_sys_open_t) ( p_aout_thread_t p_aout );
+typedef int (aout_sys_reset_t) ( p_aout_thread_t p_aout );
+typedef int (aout_sys_setformat_t) ( p_aout_thread_t p_aout );
+typedef int (aout_sys_setchannels_t) ( p_aout_thread_t p_aout );
+typedef int (aout_sys_setrate_t) ( p_aout_thread_t p_aout );
+typedef long (aout_sys_getbufinfo_t) ( p_aout_thread_t p_aout );
+typedef void (aout_sys_playsamples_t) ( p_aout_thread_t p_aout,
byte_t *buffer, int i_size );
-typedef void (aout_sys_close_t) ( aout_sys_t *p_sys );
+typedef void (aout_sys_close_t) ( p_aout_thread_t p_aout );
typedef struct aout_thread_s
{
vlc_thread_t thread_id;
boolean_t b_die;
- aout_sys_t sys;
-
vlc_mutex_t fifos_lock;
aout_fifo_t fifo[ AOUT_MAX_FIFOS ];
* will be played */
mtime_t date;
+ /* Path to the audio output device (default is set to "/dev/dsp") */
+ char * psz_device;
+ int i_fd;
+
+ /* Format of the audio output samples */
+ int i_format;
+ /* Number of channels */
+ int i_channels;
+ /* Rate and gain of the audio output sound (in Hz) */
+ long l_rate;
+ long l_gain;
+
+ /* there might be some useful private structure, such as audio_buf_info
+ * for the OSS output */
+ p_aout_sys_t p_sys;
+
} aout_thread_t;
/* Output methods */
#define AOUT_DEFAULT_METHOD "dsp"
#endif
+/* Those are from <linux/soundcard.h> but are needed because of formats
+ * on other platforms */
+#define AOUT_FMT_U8 0x00000008
+#define AOUT_FMT_S16_LE 0x00000010 /* Little endian signed 16 */
+#define AOUT_FMT_S16_BE 0x00000020 /* Big endian signed 16 */
+#define AOUT_FMT_S8 0x00000040
+#define AOUT_FMT_U16_LE 0x00000080 /* Little endian U16 */
+#define AOUT_FMT_U16_BE 0x00000100 /* Big endian U16 */
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define AOUT_FMT_S16_NE AOUT_FMT_S16_LE
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define AOUT_FMT_S16_NE AOUT_FMT_S16_BE
+#endif
+
/*****************************************************************************
* Prototypes
*****************************************************************************/
*****************************************************************************/
#include <unistd.h>
-#include <sys/soundcard.h>
#include <stdio.h> /* "intf_msg.h" */
#include <stdlib.h> /* calloc(), malloc(), free() */
p_aout->p_sys_playsamples = aout_DummySysPlaySamples;
p_aout->p_sys_close = aout_DummySysClose;
}
-#ifdef VIDEO_X11
+#ifdef AUDIO_DSP
else if( !strcmp(psz_method, "dsp") )
{
p_aout->p_sys_open = aout_DspSysOpen;
return( NULL );
}
- //???? kludge to initialize some audio parameters - place this section somewhere
- //???? else
- p_aout->sys.i_format = AOUT_DEFAULT_FORMAT;
- p_aout->sys.psz_device = main_GetPszVariable( AOUT_DSP_VAR, AOUT_DSP_DEFAULT );
- p_aout->sys.b_stereo = main_GetIntVariable( AOUT_STEREO_VAR, AOUT_STEREO_DEFAULT );
- p_aout->sys.l_rate = main_GetIntVariable( AOUT_RATE_VAR, AOUT_RATE_DEFAULT );
- // ???? end of kludge
-
/*
- * Initialize DSP
+ * Initialize audio device
*/
- if ( p_aout->p_sys_open( &p_aout->sys ) )
+ if ( p_aout->p_sys_open( p_aout ) )
{
free( p_aout );
return( NULL );
}
- if ( p_aout->p_sys_reset( &p_aout->sys ) )
+ if ( p_aout->p_sys_reset( p_aout ) )
{
- p_aout->p_sys_close( &p_aout->sys );
+ p_aout->p_sys_close( p_aout );
free( p_aout );
return( NULL );
}
- if ( p_aout->p_sys_setformat( &p_aout->sys ) )
+ if ( p_aout->p_sys_setformat( p_aout ) )
{
- p_aout->p_sys_close( &p_aout->sys );
+ p_aout->p_sys_close( p_aout );
free( p_aout );
return( NULL );
}
- if ( p_aout->p_sys_setchannels( &p_aout->sys ) )
+ if ( p_aout->p_sys_setchannels( p_aout ) )
{
- p_aout->p_sys_close( &p_aout->sys );
+ p_aout->p_sys_close( p_aout );
free( p_aout );
return( NULL );
}
- if ( p_aout->p_sys_setrate( &p_aout->sys ) )
+ if ( p_aout->p_sys_setrate( p_aout ) )
{
- p_aout->p_sys_close( &p_aout->sys );
+ p_aout->p_sys_close( p_aout );
free( p_aout );
return( NULL );
}
- intf_DbgMsg("aout debug: audio device (%s) opened (format=%i, stereo=%i, rate=%li)\n",
- p_aout->sys.psz_device,
- p_aout->sys.i_format,
- p_aout->sys.b_stereo, p_aout->sys.l_rate);
+
+ /* this code isn't very nice since some values might be uninitialized */
+/* intf_DbgMsg("aout debug: audio device (%s) opened (format=%i, channels=%i, rate=%li)\n",
+ p_aout->psz_device,
+ p_aout->i_format,
+ p_aout->i_channels, p_aout->l_rate); */
//?? maybe it would be cleaner to change SpawnThread prototype
//?? see vout to handle status correctly - however, it is not critical since
//?? this thread is only called in main and all calls are blocking
if( aout_SpawnThread( p_aout ) )
{
- p_aout->p_sys_close( &p_aout->sys );
+ p_aout->p_sys_close( p_aout );
free( p_aout );
return( NULL );
}
/* Compute the size (in audio units) of the audio output buffer. Although
* AOUT_BUFFER_DURATION is given in microseconds, the output rate is given
* in Hz, that's why we need to divide by 10^6 microseconds (1 second) */
- p_aout->l_units = (long)( ((s64)p_aout->sys.l_rate * AOUT_BUFFER_DURATION) / 1000000 );
- p_aout->l_msleep = (long)( ((s64)p_aout->l_units * 1000000) / (s64)p_aout->sys.l_rate );
+ p_aout->l_units = (long)( ((s64)p_aout->l_rate * AOUT_BUFFER_DURATION) / 1000000 );
+ p_aout->l_msleep = (long)( ((s64)p_aout->l_units * 1000000) / (s64)p_aout->l_rate );
/* Make aout_thread point to the right thread function, and compute the
* byte size of the audio output buffer */
- switch ( p_aout->sys.b_stereo )
+ switch ( p_aout->i_channels )
{
/* Audio output is mono */
- case 0:
- switch ( p_aout->sys.i_format )
+ case 1:
+ switch ( p_aout->i_format )
{
- case AFMT_U8:
+ case AOUT_FMT_U8:
l_bytes = 1 * sizeof(u8) * p_aout->l_units;
aout_thread = (void *)aout_Thread_U8_Mono;
break;
- case AFMT_S8:
+ case AOUT_FMT_S8:
l_bytes = 1 * sizeof(s8) * p_aout->l_units;
aout_thread = (void *)aout_Thread_S8_Mono;
break;
- case AFMT_U16_LE:
- case AFMT_U16_BE:
+ case AOUT_FMT_U16_LE:
+ case AOUT_FMT_U16_BE:
l_bytes = 1 * sizeof(u16) * p_aout->l_units;
aout_thread = (void *)aout_Thread_U16_Mono;
break;
- case AFMT_S16_LE:
- case AFMT_S16_BE:
+ case AOUT_FMT_S16_LE:
+ case AOUT_FMT_S16_BE:
l_bytes = 1 * sizeof(s16) * p_aout->l_units;
aout_thread = (void *)aout_Thread_S16_Mono;
break;
default:
intf_ErrMsg("aout error: unknown audio output format (%i)\n",
- p_aout->sys.i_format);
+ p_aout->i_format);
return( -1 );
}
break;
/* Audio output is stereo */
- case 1:
- switch ( p_aout->sys.i_format )
+ case 2:
+ switch ( p_aout->i_format )
{
- case AFMT_U8:
+ case AOUT_FMT_U8:
l_bytes = 2 * sizeof(u8) * p_aout->l_units;
aout_thread = (void *)aout_Thread_U8_Stereo;
break;
- case AFMT_S8:
+ case AOUT_FMT_S8:
l_bytes = 2 * sizeof(s8) * p_aout->l_units;
aout_thread = (void *)aout_Thread_S8_Stereo;
break;
- case AFMT_U16_LE:
- case AFMT_U16_BE:
+ case AOUT_FMT_U16_LE:
+ case AOUT_FMT_U16_BE:
l_bytes = 2 * sizeof(u16) * p_aout->l_units;
aout_thread = (void *)aout_Thread_U16_Stereo;
break;
- case AFMT_S16_LE:
- case AFMT_S16_BE:
+ case AOUT_FMT_S16_LE:
+ case AOUT_FMT_S16_BE:
l_bytes = 2 * sizeof(s16) * p_aout->l_units;
aout_thread = (void *)aout_Thread_S16_Stereo;
break;
default:
intf_ErrMsg("aout error: unknown audio output format (%i)\n",
- p_aout->sys.i_format);
+ p_aout->i_format);
return( -1 );
}
break;
default:
intf_ErrMsg("aout error: unknown number of audio channels (%i)\n",
- p_aout->sys.b_stereo + 1);
+ p_aout->i_channels );
return( -1 );
}
intf_ErrMsg("aout error: not enough memory to create the output buffer\n");
return( -1 );
}
- if ( (p_aout->s32_buffer = (s32 *)calloc(p_aout->l_units, sizeof(s32) << p_aout->sys.b_stereo)) == NULL )
+ if ( (p_aout->s32_buffer = (s32 *)calloc(p_aout->l_units, sizeof(s32) << ( p_aout->i_channels - 1))) == NULL )
{
intf_ErrMsg("aout error: not enough memory to create the s32 output buffer\n");
free( p_aout->buffer );
free( p_aout->s32_buffer );
/* Free the structure */
- p_aout->p_sys_close( &p_aout->sys );
- intf_DbgMsg("aout debug: audio device (%s) closed\n", p_aout->sys.psz_device);
+ p_aout->p_sys_close( p_aout );
+ intf_DbgMsg("aout debug: audio device (%s) closed\n", p_aout->psz_device);
free( p_aout );
}
case AOUT_INTF_STEREO_FIFO:
p_aout->fifo[i_fifo].b_die = 0;
- p_aout->fifo[i_fifo].b_stereo = p_fifo->b_stereo;
+ p_aout->fifo[i_fifo].i_channels = p_fifo->i_channels;
p_aout->fifo[i_fifo].l_rate = p_fifo->l_rate;
p_aout->fifo[i_fifo].buffer = p_fifo->buffer;
p_aout->fifo[i_fifo].l_unit = 0;
- InitializeIncrement( &p_aout->fifo[i_fifo].unit_increment, p_fifo->l_rate, p_aout->sys.l_rate );
+ InitializeIncrement( &p_aout->fifo[i_fifo].unit_increment, p_fifo->l_rate, p_aout->l_rate );
p_aout->fifo[i_fifo].l_units = p_fifo->l_units;
break;
case AOUT_ADEC_STEREO_FIFO:
p_aout->fifo[i_fifo].b_die = 0;
- p_aout->fifo[i_fifo].b_stereo = p_fifo->b_stereo;
+ p_aout->fifo[i_fifo].i_channels = p_fifo->i_channels;
p_aout->fifo[i_fifo].l_rate = p_fifo->l_rate;
p_aout->fifo[i_fifo].l_frame_size = p_fifo->l_frame_size;
{
p_fifo->b_start_frame = 1;
p_fifo->l_next_frame = (p_fifo->l_start_frame + 1) & AOUT_FIFO_SIZE;
- p_fifo->l_unit = p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo);
+ p_fifo->l_unit = p_fifo->l_start_frame * (p_fifo->l_frame_size >> (p_fifo->i_channels - 1));
break;
}
p_fifo->l_start_frame = (p_fifo->l_start_frame + 1) & AOUT_FIFO_SIZE;
}
}
- l_units = ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) * (p_fifo->l_frame_size >> p_fifo->b_stereo);
+ l_units = ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) * (p_fifo->l_frame_size >> (p_fifo->i_channels - 1));
l_rate = p_fifo->l_rate + ((aout_date - p_fifo->date[p_fifo->l_start_frame]) / 256);
// fprintf( stderr, "aout debug: %lli (%li);\n", aout_date - p_fifo->date[p_fifo->l_start_frame], l_rate );
- InitializeIncrement( &p_fifo->unit_increment, l_rate, p_aout->sys.l_rate );
+ InitializeIncrement( &p_fifo->unit_increment, l_rate, p_aout->l_rate );
p_fifo->l_units = (((l_units - (p_fifo->l_unit -
- (p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo))))
- * p_aout->sys.l_rate) / l_rate) + 1;
+ (p_fifo->l_start_frame * (p_fifo->l_frame_size >> (p_fifo->i_channels - 1)))))
+ * p_aout->l_rate) / l_rate) + 1;
/* We release the lock before leaving */
vlc_mutex_unlock( &p_fifo->data_lock );
if ( p_aout->fifo[i_fifo].l_units > p_aout->l_units )
{
l_buffer = 0;
- while ( l_buffer < (p_aout->l_units << 1) ) /* p_aout->sys.b_stereo == 1 */
+ while ( l_buffer < (p_aout->l_units << 1) ) /* p_aout->i_channels - 1 == 1 */
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[p_aout->fifo[i_fifo].l_unit] );
else
{
l_buffer = 0;
- while ( l_buffer < (p_aout->fifo[i_fifo].l_units << 1) ) /* p_aout->sys.b_stereo == 1 */
+ while ( l_buffer < (p_aout->fifo[i_fifo].l_units << 1) ) /* p_aout->i_channels - 1 == 1 */
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[p_aout->fifo[i_fifo].l_unit] );
if ( p_aout->fifo[i_fifo].l_units > p_aout->l_units )
{
l_buffer = 0;
- while ( l_buffer < (p_aout->l_units << 1) ) /* p_aout->sys.b_stereo == 1 */
+ while ( l_buffer < (p_aout->l_units << 1) ) /* p_aout->i_channels - 1 == 1 */
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[2*p_aout->fifo[i_fifo].l_unit] );
else
{
l_buffer = 0;
- while ( l_buffer < (p_aout->fifo[i_fifo].l_units << 1) ) /* p_aout->sys.b_stereo */
+ while ( l_buffer < (p_aout->fifo[i_fifo].l_units << 1) ) /* p_aout->i_channels - 1 == 1 */
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[2*p_aout->fifo[i_fifo].l_unit] );
{
if ( !p_aout->fifo[i_fifo].b_next_frame )
{
- if ( NextFrame(p_aout, &p_aout->fifo[i_fifo], p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->sys.l_rate))) )
+ if ( NextFrame(p_aout, &p_aout->fifo[i_fifo], p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
{
break;
}
if ( p_aout->fifo[i_fifo].l_units > l_units )
{
- l_buffer_limit = p_aout->l_units << 1; /* p_aout->sys.b_stereo == 1 */
+ l_buffer_limit = p_aout->l_units << 1; /* p_aout->i_channels - 1 == 1 */
while ( l_buffer < l_buffer_limit )
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[p_aout->fifo[i_fifo].l_unit] );
UPDATE_INCREMENT( p_aout->fifo[i_fifo].unit_increment, p_aout->fifo[i_fifo].l_unit )
- if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].b_stereo == 0 */
+ if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].i_channels - 1 == 0 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 0)) )
{
- p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].b_stereo == 0 */
+ p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].i_channels - 1 == 0 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 0));
}
}
else
{
l_buffer_limit = l_buffer + (p_aout->fifo[i_fifo].l_units << 1);
- /* p_aout->sys.b_stereo == 1 */
+ /* p_aout->i_channels - 1 == 1 */
while ( l_buffer < l_buffer_limit )
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[p_aout->fifo[i_fifo].l_unit] );
UPDATE_INCREMENT( p_aout->fifo[i_fifo].unit_increment, p_aout->fifo[i_fifo].l_unit )
- if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].b_stereo == 0 */
+ if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].i_channels - 1 == 0 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 0)) )
{
- p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].b_stereo == 0 */
+ p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].i_channels - 1 == 0 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 0));
}
}
{
if ( !p_aout->fifo[i_fifo].b_next_frame )
{
- if ( NextFrame(p_aout, &p_aout->fifo[i_fifo], p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->sys.l_rate))) )
+ if ( NextFrame(p_aout, &p_aout->fifo[i_fifo], p_aout->date + ((((mtime_t)(l_buffer >> 1)) * 1000000) / ((mtime_t)p_aout->l_rate))) )
{
break;
}
if ( p_aout->fifo[i_fifo].l_units > l_units )
{
- l_buffer_limit = p_aout->l_units << 1; /* p_aout->sys.b_stereo == 1 */
+ l_buffer_limit = p_aout->l_units << 1; /* p_aout->i_channels - 1 == 1 */
while ( l_buffer < l_buffer_limit )
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[2*p_aout->fifo[i_fifo].l_unit+1] );
UPDATE_INCREMENT( p_aout->fifo[i_fifo].unit_increment, p_aout->fifo[i_fifo].l_unit )
- if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].b_stereo == 1 */
+ if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].i_channels - 1 == 1 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 1)) )
{
- p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].b_stereo == 1 */
+ p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].i_channels - 1 == 1 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 1));
}
}
else
{
l_buffer_limit = l_buffer + (p_aout->fifo[i_fifo].l_units << 1);
- /* p_aout->sys.b_stereo == 1 */
+ /* p_aout->i_channels - 1 == 1 */
while ( l_buffer < l_buffer_limit )
{
p_aout->s32_buffer[l_buffer++] +=
(s32)( ((s16 *)p_aout->fifo[i_fifo].buffer)[2*p_aout->fifo[i_fifo].l_unit+1] );
UPDATE_INCREMENT( p_aout->fifo[i_fifo].unit_increment, p_aout->fifo[i_fifo].l_unit )
- if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].b_stereo == 1 */
+ if ( p_aout->fifo[i_fifo].l_unit >= /* p_aout->fifo[i_fifo].i_channels - 1 == 1 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 1)) )
{
- p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].b_stereo == 1 */
+ p_aout->fifo[i_fifo].l_unit -= /* p_aout->fifo[i_fifo].i_channels - 1 == 1 */
((AOUT_FIFO_SIZE + 1) * (p_aout->fifo[i_fifo].l_frame_size >> 1));
}
}
}
vlc_mutex_unlock( &p_aout->fifos_lock );
- l_buffer_limit = p_aout->l_units << 1; /* p_aout->sys.b_stereo == 1 */
+ l_buffer_limit = p_aout->l_units << 1; /* p_aout->i_channels - 1 == 1 */
for ( l_buffer = 0; l_buffer < l_buffer_limit; l_buffer++ )
{
p_aout->s32_buffer[l_buffer] = 0;
}
- l_bytes = p_aout->p_sys_getbufinfo( &p_aout->sys );
- p_aout->date = mdate() + ((((mtime_t)(l_bytes / 4)) * 1000000) / ((mtime_t)p_aout->sys.l_rate)); /* sizeof(s16) << p_aout->sys.b_stereo == 4 */
- p_aout->p_sys_playsamples( &p_aout->sys, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(s16) );
+ l_bytes = p_aout->p_sys_getbufinfo( p_aout );
+ p_aout->date = mdate() + ((((mtime_t)(l_bytes / 4)) * 1000000) / ((mtime_t)p_aout->l_rate)); /* sizeof(s16) << (p_aout->i_channels - 1) == 4 */
+ p_aout->p_sys_playsamples( 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 );
" functions.\nIf a command name is provided as argument, displays a short "\
"inline help about the command.\n" },
{ "play-audio", PlayAudio, /* play-audio */
- /* format: */ "stereo=i? rate=i? s ",
+ /* format: */ "channels=i? rate=i? s ",
/* summary: */ "play an audio file",
- /* usage: */ "play-audio [stereo=1/0] [rate=r] <file>",
+ /* usage: */ "play-audio [channels=1/2] [rate=r] <file>",
/* help: */ "Load and play an audio file." },
{ "play-video", PlayVideo, /* play-video */
/* format: */ "s ",
}
/* Set default configuration */
- fifo.b_stereo = AOUT_DEFAULT_STEREO;
+ fifo.i_channels = 1 + AOUT_DEFAULT_STEREO;
fifo.l_rate = AOUT_DEFAULT_RATE;
- /* The stereo and rate parameters are essential ! */
+ /* The channels and rate parameters are essential ! */
/* Parse parameters - see command list above */
for ( i_arg = 1; i_arg < i_argc; i_arg++ )
{
switch( p_argv[i_arg].i_index )
{
- case 0: /* stereo */
- fifo.b_stereo = p_argv[i_arg].i_num;
+ case 0: /* channels */
+ fifo.i_channels = p_argv[i_arg].i_num;
break;
case 1: /* rate */
fifo.l_rate = p_argv[i_arg].i_num;
}
/* Setting up the type of the fifo */
- switch ( fifo.b_stereo )
+ switch ( fifo.i_channels )
{
- case 0:
+ case 1:
fifo.i_type = AOUT_INTF_MONO_FIFO;
break;
- case 1:
+ case 2:
fifo.i_type = AOUT_INTF_STEREO_FIFO;
break;
default:
- intf_IntfMsg("play-audio error: stereo must be 0 or 1");
+ intf_IntfMsg("play-audio error: channels must be 1 or 2");
return( INTF_OTHER_ERROR );
}
/* Get file size to calculate number of audio units */
fstat( i_fd, &stat_buffer );
- fifo.l_units = ( long )( stat_buffer.st_size / (sizeof(s16) << fifo.b_stereo) );
+ fifo.l_units = ( long )( stat_buffer.st_size / (sizeof(s16) << (fifo.i_channels - 1)) );
/* Allocate memory, read file and close it */
- if ( (fifo.buffer = malloc(sizeof(s16)*(fifo.l_units << fifo.b_stereo))) == NULL ) /* !! */
+ if ( (fifo.buffer = malloc(sizeof(s16)*(fifo.l_units << (fifo.i_channels - 1)))) == NULL ) /* !! */
{
intf_IntfMsg("play-audio error: not enough memory to read `%s'", psz_file );
close( i_fd ); /* close file */
return( INTF_OTHER_ERROR );
}
- if ( read(i_fd, fifo.buffer, sizeof(s16)*(fifo.l_units << fifo.b_stereo))
- != sizeof(s16)*(fifo.l_units << fifo.b_stereo) )
+ if ( read(i_fd, fifo.buffer, sizeof(s16)*(fifo.l_units << (fifo.i_channels - 1)))
+ != sizeof(s16)*(fifo.l_units << (fifo.i_channels - 1)) )
{
intf_IntfMsg("play-audio error: can't read %s", psz_file);
free( fifo.buffer );
close( i_fd );
/* Now we can work out how many output units we can compute with the fifo */
- fifo.l_units = (long)(((s64)fifo.l_units*(s64)p_main->p_aout->sys.l_rate)/(s64)fifo.l_rate);
+ fifo.l_units = (long)(((s64)fifo.l_units*(s64)p_main->p_aout->l_rate)/(s64)fifo.l_rate);
/* Create the fifo */
if ( aout_CreateFifo(p_main->p_aout, &fifo) == NULL )