Mercurial > hg > xmms-sid
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 */