diff options
author | colin <colin@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-10-25 10:27:20 +0000 |
---|---|---|
committer | colin <colin@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-10-25 10:27:20 +0000 |
commit | 305cadba3f6d42e9c2a0eaaf4e740c89e86731a8 (patch) | |
tree | 595e1cb1e283bc84b81a65707e49c1b6c245c531 /libao2 | |
parent | 3fd50298d328868acb8ab901faea9c4d9bb4493e (diff) |
Check what we obtain in SDL_OpenAudio() - allows to build the
correct audio filter chain if soundcard doesn't support what is
requested.
Checked by Arpi
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7909 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2')
-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 6fdd52cb16..37bfe1e1cc 100644 --- a/libao2/ao_sdl.c +++ b/libao2/ao_sdl.c @@ -147,7 +147,7 @@ void outputaudio(void *unused, Uint8 *stream, int len) { static int init(int rate,int channels,int format,int flags){ /* SDL Audio Specifications */ - SDL_AudioSpec aspec; + SDL_AudioSpec aspec, obtained; int i; /* Allocate ring-buffer memory */ @@ -216,13 +216,41 @@ void callback(void *userdata, Uint8 *stream, int len); userdata is the pointer s } /* Open the audio device and start playing sound! */ - if(SDL_OpenAudio(&aspec, NULL) < 0) { + if(SDL_OpenAudio(&aspec, &obtained) < 0) { printf("SDL: Unable to open audio: %s\n", SDL_GetError()); return(0); } - - if(verbose) printf("SDL: buf size = %d\n",aspec.size); - if(ao_data.buffersize==-1) ao_data.buffersize=aspec.size; + + /* did we got what we wanted ? */ + ao_data.channels=obtained.channels; + ao_data.samplerate=obtained.freq; + + switch(obtained.format) { + case AUDIO_U8 : + ao_data.format = AFMT_U8; + break; + case AUDIO_S16LSB : + ao_data.format = AFMT_S16_LE; + break; + case AUDIO_S16MSB : + ao_data.format = AFMT_S16_BE; + break; + case AUDIO_S8 : + ao_data.format = AFMT_S8; + break; + case AUDIO_U16LSB : + ao_data.format = AFMT_U16_LE; + break; + case AUDIO_U16MSB : + ao_data.format = AFMT_U16_BE; + break; + default: + printf("SDL: Unsupported SDL audio format: 0x%x.\n", obtained.format); + return 0; + } + + if(verbose) printf("SDL: buf size = %d\n",obtained.size); + ao_data.buffersize=obtained.size; /* unsilence audio, if callback is ready */ SDL_PauseAudio(0); |