summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/out/ao_coreaudio.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index 38c7c7fc29..67cba53d66 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -100,30 +100,16 @@ static int get_ring_size(struct ao *ao)
ao->format, 0.5, ao->channels.num, ao->samplerate);
}
-static OSStatus theRenderProc(void *inRefCon,
- AudioUnitRenderActionFlags *inActionFlags,
- const AudioTimeStamp *inTimeStamp,
- UInt32 inBusNumber, UInt32 inNumFrames,
- AudioBufferList *ioData)
+static OSStatus render_cb_lpcm(void *ctx, AudioUnitRenderActionFlags *aflags,
+ const AudioTimeStamp *ts, UInt32 bus,
+ UInt32 frames, AudioBufferList *buffer_list)
{
- struct ao *ao = inRefCon;
- struct priv *p = ao->priv;
-
- int buffered = mp_ring_buffered(p->buffer);
- int requested = inNumFrames * p->packetSize;
-
- if (buffered > requested)
- buffered = requested;
-
- if (buffered) {
- mp_ring_read(p->buffer,
- (unsigned char *)ioData->mBuffers[0].mData,
- buffered);
- } else {
- audio_pause(ao);
- }
+ struct ao *ao = ctx;
+ struct priv *p = ao->priv;
+ int requested = frames * p->packetSize;
+ AudioBuffer buf = buffer_list->mBuffers[0];
- ioData->mBuffers[0].mDataByteSize = buffered;
+ buf.mDataByteSize = mp_ring_read(p->buffer, buf.mData, requested);
return noErr;
}
@@ -630,7 +616,7 @@ static int init(struct ao *ao, char *params)
print_buffer(p->buffer);
- renderCallback.inputProc = theRenderProc;
+ renderCallback.inputProc = render_cb_lpcm;
renderCallback.inputProcRefCon = ao;
err = AudioUnitSetProperty(p->theOutputUnit,
kAudioUnitProperty_SetRenderCallback,