Mercurial > sdl-ios-xcode
diff src/audio/macosx/SDL_coreaudio.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | dc6b59e925a2 |
children | 4da1ee79c9af |
line wrap: on
line diff
--- a/src/audio/macosx/SDL_coreaudio.c Sun May 21 17:27:13 2006 +0000 +++ b/src/audio/macosx/SDL_coreaudio.c Sun May 28 13:04:16 2006 +0000 @@ -31,44 +31,47 @@ /* Audio driver functions */ -static int Core_OpenAudio(_THIS, SDL_AudioSpec *spec); -static void Core_WaitAudio(_THIS); -static void Core_PlayAudio(_THIS); -static Uint8 *Core_GetAudioBuf(_THIS); -static void Core_CloseAudio(_THIS); +static int Core_OpenAudio (_THIS, SDL_AudioSpec * spec); +static void Core_WaitAudio (_THIS); +static void Core_PlayAudio (_THIS); +static Uint8 *Core_GetAudioBuf (_THIS); +static void Core_CloseAudio (_THIS); /* Audio driver bootstrap functions */ -static int Audio_Available(void) +static int +Audio_Available (void) { - return(1); + return (1); } -static void Audio_DeleteDevice(SDL_AudioDevice *device) +static void +Audio_DeleteDevice (SDL_AudioDevice * device) { - SDL_free(device->hidden); - SDL_free(device); + SDL_free (device->hidden); + SDL_free (device); } -static SDL_AudioDevice *Audio_CreateDevice(int devindex) +static SDL_AudioDevice * +Audio_CreateDevice (int devindex) { SDL_AudioDevice *this; /* Initialize all variables that we clean on shutdown */ - this = (SDL_AudioDevice *)SDL_malloc(sizeof(SDL_AudioDevice)); - if ( this ) { - SDL_memset(this, 0, (sizeof *this)); + this = (SDL_AudioDevice *) SDL_malloc (sizeof (SDL_AudioDevice)); + if (this) { + SDL_memset (this, 0, (sizeof *this)); this->hidden = (struct SDL_PrivateAudioData *) - SDL_malloc((sizeof *this->hidden)); + SDL_malloc ((sizeof *this->hidden)); } - if ( (this == NULL) || (this->hidden == NULL) ) { - SDL_OutOfMemory(); - if ( this ) { - SDL_free(this); + if ((this == NULL) || (this->hidden == NULL)) { + SDL_OutOfMemory (); + if (this) { + SDL_free (this); } - return(0); + return (0); } - SDL_memset(this->hidden, 0, (sizeof *this->hidden)); + SDL_memset (this->hidden, 0, (sizeof *this->hidden)); /* Set the function pointers */ this->OpenAudio = Core_OpenAudio; @@ -88,72 +91,75 @@ }; /* The CoreAudio callback */ -static OSStatus audioCallback (void *inRefCon, - AudioUnitRenderActionFlags inActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, - AudioBuffer *ioData) +static OSStatus +audioCallback (void *inRefCon, + AudioUnitRenderActionFlags inActionFlags, + const AudioTimeStamp * inTimeStamp, + UInt32 inBusNumber, AudioBuffer * ioData) { - SDL_AudioDevice *this = (SDL_AudioDevice *)inRefCon; + SDL_AudioDevice *this = (SDL_AudioDevice *) inRefCon; UInt32 remaining, len; void *ptr; /* Only do anything if audio is enabled and not paused */ - if ( ! this->enabled || this->paused ) { - SDL_memset(ioData->mData, this->spec.silence, ioData->mDataByteSize); + if (!this->enabled || this->paused) { + SDL_memset (ioData->mData, this->spec.silence, ioData->mDataByteSize); return 0; } - + /* No SDL conversion should be needed here, ever, since we accept any input format in OpenAudio, and leave the conversion to CoreAudio. */ /* - assert(!this->convert.needed); - assert(this->spec.channels == ioData->mNumberChannels); + assert(!this->convert.needed); + assert(this->spec.channels == ioData->mNumberChannels); */ - + remaining = ioData->mDataByteSize; ptr = ioData->mData; while (remaining > 0) { if (bufferOffset >= bufferSize) { /* Generate the data */ - SDL_memset(buffer, this->spec.silence, bufferSize); - SDL_mutexP(this->mixer_lock); - (*this->spec.callback)(this->spec.userdata, - buffer, bufferSize); - SDL_mutexV(this->mixer_lock); + SDL_memset (buffer, this->spec.silence, bufferSize); + SDL_mutexP (this->mixer_lock); + (*this->spec.callback) (this->spec.userdata, buffer, bufferSize); + SDL_mutexV (this->mixer_lock); bufferOffset = 0; } - + len = bufferSize - bufferOffset; if (len > remaining) len = remaining; - SDL_memcpy(ptr, (char *)buffer + bufferOffset, len); - ptr = (char *)ptr + len; + SDL_memcpy (ptr, (char *) buffer + bufferOffset, len); + ptr = (char *) ptr + len; remaining -= len; bufferOffset += len; } - + return 0; } /* Dummy functions -- we don't use thread-based audio */ -void Core_WaitAudio(_THIS) +void +Core_WaitAudio (_THIS) { return; } -void Core_PlayAudio(_THIS) +void +Core_PlayAudio (_THIS) { return; } -Uint8 *Core_GetAudioBuf(_THIS) +Uint8 * +Core_GetAudioBuf (_THIS) { - return(NULL); + return (NULL); } -void Core_CloseAudio(_THIS) +void +Core_CloseAudio (_THIS) { OSStatus result; struct AudioUnitInputCallback callback; @@ -161,31 +167,30 @@ /* stop processing the audio unit */ result = AudioOutputUnitStop (outputAudioUnit); if (result != noErr) { - SDL_SetError("Core_CloseAudio: AudioOutputUnitStop"); + SDL_SetError ("Core_CloseAudio: AudioOutputUnitStop"); return; } /* Remove the input callback */ callback.inputProc = 0; callback.inputProcRefCon = 0; - result = AudioUnitSetProperty (outputAudioUnit, - kAudioUnitProperty_SetInputCallback, - kAudioUnitScope_Input, - 0, - &callback, - sizeof(callback)); + result = AudioUnitSetProperty (outputAudioUnit, + kAudioUnitProperty_SetInputCallback, + kAudioUnitScope_Input, + 0, &callback, sizeof (callback)); if (result != noErr) { - SDL_SetError("Core_CloseAudio: AudioUnitSetProperty (kAudioUnitProperty_SetInputCallback)"); + SDL_SetError + ("Core_CloseAudio: AudioUnitSetProperty (kAudioUnitProperty_SetInputCallback)"); return; } - result = CloseComponent(outputAudioUnit); + result = CloseComponent (outputAudioUnit); if (result != noErr) { - SDL_SetError("Core_CloseAudio: CloseComponent"); + SDL_SetError ("Core_CloseAudio: CloseComponent"); return; } - - SDL_free(buffer); + + SDL_free (buffer); } #define CHECK_RESULT(msg) \ @@ -195,7 +200,8 @@ } -int Core_OpenAudio(_THIS, SDL_AudioSpec *spec) +int +Core_OpenAudio (_THIS, SDL_AudioSpec * spec) { OSStatus result = noErr; Component comp; @@ -208,7 +214,7 @@ requestedDesc.mFormatFlags = kLinearPCMFormatFlagIsPacked; requestedDesc.mChannelsPerFrame = spec->channels; requestedDesc.mSampleRate = spec->freq; - + requestedDesc.mBitsPerChannel = spec->format & 0xFF; if (spec->format & 0x8000) requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger; @@ -216,8 +222,10 @@ requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian; requestedDesc.mFramesPerPacket = 1; - requestedDesc.mBytesPerFrame = requestedDesc.mBitsPerChannel * requestedDesc.mChannelsPerFrame / 8; - requestedDesc.mBytesPerPacket = requestedDesc.mBytesPerFrame * requestedDesc.mFramesPerPacket; + requestedDesc.mBytesPerFrame = + requestedDesc.mBitsPerChannel * requestedDesc.mChannelsPerFrame / 8; + requestedDesc.mBytesPerPacket = + requestedDesc.mBytesPerFrame * requestedDesc.mFramesPerPacket; /* Locate the default output audio unit */ @@ -226,52 +234,48 @@ desc.componentManufacturer = kAudioUnitID_DefaultOutput; desc.componentFlags = 0; desc.componentFlagsMask = 0; - + comp = FindNextComponent (NULL, &desc); if (comp == NULL) { - SDL_SetError ("Failed to start CoreAudio: FindNextComponent returned NULL"); + SDL_SetError + ("Failed to start CoreAudio: FindNextComponent returned NULL"); return -1; } - + /* Open & initialize the default output audio unit */ result = OpenAComponent (comp, &outputAudioUnit); - CHECK_RESULT("OpenAComponent") - - result = AudioUnitInitialize (outputAudioUnit); - CHECK_RESULT("AudioUnitInitialize") - - /* Set the input format of the audio unit. */ + CHECK_RESULT ("OpenAComponent") + result = AudioUnitInitialize (outputAudioUnit); + CHECK_RESULT ("AudioUnitInitialize") + /* Set the input format of the audio unit. */ + result = AudioUnitSetProperty (outputAudioUnit, + kAudioUnitProperty_StreamFormat, + kAudioUnitScope_Input, + 0, + &requestedDesc, + sizeof (requestedDesc)); + CHECK_RESULT ("AudioUnitSetProperty (kAudioUnitProperty_StreamFormat)") + /* Set the audio callback */ + callback.inputProc = audioCallback; + callback.inputProcRefCon = this; result = AudioUnitSetProperty (outputAudioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Input, - 0, - &requestedDesc, - sizeof (requestedDesc)); - CHECK_RESULT("AudioUnitSetProperty (kAudioUnitProperty_StreamFormat)") + kAudioUnitProperty_SetInputCallback, + kAudioUnitScope_Input, + 0, &callback, sizeof (callback)); + CHECK_RESULT + ("AudioUnitSetProperty (kAudioUnitProperty_SetInputCallback)") + /* Calculate the final parameters for this audio specification */ + SDL_CalculateAudioSpec (spec); - /* Set the audio callback */ - callback.inputProc = audioCallback; - callback.inputProcRefCon = this; - result = AudioUnitSetProperty (outputAudioUnit, - kAudioUnitProperty_SetInputCallback, - kAudioUnitScope_Input, - 0, - &callback, - sizeof(callback)); - CHECK_RESULT("AudioUnitSetProperty (kAudioUnitProperty_SetInputCallback)") - - /* Calculate the final parameters for this audio specification */ - SDL_CalculateAudioSpec(spec); - /* Allocate a sample buffer */ bufferOffset = bufferSize = this->spec.size; - buffer = SDL_malloc(bufferSize); + buffer = SDL_malloc (bufferSize); /* Finally, start processing of the audio unit */ result = AudioOutputUnitStart (outputAudioUnit); - CHECK_RESULT("AudioOutputUnitStart") - + CHECK_RESULT ("AudioOutputUnitStart") + /* We're running! */ + return (1); +} - /* We're running! */ - return(1); -} +/* vi: set ts=4 sw=4 expandtab: */