changeset 277:c27763d388d9

Fixed oversampling buffer overflow problems.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 25 Dec 2004 08:49:02 +0000
parents e040962f4f4c
children 69ec4290030c
files src/xmms-sid.c
diffstat 1 files changed, 13 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/xmms-sid.c	Thu Dec 23 18:02:00 2004 +0000
+++ b/src/xmms-sid.c	Sat Dec 25 08:49:02 2004 +0000
@@ -386,25 +386,22 @@
 		audioGot = myStatus.sidPlayer->plrFillBuffer(&myStatus,
 			oversampleBuffer, (XS_AUDIOBUF_SIZE * myStatus.oversampleFactor));
 		
+		audioGot /= myStatus.oversampleFactor;		
+		
 		/* Execute rate-conversion with filtering */
-		audioGot = xs_rateconv_filter(
-			audioBuffer, oversampleBuffer,
-			myStatus.audioFormat,
-			myStatus.oversampleFactor,
-			XS_AUDIOBUF_SIZE);
+		if (xs_rateconv_filter(audioBuffer, oversampleBuffer,
+			myStatus.audioFormat, myStatus.oversampleFactor,
+			audioGot) < 0)
+			{
+			XSERR("Oversampling rate-conversion pass failed.\n");
+			XS_MUTEX_LOCK(xs_status);
+			xs_status.isError = TRUE;
+			XS_MUTEX_UNLOCK(xs_status);
+			goto xs_err_exit;
+			}
 		} else 
 		audioGot = myStatus.sidPlayer->plrFillBuffer(&myStatus, audioBuffer, XS_AUDIOBUF_SIZE);
 
-	/* Check for errors */
-	if (audioGot < 0)
-		{
-		XSERR("Audio rendering or rate-conversion failed.\n",
-		XS_MUTEX_LOCK(xs_status);
-		xs_status.isError = TRUE;
-		XS_MUTEX_UNLOCK(xs_status);
-		goto xs_err_exit;
-		}
-
 	/* I <3 visualice/haujobb */
 	xs_plugin_ip.add_vis_pcm(
 		xs_plugin_ip.output->written_time(),
@@ -414,7 +411,7 @@
 	/* Wait a little */
 	while (xs_status.isPlaying &&
 		(xs_status.currSong == myStatus.currSong) &&
-		((guint) xs_plugin_ip.output->buffer_free() < audioGot))
+		(xs_plugin_ip.output->buffer_free() < audioGot))
 		xmms_usleep(500);
 
 	/* Output audio */