From 8d1801c59d67617541447a47b7fdd2cbcb4bc7cb Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Wed, 10 Sep 2008 11:43:56 +0200
Subject: audio: added function audio_buffer_resize()

To make openAudioDevice() smaller and more readable, move code to a
static function.  Also don't use realloc(), since the old value of the
buffer isn't needed anymore, saving a memcpy().
---
 src/audio.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/audio.c b/src/audio.c
index aa5f03e3f..b868edb30 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -289,6 +289,27 @@ static int flushAudioBuffer(void)
 	return ret;
 }
 
+static size_t audio_buffer_size(const struct audio_format *af)
+{
+	return (af->bits >> 3) * af->channels * (af->sampleRate >> 5);
+}
+
+static void audio_buffer_resize(size_t size)
+{
+	if (audio_buffer.size == size)
+		return;
+
+	if (audio_buffer.buffer != NULL)
+		free(audio_buffer.buffer);
+
+	if (size > 0)
+		audio_buffer.buffer = xmalloc(size);
+	else
+		audio_buffer.buffer = NULL;
+
+	audio_buffer.size = size;
+}
+
 int openAudioDevice(const struct audio_format *audioFormat)
 {
 	int ret = -1;
@@ -302,10 +323,7 @@ int openAudioDevice(const struct audio_format *audioFormat)
 		flushAudioBuffer();
 		if (audioFormat != NULL)
 			audio_buffer.format = *audioFormat;
-		audio_buffer.size = (audio_buffer.format.bits >> 3) *
-		    audio_buffer.format.channels;
-		audio_buffer.size *= audio_buffer.format.sampleRate >> 5;
-		audio_buffer.buffer = xrealloc(audio_buffer.buffer, audio_buffer.size);
+		audio_buffer_resize(audio_buffer_size(&audio_buffer.format));
 	}
 
 	syncAudioDeviceStates();
-- 
cgit v1.2.3