Mercurial > sdl-ios-xcode
diff src/audio/dsp/SDL_dspaudio.c @ 1037:c5dedfdb4e42
Date: Tue, 01 Feb 2005 17:53:07 -0800
From: Bill May
Subject: [SDL] Diffs for dsp audio in case of failures.
The rewrite recently done for 1.2.8 forgot to handle error cases
by closing the audio.
Here is a patch that does.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 12 Feb 2005 19:39:08 +0000 |
parents | 4675910b0b7b |
children | 644b39bf7253 |
line wrap: on
line diff
--- a/src/audio/dsp/SDL_dspaudio.c Sat Feb 12 18:03:54 2005 +0000 +++ b/src/audio/dsp/SDL_dspaudio.c Sat Feb 12 19:39:08 2005 +0000 @@ -187,6 +187,7 @@ flags &= ~O_NONBLOCK; if ( fcntl(audio_fd, F_SETFL, flags) < 0 ) { SDL_SetError("Couldn't set audio blocking mode"); + DSP_CloseAudio(this); return(-1); } } @@ -195,6 +196,7 @@ if ( ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &value) < 0 ) { perror("SNDCTL_DSP_GETFMTS"); SDL_SetError("Couldn't get audio format list"); + DSP_CloseAudio(this); return(-1); } @@ -252,6 +254,7 @@ } if ( format == 0 ) { SDL_SetError("Couldn't find any hardware audio formats"); + DSP_CloseAudio(this); return(-1); } spec->format = test_format; @@ -262,6 +265,7 @@ (value != format) ) { perror("SNDCTL_DSP_SETFMT"); SDL_SetError("Couldn't set audio format"); + DSP_CloseAudio(this); return(-1); } @@ -270,6 +274,7 @@ if ( ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &value) < 0 ) { perror("SNDCTL_DSP_CHANNELS"); SDL_SetError("Cannot set the number of channels"); + DSP_CloseAudio(this); return(-1); } spec->channels = value; @@ -279,6 +284,7 @@ if ( ioctl(audio_fd, SNDCTL_DSP_SPEED, &value) < 0 ) { perror("SNDCTL_DSP_SPEED"); SDL_SetError("Couldn't set audio frequency"); + DSP_CloseAudio(this); return(-1); } spec->freq = value; @@ -290,6 +296,7 @@ for ( frag_spec = 0; (0x01<<frag_spec) < spec->size; ++frag_spec ); if ( (0x01<<frag_spec) != spec->size ) { SDL_SetError("Fragment size must be a power of two"); + DSP_CloseAudio(this); return(-1); } frag_spec |= 0x00020000; /* two fragments, for low latency */ @@ -317,6 +324,7 @@ mixlen = spec->size; mixbuf = (Uint8 *)SDL_AllocAudioMem(mixlen); if ( mixbuf == NULL ) { + DSP_CloseAudio(this); return(-1); } memset(mixbuf, spec->silence, spec->size);