summaryrefslogtreecommitdiffstats
path: root/libao2/ao_sdl.c
diff options
context:
space:
mode:
authorcolin <colin@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-25 10:27:20 +0000
committercolin <colin@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-25 10:27:20 +0000
commit305cadba3f6d42e9c2a0eaaf4e740c89e86731a8 (patch)
tree595e1cb1e283bc84b81a65707e49c1b6c245c531 /libao2/ao_sdl.c
parent3fd50298d328868acb8ab901faea9c4d9bb4493e (diff)
downloadmpv-305cadba3f6d42e9c2a0eaaf4e740c89e86731a8.tar.bz2
mpv-305cadba3f6d42e9c2a0eaaf4e740c89e86731a8.tar.xz
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/ao_sdl.c')
-rw-r--r--libao2/ao_sdl.c38
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);