aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2016-03-13 14:30:36 +0100
committerJohannes Schickel2016-03-13 15:45:19 +0100
commit5e0b136992c45cbc68d2c8b1e0c61a9e7cce34cb (patch)
treec52234d4b2db5a384a149d5292b44713ec5520f9
parent5340df3faf9ee73bc1102ebb5f95c5d82c37df7f (diff)
downloadscummvm-rg350-5e0b136992c45cbc68d2c8b1e0c61a9e7cce34cb.tar.gz
scummvm-rg350-5e0b136992c45cbc68d2c8b1e0c61a9e7cce34cb.tar.bz2
scummvm-rg350-5e0b136992c45cbc68d2c8b1e0c61a9e7cce34cb.zip
BACKENDS: Fill buffer at start of AudioCD playback.
As suggested by clone2727.
-rw-r--r--backends/audiocd/audiocd-stream.cpp5
-rw-r--r--backends/audiocd/audiocd-stream.h2
-rw-r--r--backends/audiocd/linux/linux-audiocd.cpp4
-rw-r--r--backends/audiocd/win32/win32-audiocd.cpp4
4 files changed, 11 insertions, 4 deletions
diff --git a/backends/audiocd/audiocd-stream.cpp b/backends/audiocd/audiocd-stream.cpp
index 17be5f6dc6..3c0d0957da 100644
--- a/backends/audiocd/audiocd-stream.cpp
+++ b/backends/audiocd/audiocd-stream.cpp
@@ -170,8 +170,11 @@ void AudioCDStream::onTimer() {
}
}
-void AudioCDStream::startTimer() {
+void AudioCDStream::startTimer(bool fillBuffer) {
_forceStop = false;
+ if (fillBuffer) {
+ onTimer();
+ }
g_system->getTimerManager()->installTimerProc(timerProc, 10 * 1000, this, "AudioCDStream");
}
diff --git a/backends/audiocd/audiocd-stream.h b/backends/audiocd/audiocd-stream.h
index 706c1e9095..dbc6a6321b 100644
--- a/backends/audiocd/audiocd-stream.h
+++ b/backends/audiocd/audiocd-stream.h
@@ -67,7 +67,7 @@ protected:
virtual uint getEndFrame() const = 0;
virtual bool readFrame(int frame, int16 *buffer) = 0;
- void startTimer();
+ void startTimer(bool fillBuffer = false);
void stopTimer();
enum {
diff --git a/backends/audiocd/linux/linux-audiocd.cpp b/backends/audiocd/linux/linux-audiocd.cpp
index f557e00d6d..a86860106a 100644
--- a/backends/audiocd/linux/linux-audiocd.cpp
+++ b/backends/audiocd/linux/linux-audiocd.cpp
@@ -117,7 +117,9 @@ private:
LinuxAudioCDStream::LinuxAudioCDStream(int fd, const cdrom_tocentry &startEntry, const cdrom_tocentry &endEntry) :
_fd(fd), _startEntry(startEntry), _endEntry(endEntry) {
- startTimer();
+ // We fill the buffer here already to prevent any out of sync issues due
+ // to the CD not yet having spun up.
+ startTimer(true);
}
LinuxAudioCDStream::~LinuxAudioCDStream() {
diff --git a/backends/audiocd/win32/win32-audiocd.cpp b/backends/audiocd/win32/win32-audiocd.cpp
index 2fbf9c8810..97c45a4946 100644
--- a/backends/audiocd/win32/win32-audiocd.cpp
+++ b/backends/audiocd/win32/win32-audiocd.cpp
@@ -96,7 +96,9 @@ private:
Win32AudioCDStream::Win32AudioCDStream(HANDLE handle, const TRACK_DATA &startEntry, const TRACK_DATA &endEntry) :
_driveHandle(handle), _startEntry(startEntry), _endEntry(endEntry), _buffer(), _frame(0), _bufferPos(kSamplesPerFrame), _bufferFrame(0) {
- startTimer();
+ // We fill the buffer here already to prevent any out of sync issues due
+ // to the CD not yet having spun up.
+ startTimer(true);
}
Win32AudioCDStream::~Win32AudioCDStream() {