Commit 50229412 authored by Felix Paul Kühne's avatar Felix Paul Kühne

audiounit_ios: merge stability improvements from AUHAL module

parent 1c3973d7
...@@ -336,20 +336,24 @@ static void Pause (audio_output_t *p_aout, bool pause, mtime_t date) ...@@ -336,20 +336,24 @@ static void Pause (audio_output_t *p_aout, bool pause, mtime_t date)
static void Flush(audio_output_t *p_aout, bool wait) static void Flush(audio_output_t *p_aout, bool wait)
{ {
struct aout_sys_t * p_sys = p_aout->sys; struct aout_sys_t *p_sys = p_aout->sys;
int32_t availableBytes;
vlc_mutex_lock(&p_sys->lock);
TPCircularBufferTail(&p_sys->circular_buffer, &availableBytes);
if (wait) { if (wait) {
int32_t availableBytes;
vlc_mutex_lock(&p_sys->lock);
TPCircularBufferTail(&p_sys->circular_buffer, &availableBytes);
while (availableBytes > 0) { while (availableBytes > 0) {
vlc_cond_wait(&p_sys->cond, &p_sys->lock); vlc_cond_wait(&p_sys->cond, &p_sys->lock);
TPCircularBufferTail(&p_sys->circular_buffer, &availableBytes); TPCircularBufferTail(&p_sys->circular_buffer, &availableBytes);
} }
vlc_mutex_unlock(&p_sys->lock); } else {
} else /* flush circular buffer if data is left */
/* flush circular buffer */ if (availableBytes > 0)
TPCircularBufferClear(&p_aout->sys->circular_buffer); TPCircularBufferClear(&p_aout->sys->circular_buffer);
}
vlc_mutex_unlock(&p_sys->lock);
} }
static int TimeGet(audio_output_t *p_aout, mtime_t *delay) static int TimeGet(audio_output_t *p_aout, mtime_t *delay)
...@@ -402,9 +406,11 @@ static OSStatus RenderCallback(vlc_object_t *p_obj, ...@@ -402,9 +406,11 @@ static OSStatus RenderCallback(vlc_object_t *p_obj,
} else { } else {
int32_t bytesToCopy = __MIN(bytesRequested, availableBytes); int32_t bytesToCopy = __MIN(bytesRequested, availableBytes);
memcpy(targetBuffer, buffer, bytesToCopy); if (likely(bytesToCopy > 0)) {
TPCircularBufferConsume(&p_sys->circular_buffer, bytesToCopy); memcpy(targetBuffer, buffer, bytesToCopy);
ioData->mBuffers[0].mDataByteSize = bytesToCopy; TPCircularBufferConsume(&p_sys->circular_buffer, bytesToCopy);
ioData->mBuffers[0].mDataByteSize = bytesToCopy;
}
} }
vlc_cond_signal(&p_sys->cond); vlc_cond_signal(&p_sys->cond);
......
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