From 29fa4b56e050570ecafb3930d1e10519f2d78325 Mon Sep 17 00:00:00 2001 From: nehalmistry <> Date: Sun, 8 Dec 2002 17:55:58 +0000 Subject: [PATCH] more updates to cdda; now loops somewhat correctly --- src/sound/cdda.cpp | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/sound/cdda.cpp b/src/sound/cdda.cpp index 02119f62c..7bb8264b6 100644 --- a/src/sound/cdda.cpp +++ b/src/sound/cdda.cpp @@ -37,7 +37,7 @@ #include <stdlib.h> #include <stdio.h> -global struct cdrom_read_audio data; +global struct cdrom_read_audio readdata; local void *bufstart; /*---------------------------------------------------------------------------- @@ -48,29 +48,35 @@ local int CDRead(Sample *sample, void *buf, int len) { static int pos = 0; static int count = 0; + int end = (int)bufstart + 2352 * 28; ++count; - data.addr.lba = CDtocentry[CDTrack].cdte_addr.lba + pos / 2352; - data.addr_format = CDROM_LBA; - data.nframes = 14; + readdata.addr.lba = CDtocentry[CDTrack].cdte_addr.lba + pos / 2352; + readdata.addr_format = CDROM_LBA; + readdata.nframes = 14; - if (count == 4) { - data.buf = bufstart; - ioctl(CDDrive, CDROMREADAUDIO, &data); - } else if (count == 8) { - count = 0; - sample->User = bufstart; - data.buf = sample->User + 2352 * 14; - ioctl(CDDrive, CDROMREADAUDIO, &data); - } + if (count == 5) { + readdata.buf = bufstart; + ioctl(CDDrive, CDROMREADAUDIO, &readdata); + } else if (count == 1) { + readdata.buf = bufstart + 2352 * 14; + ioctl(CDDrive, CDROMREADAUDIO, &readdata); + } - if (count) - sample->User += len; - pos += len; + sample->User += len; - memcpy(buf, sample->User, len); + if ((int)sample->User + len <= end) { + memcpy(buf, sample->User, len); + } else { + count = 0; + memcpy(buf, sample->User, end - (int)sample->User); + memcpy(buf + (end - (int)sample->User), bufstart, + len - (end - (int)sample->User)); +// sample->User = bufstart + len - (end - (int)sample->User); + sample->User = bufstart + (end - (int)sample->User); + } return len; } @@ -103,7 +109,7 @@ global Sample* LoadCD(const char* name __attribute__((unused)), sample->Channels = 2; sample->SampleSize = 16; sample->Frequency = 44100; - sample->User = malloc(8192 * 10); + sample->User = malloc(2352 * 28); sample->Type = &CDStreamSampleType; sample->Length = 0;