[Scummvm-cvs-logs] SF.net SVN: scummvm: [32967] scummvm/trunk/backends/platform/psp

joostp at users.sourceforge.net joostp at users.sourceforge.net
Tue Jul 8 19:20:27 CEST 2008


Revision: 32967
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32967&view=rev
Author:   joostp
Date:     2008-07-08 10:20:26 -0700 (Tue, 08 Jul 2008)

Log Message:
-----------
changes for new Mixer API

Modified Paths:
--------------
    scummvm/trunk/backends/platform/psp/osys_psp.cpp
    scummvm/trunk/backends/platform/psp/osys_psp.h

Modified: scummvm/trunk/backends/platform/psp/osys_psp.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/osys_psp.cpp	2008-07-08 16:25:39 UTC (rev 32966)
+++ scummvm/trunk/backends/platform/psp/osys_psp.cpp	2008-07-08 17:20:26 UTC (rev 32967)
@@ -72,7 +72,7 @@
 };
 
 
-OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0) {
+OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0), _mixer(0) {
 
 	memset(_palette, 0, sizeof(_palette));
 
@@ -99,11 +99,11 @@
 
 void OSystem_PSP::initBackend() {
 	_savefile = new DefaultSaveFileManager();
-	_mixer = new Audio::MixerImpl(this);
 	_timer = new DefaultTimerManager();
-	setSoundCallback(Audio::Mixer::mixCallback, _mixer);
 	setTimerCallback(&timer_handler, 10);
 
+	setupMixer();
+
 	OSystem::initBackend();
 }
 
@@ -586,7 +586,15 @@
 	SDL_DestroyMutex((SDL_mutex *)mutex);
 }
 
-bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) {
+void OSystem_PSP::mixCallback(void *sys, byte *samples, int len) {
+	OSystem_PSP *this_ = (OSystem_PSP *)sys;
+	assert(this_);
+
+	if (this_->_mixer)
+		this_->_mixer->mixCallback(samples, len);
+}
+
+void OSystem_PSP::setupMixer(void) {
 	SDL_AudioSpec desired;
 	SDL_AudioSpec obtained;
 
@@ -613,23 +621,31 @@
 	desired.format = AUDIO_S16SYS;
 	desired.channels = 2;
 	desired.samples = samples;
-	desired.callback = proc;
-	desired.userdata = param;
+	desired.callback = mixCallback;
+	desired.userdata = this;
+
+	assert(!_mixer);
+	_mixer = new Audio::MixerImpl(this);
+	assert(_mixer);
+
 	if (SDL_OpenAudio(&desired, &obtained) != 0) {
-		return false;
+		warning("Could not open audio: %s", SDL_GetError());
+		_samplesPerSec = 0;
+		_mixer->setReady(false);
+	} else {
+		// Note: This should be the obtained output rate, but it seems that at
+		// least on some platforms SDL will lie and claim it did get the rate
+		// even if it didn't. Probably only happens for "weird" rates, though.
+		_samplesPerSec = obtained.freq;
+		
+		// Tell the mixer that we are ready and start the sound processing
+		_mixer->setOutputRate(_samplesPerSec);
+		_mixer->setReady(true);
+
+		SDL_PauseAudio(0);
 	}
-	// Note: This should be the obtained output rate, but it seems that at
-	// least on some platforms SDL will lie and claim it did get the rate
-	// even if it didn't. Probably only happens for "weird" rates, though.
-	_samplesPerSec = obtained.freq;
-	SDL_PauseAudio(0);
-	return true;
 }
 
-int OSystem_PSP::getOutputSampleRate() const {
-	return _samplesPerSec;
-}
-
 void OSystem_PSP::quit() {
 	SDL_CloseAudio();
 	SDL_Quit();

Modified: scummvm/trunk/backends/platform/psp/osys_psp.h
===================================================================
--- scummvm/trunk/backends/platform/psp/osys_psp.h	2008-07-08 16:25:39 UTC (rev 32966)
+++ scummvm/trunk/backends/platform/psp/osys_psp.h	2008-07-08 17:20:26 UTC (rev 32967)
@@ -26,6 +26,7 @@
 #include "common/scummsys.h"
 #include "common/system.h"
 #include "graphics/surface.h"
+#include "sound/mixer_intern.h"
 #include "backends/fs/psp/psp-fs-factory.h"
 
 
@@ -71,7 +72,7 @@
 	SceCtrlData pad;
 
 	Common::SaveFileManager *_savefile;
-	Audio::Mixer *_mixer;
+	Audio::MixerImpl *_mixer;
 	Common::TimerManager *_timer;
 
 public:
@@ -129,9 +130,8 @@
 	virtual void unlockMutex(MutexRef mutex);
 	virtual void deleteMutex(MutexRef mutex);
 
-	typedef void (*SoundProc)(void *param, byte *buf, int len);
-	virtual bool setSoundCallback(SoundProc proc, void *param);
-	virtual int getOutputSampleRate() const;
+	static void mixCallback(void *sys, byte *samples, int len);
+	virtual void setupMixer(void);
 
 	Common::SaveFileManager *getSavefileManager() { return _savefile; }
 	Audio::Mixer *getMixer() { return _mixer; }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list