diff options
author | atmosfear <atmosfear@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-06-09 07:36:32 +0000 |
---|---|---|
committer | atmosfear <atmosfear@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-06-09 07:36:32 +0000 |
commit | 7a5aba6dfe8dde79deaf3219cfcb5b0e92659e7d (patch) | |
tree | 8dee32b8f582a444954cbb54bc317866f9671142 /libao2/ao_sdl.c | |
parent | d6b8127cb56b1f1d35b6b03d21cc87bbd28b9bcb (diff) | |
download | mpv-7a5aba6dfe8dde79deaf3219cfcb5b0e92659e7d.tar.bz2 mpv-7a5aba6dfe8dde79deaf3219cfcb5b0e92659e7d.tar.xz |
Better audio format handling.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1067 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2/ao_sdl.c')
-rw-r--r-- | libao2/ao_sdl.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/libao2/ao_sdl.c b/libao2/ao_sdl.c index 717a63e9da..a1deb492d4 100644 --- a/libao2/ao_sdl.c +++ b/libao2/ao_sdl.c @@ -15,6 +15,7 @@ #include "audio_out.h" #include "audio_out_internal.h" +#include "afmt.h" #include "../libvo/fastmemcpy.h" @@ -46,7 +47,7 @@ char *sdl_adriver; // General purpose Ring-buffering routines #define BUFFSIZE 4096 -#define NUM_BUFS 16 +#define NUM_BUFS 16 static unsigned char *buffer[NUM_BUFS]; @@ -132,7 +133,10 @@ static int control(int cmd,int arg){ // SDL Callback function void outputaudio(void *unused, Uint8 *stream, int len) { //SDL_MixAudio(stream, read_buffer(buffers, len), len, SDL_MIX_MAXVOLUME); + //if(!full_buffers) printf("SDL: Buffer underrun!\n"); + read_buffer(stream, len); + //printf("SDL: Full Buffers: %i\n", full_buffers); } // open & setup audio device @@ -154,12 +158,34 @@ static int init(int rate,int channels,int format,int flags){ } + /* The desired audio format (see SDL_AudioSpec) */ + switch(format) { + case AFMT_U8: + aspec.format = AUDIO_U8; + break; + case AFMT_S16_LE: + aspec.format = AUDIO_S16LSB; + break; + case AFMT_S16_BE: + aspec.format = AUDIO_S16MSB; + break; + case AFMT_S8: + aspec.format = AUDIO_S8; + break; + case AFMT_U16_LE: + aspec.format = AUDIO_U16LSB; + break; + case AFMT_U16_BE: + aspec.format = AUDIO_U16MSB; + break; + default: + printf("SDL: Unsupported audio format: 0x%x.\n", format); + return 0; + } + /* The desired audio frequency in samples-per-second. */ aspec.freq = rate; - /* The desired audio format (see SDL_AudioSpec) */ - aspec.format = (format == 16) ? AUDIO_S16 : AUDIO_U8; - /* Number of channels (mono/stereo) */ aspec.channels = channels; @@ -203,7 +229,9 @@ static void uninit(){ // stop playing and empty buffers (for seeking/pause) static void reset(){ - + + //printf("SDL: reset called!\n"); + /* Reset ring-buffer state */ buf_read=0; buf_write=0; |