aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sfx/pcm_device/scummvm.cpp
diff options
context:
space:
mode:
authorJordi Vilalta Prat2009-02-15 06:10:59 +0000
committerJordi Vilalta Prat2009-02-15 06:10:59 +0000
commitfa6e10e9cec163845aa29e7940c86e9c9ab8a2bc (patch)
treece87338830cc8c149e1de545246bcefe4f45da00 /engines/sci/sfx/pcm_device/scummvm.cpp
parent7c148ddf021c990fa866b7600f979aac9a5b26c9 (diff)
downloadscummvm-rg350-fa6e10e9cec163845aa29e7940c86e9c9ab8a2bc.tar.gz
scummvm-rg350-fa6e10e9cec163845aa29e7940c86e9c9ab8a2bc.tar.bz2
scummvm-rg350-fa6e10e9cec163845aa29e7940c86e9c9ab8a2bc.zip
Import the SCI engine sources from the FreeSCI Glutton branch (it doesn't compile yet)
svn-id: r38192
Diffstat (limited to 'engines/sci/sfx/pcm_device/scummvm.cpp')
-rw-r--r--engines/sci/sfx/pcm_device/scummvm.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/engines/sci/sfx/pcm_device/scummvm.cpp b/engines/sci/sfx/pcm_device/scummvm.cpp
new file mode 100644
index 0000000000..1b64dd40d3
--- /dev/null
+++ b/engines/sci/sfx/pcm_device/scummvm.cpp
@@ -0,0 +1,60 @@
+#include "sfx_time.h"
+#include "sfx_pcm.h"
+#include "engines/engine.h"
+#include "sound/audiostream.h"
+#include "sound/mixer.h"
+
+
+static int pcmout_scummvm_framesize;
+static Audio::AppendableAudioStream * pcmout_scummvm_audiostream;
+static Audio::SoundHandle pcmout_scummvm_sound_handle;
+
+
+static int pcmout_scummvm_init(sfx_pcm_device_t *self) {
+ int pcmout_scummvm_audiostream_flags = Audio::Mixer::FLAG_16BITS | Audio::Mixer::FLAG_STEREO;
+
+#ifdef SCUMM_LITTLE_ENDIAN
+ pcmout_scummvm_audiostream_flags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+#endif
+
+ self->buf_size = 2048 << 1;
+ self->conf.rate = g_engine->_mixer->getOutputRate();
+ self->conf.stereo = SFX_PCM_STEREO_LR;
+ self->conf.format = SFX_PCM_FORMAT_S16_NATIVE;
+ pcmout_scummvm_framesize = SFX_PCM_FRAME_SIZE(self->conf);
+
+ pcmout_scummvm_audiostream = Audio::makeAppendableAudioStream(self->conf.rate, pcmout_scummvm_audiostream_flags);
+ ::g_engine->_mixer->playInputStream(Audio::Mixer::kSFXSoundType, &pcmout_scummvm_sound_handle, pcmout_scummvm_audiostream);
+
+ return SFX_OK;
+}
+
+static void pcmout_scummvm_exit(sfx_pcm_device_t *self) {
+}
+
+static int pcmout_scummvm_output(sfx_pcm_device_t *self, byte *buf, int count,
+ sfx_timestamp_t *timestamp) {
+
+ byte *__buf = new byte[count * pcmout_scummvm_framesize];
+
+ memcpy(__buf, buf, count * pcmout_scummvm_framesize);
+
+ pcmout_scummvm_audiostream->queueBuffer(__buf, count * pcmout_scummvm_framesize);
+
+ return SFX_OK;
+}
+
+
+sfx_pcm_device_t sfx_pcm_driver_scummvm = {
+ "ScummVM",
+ "0.1",
+ &pcmout_scummvm_init,
+ &pcmout_scummvm_exit,
+ NULL,
+ &pcmout_scummvm_output,
+ NULL,
+ {0, 0, 0},
+ 0,
+ NULL,
+ NULL
+ };