aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/audiocd/audiocd.h5
-rw-r--r--backends/audiocd/default/default-audiocd.h1
-rw-r--r--backends/audiocd/sdl/sdl-audiocd.cpp13
-rw-r--r--backends/audiocd/sdl/sdl-audiocd.h1
-rw-r--r--backends/platform/dc/dc.h3
-rw-r--r--backends/platform/ds/arm9/source/osystem_ds.h1
6 files changed, 20 insertions, 4 deletions
diff --git a/backends/audiocd/audiocd.h b/backends/audiocd/audiocd.h
index 72a01fd87e..598893e315 100644
--- a/backends/audiocd/audiocd.h
+++ b/backends/audiocd/audiocd.h
@@ -114,6 +114,11 @@ public:
virtual bool openCD() = 0;
/**
+ * Close the currently open CD drive
+ */
+ virtual void closeCD() = 0;
+
+ /**
* Poll CD status.
* @return true if CD audio is playing
*/
diff --git a/backends/audiocd/default/default-audiocd.h b/backends/audiocd/default/default-audiocd.h
index 1d64690add..6011a8fafd 100644
--- a/backends/audiocd/default/default-audiocd.h
+++ b/backends/audiocd/default/default-audiocd.h
@@ -43,6 +43,7 @@ public:
virtual Status getStatus() const; // Subclasses should override for better status results
bool openCD();
+ virtual void closeCD() {}
/**
* Open a CD using the specified drive index
diff --git a/backends/audiocd/sdl/sdl-audiocd.cpp b/backends/audiocd/sdl/sdl-audiocd.cpp
index ff50c56af3..d745f29a12 100644
--- a/backends/audiocd/sdl/sdl-audiocd.cpp
+++ b/backends/audiocd/sdl/sdl-audiocd.cpp
@@ -43,10 +43,7 @@ SdlAudioCDManager::SdlAudioCDManager()
}
SdlAudioCDManager::~SdlAudioCDManager() {
- if (_cdrom) {
- SDL_CDStop(_cdrom);
- SDL_CDClose(_cdrom);
- }
+ closeCD();
}
bool SdlAudioCDManager::openCD(int drive) {
@@ -67,6 +64,14 @@ bool SdlAudioCDManager::openCD(int drive) {
return (_cdrom != NULL);
}
+void SdlAudioCDManager::closeCD() {
+ if (_cdrom) {
+ SDL_CDStop(_cdrom);
+ SDL_CDClose(_cdrom);
+ _cdrom = 0;
+ }
+}
+
void SdlAudioCDManager::stopCD() {
// Stop CD Audio in 1/10th of a second
_cdStopTime = SDL_GetTicks() + 100;
diff --git a/backends/audiocd/sdl/sdl-audiocd.h b/backends/audiocd/sdl/sdl-audiocd.h
index bfad7b6805..4ece8ddfe7 100644
--- a/backends/audiocd/sdl/sdl-audiocd.h
+++ b/backends/audiocd/sdl/sdl-audiocd.h
@@ -39,6 +39,7 @@ public:
protected:
virtual bool openCD(int drive);
+ virtual void closeCD();
virtual void updateCD();
virtual bool pollCD() const;
virtual void playCD(int track, int num_loops, int start_frame, int duration);
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index 80e484f6f8..b49080324d 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -60,6 +60,9 @@ class DCCDManager : public DefaultAudioCDManager {
// Initialize the specified CD drive for audio playback.
bool openCD();
+ // Close the open CD drive
+ void closeCD() {}
+
// Poll cdrom status
// Returns true if cd audio is playing
bool pollCD();
diff --git a/backends/platform/ds/arm9/source/osystem_ds.h b/backends/platform/ds/arm9/source/osystem_ds.h
index 9b66e24b88..9f73e125c2 100644
--- a/backends/platform/ds/arm9/source/osystem_ds.h
+++ b/backends/platform/ds/arm9/source/osystem_ds.h
@@ -131,6 +131,7 @@ public:
// and should be replaced by an AudioCDManager subclass,
// see backends/audiocd/ and common/system.h
virtual bool openCD();
+ virtual void closeCD() {}
virtual bool pollCD();
virtual void playCD(int track, int num_loops, int start_frame, int duration);
virtual void stopCD();