aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sfx
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/sfx')
-rw-r--r--engines/sci/sfx/core.cpp46
-rw-r--r--engines/sci/sfx/sfx_pcm.h1
-rw-r--r--engines/sci/sfx/sfx_timer.h56
-rw-r--r--engines/sci/sfx/timer.cpp78
4 files changed, 14 insertions, 167 deletions
diff --git a/engines/sci/sfx/core.cpp b/engines/sci/sfx/core.cpp
index 5d6812711f..a08c0824b5 100644
--- a/engines/sci/sfx/core.cpp
+++ b/engines/sci/sfx/core.cpp
@@ -26,14 +26,13 @@
/* Sound subsystem core: Event handler, sound player dispatching */
#include "sci/tools.h"
-#include "sci/sfx/sfx_timer.h"
#include "sci/sfx/sfx_iterator_internal.h"
#include "sci/sfx/sfx_player.h"
#include "sci/sfx/mixer.h"
#include "sci/sfx/sci_midi.h"
-#include "common/mutex.h"
#include "common/system.h"
+#include "common/timer.h"
namespace Sci {
@@ -46,8 +45,6 @@ int sciprintf(char *msg, ...);
static sfx_player_t *player = NULL;
sfx_pcm_mixer_t *mixer = NULL;
static sfx_pcm_device_t *pcm_device = NULL;
-static sfx_timer_t *timer = NULL;
-extern sfx_timer_t sfx_timer_scummvm;
extern sfx_pcm_device_t sfx_pcm_driver_scummvm;
int sfx_pcm_available() {
@@ -355,19 +352,19 @@ int sfx_play_iterator_pcm(song_iterator_t *it, song_handle_t handle) {
return 0;
}
-static void _sfx_timer_callback(void *data) {
- if (timer) {
- /* First run the player, to give it a chance to fill
- ** the audio buffer */
+#define FREQ 60
+#define DELAY (1000000 / FREQ)
- if (player)
- player->maintenance();
- assert(timer);
+static void _sfx_timer_callback(void *data) {
+ /* First run the player, to give it a chance to fill
+ ** the audio buffer */
- if (mixer)
- mixer->process(mixer);
- }
+ if (player)
+ player->maintenance();
+
+ if (mixer)
+ mixer->process(mixer);
}
void sfx_init(sfx_state_t *self, ResourceManager *resmgr, int flags) {
@@ -421,7 +418,7 @@ void sfx_init(sfx_state_t *self, ResourceManager *resmgr, int flags) {
if (!resmgr) {
sciprintf("[SFX] Warning: No resource manager present, cannot initialise player\n");
player = NULL;
- } else if (player->init(resmgr, timer ? timer->delay_ms : 0)) {
+ } else if (player->init(resmgr, DELAY / 1000)) {
sciprintf("[SFX] Song player '%s' reported error, disabled\n", player->name);
player = NULL;
}
@@ -440,21 +437,9 @@ void sfx_init(sfx_state_t *self, ResourceManager *resmgr, int flags) {
// still being initialized.
if (pcm_device || (player && player->maintenance)) {
- timer = &sfx_timer_scummvm;
-
- if (!timer) {
- fprintf(stderr, "[SFX] " __FILE__": Could not find timing mechanism\n");
- fprintf(stderr, "[SFX] Disabled sound support\n");
- pcm_device = NULL;
- player = NULL;
- mixer = NULL;
- return;
- }
-
- if (timer->init(_sfx_timer_callback, NULL)) {
+ if (!g_system->getTimerManager()->installTimerProc(&_sfx_timer_callback, DELAY, NULL)) {
warning("[SFX] " __FILE__": Timer failed to initialize");
warning("[SFX] Disabled sound support");
- timer = NULL;
pcm_device = NULL;
player = NULL;
mixer = NULL;
@@ -465,15 +450,12 @@ void sfx_init(sfx_state_t *self, ResourceManager *resmgr, int flags) {
}
void sfx_exit(sfx_state_t *self) {
- if (timer && timer->exit())
- warning("[SFX] Timer reported error on exit");
+ g_system->getTimerManager()->removeTimerProc(&_sfx_timer_callback);
// The timer API guarantees no more callbacks are running or will be
// run from this point onward, so we can now safely exit the mixer and
// player.
- timer = NULL;
-
#ifdef DEBUG_SONG_API
fprintf(stderr, "[sfx-core] Uninitialising\n");
#endif
diff --git a/engines/sci/sfx/sfx_pcm.h b/engines/sci/sfx/sfx_pcm.h
index 598c99f5b5..89ccee04d9 100644
--- a/engines/sci/sfx/sfx_pcm.h
+++ b/engines/sci/sfx/sfx_pcm.h
@@ -27,7 +27,6 @@
#define SCI_SFX_SFX_PCM_H
#include "sci/sfx/sfx_core.h"
-#include "sci/sfx/sfx_timer.h"
#include "sci/sfx/sfx_time.h"
namespace Sci {
diff --git a/engines/sci/sfx/sfx_timer.h b/engines/sci/sfx/sfx_timer.h
deleted file mode 100644
index ffeb208a8f..0000000000
--- a/engines/sci/sfx/sfx_timer.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef SCI_SFX_SFX_TIMER_H
-#define SCI_SFX_SFX_TIMER_H
-
-#include "sci/sfx/sfx_core.h"
-
-namespace Sci {
-
-struct sfx_timer_t {
- int delay_ms; /* Approximate delay (in milliseconds) between calls */
-
- int (*init)(void (*callback)(void *data), void *data);
- /* Initializes the timer
- ** Parameters: (void* -> void) callback:
- ** 'data' must contain the next argument:
- ** (void *) data: Must always be passed to the callback
- ** Returns : (int) SFX_OK on success, SFX_ERROR on failure
- ** This does not start the timer yet, it just specifies and initializes it.
- ** This function is called exactly once (provided that the timer is used at all).
- */
-
- int (*exit)();
- /* Stops the timer
- ** Returns : (int) SFX_OK on success, SFX_ERROR on failure
- ** All resources allocated with the timer should be freed as an effect
- ** of this.
- */
-};
-
-} // End of namespace Sci
-
-#endif // SCI_SFX_SFX_TIMER_H
diff --git a/engines/sci/sfx/timer.cpp b/engines/sci/sfx/timer.cpp
deleted file mode 100644
index 334c0e5155..0000000000
--- a/engines/sci/sfx/timer.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "common/timer.h"
-#include "engines/engine.h"
-#include "sci/sfx/sfx_timer.h"
-
-namespace Sci {
-
-#define FREQ 60
-#define DELAY (1000000 / FREQ)
-
-typedef void (*scummvm_timer_callback_t)(void *);
-static scummvm_timer_callback_t scummvm_timer_callback = NULL;
-static void *scummvm_timer_callback_data = NULL;
-extern ::Engine *g_engine;
-
-void scummvm_timer_update_internal(void *ptr) {
- if (scummvm_timer_callback)
- scummvm_timer_callback(scummvm_timer_callback_data);
-}
-
-int scummvm_timer_start(void (*func)(void *), void *data) {
- if (scummvm_timer_callback) {
- fprintf(stderr,
- "Error: Attempt to initialize gametick timer more than once\n");
- return SFX_ERROR;
- }
-
- if (!func) {
- fprintf(stderr,
- "Error: Attempt to initialize gametick timer w/o callback\n");
- return SFX_ERROR;
- }
-
- scummvm_timer_callback = func;
- scummvm_timer_callback_data = data;
-
- ::g_engine->getTimerManager()->installTimerProc(&scummvm_timer_update_internal, DELAY, NULL);
- return SFX_OK;
-}
-
-int scummvm_timer_stop() {
- ::g_engine->getTimerManager()->removeTimerProc(&scummvm_timer_update_internal);
- scummvm_timer_callback = NULL;
- return SFX_OK;
-}
-
-
-sfx_timer_t sfx_timer_scummvm = {
- DELAY / 1000,
- &scummvm_timer_start,
- &scummvm_timer_stop
-};
-
-} // End of namespace Sci