From 97b4a6b51f146b16eeac9334605f8a6fff1c0af7 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sat, 24 Dec 2011 17:54:41 +0100
Subject: [PATCH] output/osx: clear render buffer when there's not enough data

When we don't have enough data, generate some silence, hoping the
input buffer will fill soon.  Reducing the render buffer size is not
legal.
---
 NEWS                    | 1 +
 src/output/osx_plugin.c | 5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 212648f20..8a2f11be6 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ ver 0.16.7 (2011/??/??)
   - httpd: fix excessive buffering
   - openal: force 16 bit playback, as 8 bit doesn't work
   - osx: remove sleep call from render callback
+  - osx: clear render buffer when there's not enough data
 * fix moving after current song
 
 
diff --git a/src/output/osx_plugin.c b/src/output/osx_plugin.c
index d7abae096..5284afc29 100644
--- a/src/output/osx_plugin.c
+++ b/src/output/osx_plugin.c
@@ -118,7 +118,6 @@ osx_render(void *vdata,
 	g_mutex_lock(od->mutex);
 
 	bytes_to_copy = MIN(od->len, buffer_size);
-	buffer_size = bytes_to_copy;
 	od->len -= bytes_to_copy;
 
 	trailer_length = od->buffer_size - od->pos;
@@ -140,7 +139,9 @@ osx_render(void *vdata,
 	g_cond_signal(od->condition);
 	g_mutex_unlock(od->mutex);
 
-	buffer->mDataByteSize = buffer_size;
+	if (bytes_to_copy < buffer_size)
+		memset((unsigned char*)buffer->mData + bytes_to_copy, 0,
+		       buffer_size - bytes_to_copy);
 
 	return 0;
 }