Mercurial > sdl-ios-xcode
changeset 3242:af4a5af3cd2b
Bye bye SoundManager, you are officially obsolete...
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 05 Sep 2009 09:03:35 +0000 |
parents | 08c5964f2a34 |
children | 5db962a9a991 |
files | configure.in include/SDL_config.h.in include/SDL_config_macosx.h src/audio/SDL_audio.c src/audio/macosx/SDL_coreaudio.c src/audio/macrom/SDL_romaudio.c src/audio/macrom/SDL_romaudio.h |
diffstat | 7 files changed, 2 insertions(+), 366 deletions(-) [+] |
line wrap: on
line diff
--- a/configure.in Sat Sep 05 07:33:54 2009 +0000 +++ b/configure.in Sat Sep 05 09:03:35 2009 +0000 @@ -2883,8 +2883,6 @@ if test x$enable_audio = xyes; then AC_DEFINE(SDL_AUDIO_DRIVER_COREAUDIO) SOURCES="$SOURCES $srcdir/src/audio/macosx/*.c" - AC_DEFINE(SDL_AUDIO_DRIVER_SNDMGR) - SOURCES="$SOURCES $srcdir/src/audio/macrom/*.c" have_audio=yes fi # Set up files for the atomic operations library
--- a/include/SDL_config.h.in Sat Sep 05 07:33:54 2009 +0000 +++ b/include/SDL_config.h.in Sat Sep 05 09:03:35 2009 +0000 @@ -199,7 +199,6 @@ #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H #undef SDL_AUDIO_DRIVER_PAUDIO #undef SDL_AUDIO_DRIVER_QSA -#undef SDL_AUDIO_DRIVER_SNDMGR #undef SDL_AUDIO_DRIVER_SUNAUDIO #undef SDL_AUDIO_DRIVER_WINWAVEOUT #undef SDL_AUDIO_DRIVER_FUSIONSOUND
--- a/include/SDL_config_macosx.h Sat Sep 05 07:33:54 2009 +0000 +++ b/include/SDL_config_macosx.h Sat Sep 05 09:03:35 2009 +0000 @@ -103,7 +103,6 @@ /* Enable various audio drivers */ #define SDL_AUDIO_DRIVER_COREAUDIO 1 -#define SDL_AUDIO_DRIVER_SNDMGR 1 #define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DUMMY 1
--- a/src/audio/SDL_audio.c Sat Sep 05 07:33:54 2009 +0000 +++ b/src/audio/SDL_audio.c Sat Sep 05 09:03:35 2009 +0000 @@ -127,9 +127,6 @@ #if SDL_AUDIO_DRIVER_COREAUDIOIPHONE &COREAUDIOIPHONE_bootstrap, #endif -#if SDL_AUDIO_DRIVER_SNDMGR - &SNDMGR_bootstrap, -#endif #if SDL_AUDIO_DRIVER_MINT &MINTAUDIO_GSXB_bootstrap, &MINTAUDIO_MCSN_bootstrap,
--- a/src/audio/macosx/SDL_coreaudio.c Sat Sep 05 07:33:54 2009 +0000 +++ b/src/audio/macosx/SDL_coreaudio.c Sat Sep 05 09:03:35 2009 +0000 @@ -22,8 +22,9 @@ #include "SDL_config.h" #include <CoreAudio/CoreAudio.h> +#include <CoreServices/CoreServices.h> #include <AudioUnit/AudioUnit.h> -#ifdef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER +#if MAC_OS_X_VERSION_MAX_ALLOWED == 1050 #include <AudioUnit/AUNTComponent.h> #endif
--- a/src/audio/macrom/SDL_romaudio.c Sat Sep 05 07:33:54 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* This should work on PowerPC and Intel Mac OS X, and Carbonized Mac OS 9. */ - -#if defined(__APPLE__) && defined(__MACH__) -# define SDL_MACOS_NAME "Mac OS X" -# include <Carbon/Carbon.h> -#elif TARGET_API_MAC_CARBON && (UNIVERSAL_INTERFACES_VERSION > 0x0335) -# define SDL_MACOS_NAME "Mac OS 9" -# include <Carbon.h> -#else -# define SDL_MACOS_NAME "Mac OS 9" -# include <Sound.h> /* SoundManager interface */ -# include <Gestalt.h> -# include <DriverServices.h> -#endif - -#if !defined(NewSndCallBackUPP) && (UNIVERSAL_INTERFACES_VERSION < 0x0335) -#if !defined(NewSndCallBackProc) /* avoid circular redefinition... */ -#define NewSndCallBackUPP NewSndCallBackProc -#endif -#if !defined(NewSndCallBackUPP) -#define NewSndCallBackUPP NewSndCallBackProc -#endif -#endif - -#include "SDL_audio.h" -#include "../SDL_audio_c.h" -#include "../SDL_sysaudio.h" -#include "SDL_romaudio.h" - -#pragma options align=power - -static volatile SInt32 audio_is_locked = 0; -static volatile SInt32 need_to_mix = 0; - -static UInt8 *buffer[2]; -static volatile UInt32 running = 0; -static CmpSoundHeader header; -static volatile Uint32 fill_me = 0; - - -static void -mix_buffer(SDL_AudioDevice * audio, UInt8 * buffer) -{ - if (!audio->paused) { -#ifdef __MACOSX__ - SDL_mutexP(audio->mixer_lock); -#endif - if (audio->convert.needed) { - audio->spec.callback(audio->spec.userdata, - (Uint8 *) audio->convert.buf, - audio->convert.len); - SDL_ConvertAudio(&audio->convert); - if (audio->convert.len_cvt != audio->spec.size) { - /* Uh oh... probably crashes here */ ; - } - SDL_memcpy(buffer, audio->convert.buf, audio->convert.len_cvt); - } else { - audio->spec.callback(audio->spec.userdata, buffer, - audio->spec.size); - } -#ifdef __MACOSX__ - SDL_mutexV(audio->mixer_lock); -#endif - } - - DecrementAtomic((SInt32 *) & need_to_mix); -} - -#ifndef __MACOSX__ -static void -SNDMGR_LockDevice(_THIS) -{ - IncrementAtomic((SInt32 *) & audio_is_locked); -} - -static void -SNDMGR_UnlockDevice(_THIS) -{ - SInt32 oldval; - - oldval = DecrementAtomic((SInt32 *) & audio_is_locked); - if (oldval != 1) /* != 1 means audio is still locked. */ - return; - - /* Did we miss the chance to mix in an interrupt? Do it now. */ - if (BitAndAtomic(0xFFFFFFFF, (UInt32 *) & need_to_mix)) { - /* - * Note that this could be a problem if you missed an interrupt - * while the audio was locked, and get preempted by a second - * interrupt here, but that means you locked for way too long anyhow. - */ - mix_buffer(this, buffer[fill_me]); - } -} -#endif // __MACOSX__ - -static void -callBackProc(SndChannel * chan, SndCommand * cmd_passed) -{ - UInt32 play_me; - SndCommand cmd; - SDL_AudioDevice *audio = (SDL_AudioDevice *) chan->userInfo; - - IncrementAtomic((SInt32 *) & need_to_mix); - - fill_me = cmd_passed->param2; /* buffer that has just finished playing, so fill it */ - play_me = !fill_me; /* filled buffer to play _now_ */ - - if (!audio->enabled) { - return; - } - - /* queue previously mixed buffer for playback. */ - header.samplePtr = (Ptr) buffer[play_me]; - cmd.cmd = bufferCmd; - cmd.param1 = 0; - cmd.param2 = (long) &header; - SndDoCommand(chan, &cmd, 0); - - SDL_memset(buffer[fill_me], 0, audio->spec.size); - - /* - * if audio device isn't locked, mix the next buffer to be queued in - * the memory block that just finished playing. - */ - if (!BitAndAtomic(0xFFFFFFFF, (UInt32 *) & audio_is_locked)) { - mix_buffer(audio, buffer[fill_me]); - } - - /* set this callback to run again when current buffer drains. */ - if (running) { - cmd.cmd = callBackCmd; - cmd.param1 = 0; - cmd.param2 = play_me; - - SndDoCommand(chan, &cmd, 0); - } -} - -static void -SNDMGR_CloseDevice(_THIS) -{ - running = 0; - - if (this->hidden != NULL) { - if (this->hidden->channel) { - SndDisposeChannel(this->hidden->channel, true); - this->hidden->channel = NULL; - } - - SDL_free(buffer[0]); - SDL_free(buffer[1]); - buffer[0] = buffer[1] = NULL; - - SDL_free(this->hidden); - this->hidden = NULL; - } -} - -static int -SNDMGR_OpenDevice(_THIS, const char *devname, int iscapture) -{ - SDL_AudioSpec *spec = &this->spec; - SndChannelPtr channel = NULL; - SndCallBackUPP callback; - int sample_bits; - int i; - long initOptions; - - /* Initialize all variables that we clean on shutdown */ - this->hidden = (struct SDL_PrivateAudioData *) - SDL_malloc((sizeof *this->hidden)); - if (this->hidden == NULL) { - SDL_OutOfMemory(); - return 0; - } - SDL_memset(this->hidden, 0, (sizeof *this->hidden)); - - /* !!! FIXME: iterate through format matrix... */ - /* Very few conversions are required, but... */ - switch (spec->format) { - case AUDIO_S8: - spec->format = AUDIO_U8; - break; - case AUDIO_U16LSB: - spec->format = AUDIO_S16LSB; - break; - case AUDIO_U16MSB: - spec->format = AUDIO_S16MSB; - break; - case AUDIO_F32LSB: - spec->format = AUDIO_F32MSB; - break; - } - SDL_CalculateAudioSpec(&this->spec); - - /* initialize bufferCmd header */ - SDL_memset(&header, 0, sizeof(header)); - callback = (SndCallBackUPP) NewSndCallBackUPP(callBackProc); - sample_bits = spec->size / spec->samples / spec->channels * 8; - -#ifdef DEBUG_AUDIO - fprintf(stderr, - "Audio format 0x%x, channels = %d, sample_bits = %d, frequency = %d\n", - spec->format, spec->channels, sample_bits, spec->freq); -#endif /* DEBUG_AUDIO */ - - header.numChannels = spec->channels; - header.sampleSize = sample_bits; - header.sampleRate = spec->freq << 16; - header.numFrames = spec->samples; - header.encode = cmpSH; - - /* Note that we install the 16bitLittleEndian Converter if needed. */ - if (spec->format == AUDIO_S16LSB) { - header.compressionID = fixedCompression; - header.format = k16BitLittleEndianFormat; - } else if (spec->format == AUDIO_S32MSB) { - header.compressionID = fixedCompression; - header.format = k32BitFormat; - } else if (spec->format == AUDIO_S32LSB) { - header.compressionID = fixedCompression; - header.format = k32BitLittleEndianFormat; - } else if (spec->format == AUDIO_F32MSB) { - header.compressionID = fixedCompression; - header.format = kFloat32Format; - } - - /* allocate 2 buffers */ - for (i = 0; i < 2; i++) { - buffer[i] = (UInt8 *) SDL_malloc(sizeof(UInt8) * spec->size); - if (buffer[i] == NULL) { - SNDMGR_CloseDevice(this); - SDL_OutOfMemory(); - return 0; - } - SDL_memset(buffer[i], 0, spec->size); - } - - /* Create the sound manager channel */ - channel = (SndChannelPtr) SDL_malloc(sizeof(*channel)); - if (channel == NULL) { - SNDMGR_CloseDevice(this); - SDL_OutOfMemory(); - return 0; - } - this->hidden->channel = channel; - if (spec->channels >= 2) { - initOptions = initStereo; - } else { - initOptions = initMono; - } - channel->userInfo = (long) this; - channel->qLength = 128; - if (SndNewChannel(&channel, sampledSynth, initOptions, callback) != noErr) { - SNDMGR_CloseDevice(this); - SDL_SetError("Unable to create audio channel"); - return 0; - } - - /* start playback */ - { - SndCommand cmd; - cmd.cmd = callBackCmd; - cmd.param2 = 0; - running = 1; - SndDoCommand(channel, &cmd, 0); - } - - return 1; -} - -static int -SNDMGR_Init(SDL_AudioDriverImpl * impl) -{ - /* Set the function pointers */ - impl->OpenDevice = SNDMGR_OpenDevice; - impl->CloseDevice = SNDMGR_CloseDevice; - impl->ProvidesOwnCallbackThread = 1; - impl->OnlyHasDefaultOutputDevice = 1; - -/* Mac OS X uses threaded audio, so normal thread code is okay */ -#ifndef __MACOSX__ - impl->LockDevice = SNDMGR_LockDevice; - impl->UnlockDevice = SNDMGR_UnlockDevice; - impl->SkipMixerLock = 1; -#endif - - return 1; -} - -AudioBootStrap SNDMGR_bootstrap = { - "sndmgr", SDL_MACOS_NAME " SoundManager", SNDMGR_Init, 0 -}; - -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/audio/macrom/SDL_romaudio.h Sat Sep 05 07:33:54 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#ifndef _SDL_romaudio_h -#define _SDL_romaudio_h - -#include "../SDL_sysaudio.h" - -/* Hidden "this" pointer for the audio functions */ -#define _THIS SDL_AudioDevice *this - -struct SDL_PrivateAudioData -{ - /* Sound manager audio channel */ - SndChannelPtr channel; -}; - -#endif /* _SDL_romaudio_h */ -/* vi: set ts=4 sw=4 expandtab: */