Commit 8fbed4b8 authored by Ryan C. Gordon's avatar Ryan C. Gordon

Merged r4713:4714 from branches/SDL-1.2: CoreAudio 64-bit & Snow Leopard fixes.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404368
parent 40e8b690
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <CoreAudio/CoreAudio.h> #include <CoreAudio/CoreAudio.h>
#include <CoreServices/CoreServices.h> #include <CoreServices/CoreServices.h>
#include <AudioUnit/AudioUnit.h> #include <AudioUnit/AudioUnit.h>
#if MAC_OS_X_VERSION_MAX_ALLOWED == 1050 #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1050
#include <AudioUnit/AUNTComponent.h> #include <AudioUnit/AUNTComponent.h>
#endif #endif
...@@ -250,12 +250,13 @@ outputCallback(void *inRefCon, ...@@ -250,12 +250,13 @@ outputCallback(void *inRefCon,
AudioUnitRenderActionFlags * ioActionFlags, AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp, const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber, UInt32 inNumberFrames, UInt32 inBusNumber, UInt32 inNumberFrames,
AudioBufferList * ioDataList) AudioBufferList * ioData)
{ {
SDL_AudioDevice *this = (SDL_AudioDevice *) inRefCon; SDL_AudioDevice *this = (SDL_AudioDevice *) inRefCon;
AudioBuffer *ioData = &ioDataList->mBuffers[0]; AudioBuffer *abuf;
UInt32 remaining, len; UInt32 remaining, len;
void *ptr; void *ptr;
UInt32 i;
/* Is there ever more than one buffer, and what do you do with it? */ /* Is there ever more than one buffer, and what do you do with it? */
if (ioDataList->mNumberBuffers != 1) { if (ioDataList->mNumberBuffers != 1) {
...@@ -264,7 +265,10 @@ outputCallback(void *inRefCon, ...@@ -264,7 +265,10 @@ outputCallback(void *inRefCon,
/* Only do anything if audio is enabled and not paused */ /* Only do anything if audio is enabled and not paused */
if (!this->enabled || this->paused) { if (!this->enabled || this->paused) {
SDL_memset(ioData->mData, this->spec.silence, ioData->mDataByteSize); for (i = 0; i < ioData->mNumberBuffers; i++) {
abuf = &ioData->mBuffers[i];
SDL_memset(abuf->mData, this->spec.silence, abuf->mDataByteSize);
}
return 0; return 0;
} }
...@@ -276,29 +280,29 @@ outputCallback(void *inRefCon, ...@@ -276,29 +280,29 @@ outputCallback(void *inRefCon,
assert(this->spec.channels == ioData->mNumberChannels); assert(this->spec.channels == ioData->mNumberChannels);
*/ */
remaining = ioData->mDataByteSize; for (i = 0; i < ioData->mNumberBuffers; i++) {
ptr = ioData->mData; abuf = &ioData->mBuffers[i];
while (remaining > 0) { remaining = abuf->mDataByteSize;
if (this->hidden->bufferOffset >= this->hidden->bufferSize) { ptr = abuf->mData;
/* Generate the data */ while (remaining > 0) {
SDL_memset(this->hidden->buffer, this->spec.silence, if (bufferOffset >= bufferSize) {
this->hidden->bufferSize); /* Generate the data */
SDL_mutexP(this->mixer_lock); SDL_memset(buffer, this->spec.silence, bufferSize);
(*this->spec.callback) (this->spec.userdata, this->hidden->buffer, SDL_mutexP(this->mixer_lock);
this->hidden->bufferSize); (*this->spec.callback)(this->spec.userdata,
SDL_mutexV(this->mixer_lock); buffer, bufferSize);
this->hidden->bufferOffset = 0; SDL_mutexV(this->mixer_lock);
} bufferOffset = 0;
}
len = this->hidden->bufferSize - this->hidden->bufferOffset; len = bufferSize - bufferOffset;
if (len > remaining) if (len > remaining)
len = remaining; len = remaining;
SDL_memcpy(ptr, SDL_memcpy(ptr, (char *)buffer + bufferOffset, len);
(char *) this->hidden->buffer + this->hidden->bufferOffset, ptr = (char *)ptr + len;
len); remaining -= len;
ptr = (char *) ptr + len; bufferOffset += len;
remaining -= len; }
this->hidden->bufferOffset += len;
} }
return 0; return 0;
...@@ -433,7 +437,7 @@ prepare_audiounit(_THIS, const char *devname, int iscapture, ...@@ -433,7 +437,7 @@ prepare_audiounit(_THIS, const char *devname, int iscapture,
SDL_memset(&desc, '\0', sizeof(ComponentDescription)); SDL_memset(&desc, '\0', sizeof(ComponentDescription));
desc.componentType = kAudioUnitType_Output; desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_HALOutput; desc.componentSubType = kAudioUnitSubType_DefaultOutput;
desc.componentManufacturer = kAudioUnitManufacturer_Apple; desc.componentManufacturer = kAudioUnitManufacturer_Apple;
comp = FindNextComponent(NULL, &desc); comp = FindNextComponent(NULL, &desc);
...@@ -486,7 +490,7 @@ prepare_audiounit(_THIS, const char *devname, int iscapture, ...@@ -486,7 +490,7 @@ prepare_audiounit(_THIS, const char *devname, int iscapture,
kAudioUnitProperty_SetRenderCallback, kAudioUnitProperty_SetRenderCallback,
scope, bus, &callback, sizeof(callback)); scope, bus, &callback, sizeof(callback));
CHECK_RESULT CHECK_RESULT
("AudioUnitSetProperty (kAudioUnitProperty_SetInputCallback)"); ("AudioUnitSetProperty (kAudioUnitProperty_SetRenderCallback)");
/* Calculate the final parameters for this audio specification */ /* Calculate the final parameters for this audio specification */
SDL_CalculateAudioSpec(&this->spec); SDL_CalculateAudioSpec(&this->spec);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment