diff options
author | Jordi Vilalta Prat | 2009-02-15 06:10:59 +0000 |
---|---|---|
committer | Jordi Vilalta Prat | 2009-02-15 06:10:59 +0000 |
commit | fa6e10e9cec163845aa29e7940c86e9c9ab8a2bc (patch) | |
tree | ce87338830cc8c149e1de545246bcefe4f45da00 /engines/sci/sfx/pcm_device/scummvm.cpp | |
parent | 7c148ddf021c990fa866b7600f979aac9a5b26c9 (diff) | |
download | scummvm-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.cpp | 60 |
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 + }; |