diff options
author | Max Horn | 2003-07-25 13:42:05 +0000 |
---|---|---|
committer | Max Horn | 2003-07-25 13:42:05 +0000 |
commit | c520d2d423f90811e2ad2eb6f768d1a88c6c1ca2 (patch) | |
tree | 53f398d41ceea4f67c6e1bf58b2a4abc7d2f2d3a /sound | |
parent | 2ae3e45aea23a2e612276b6ce60486d21e889885 (diff) | |
download | scummvm-rg350-c520d2d423f90811e2ad2eb6f768d1a88c6c1ca2.tar.gz scummvm-rg350-c520d2d423f90811e2ad2eb6f768d1a88c6c1ca2.tar.bz2 scummvm-rg350-c520d2d423f90811e2ad2eb6f768d1a88c6c1ca2.zip |
move AudioInputStream implementations & makeInputStream into separate .cpp file
svn-id: r9190
Diffstat (limited to 'sound')
-rw-r--r-- | sound/audiostream.cpp | 91 | ||||
-rw-r--r-- | sound/audiostream.h | 72 |
2 files changed, 95 insertions, 68 deletions
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp new file mode 100644 index 0000000000..7b796b8d50 --- /dev/null +++ b/sound/audiostream.cpp @@ -0,0 +1,91 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2003 The ScummVM project + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Header$ + * + */ + +#include "audiostream.h" +#include "mixer.h" + +template<int channels, int sampleSize> +class MemoryAudioInputStream : public AudioInputStream { +protected: + const byte *_ptr; + const byte *_end; + void advance() { _ptr += channels * sampleSize; } +public: + MemoryAudioInputStream(const byte *ptr, uint len) : _ptr(ptr), _end(ptr+len) { } + virtual int size() { return (_end - _ptr) / (channels * sampleSize); } +}; + + +template<int channels> +class Input8bitSignedStream : public MemoryAudioInputStream<channels, 1> { +protected: + int16 readIntern() { int8 v = (int8)*_ptr; return v << 8; } +public: + Input8bitSignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 1>(ptr, len) { } +}; + +template<int channels> +class Input8bitUnsignedStream : public MemoryAudioInputStream<channels, 1> { +protected: + int16 readIntern() { int8 v = (int8)(*_ptr ^ 0x80); return v << 8; } +public: + Input8bitUnsignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 1>(ptr, len) { } +}; + +template<int channels> +class Input16bitSignedStream : public MemoryAudioInputStream<channels, 2> { +protected: + int16 readIntern() { return (int16)READ_BE_UINT16(_ptr); } +public: + Input16bitSignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 2>(ptr, len) { } +}; + +template<int channels> +class Input16bitUnsignedStream : public MemoryAudioInputStream<channels, 2> { +protected: + int16 readIntern() { return (int16)(READ_BE_UINT16(_ptr) ^ 0x8000); } +public: + Input16bitUnsignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 2>(ptr, len) { } +}; + + +template<int channels> +static AudioInputStream *makeInputStream(const byte *ptr, uint32 len, bool isUnsigned, bool is16Bit) { + if (isUnsigned) { + if (is16Bit) + return new Input16bitUnsignedStream<channels>(ptr, len); + else + return new Input8bitUnsignedStream<channels>(ptr, len); + } else { + if (is16Bit) + return new Input16bitSignedStream<channels>(ptr, len); + else + return new Input8bitSignedStream<channels>(ptr, len); + } +} + + +AudioInputStream *makeInputStream(byte _flags, const byte *ptr, uint32 len) { + if (_flags & SoundMixer::FLAG_STEREO) + return makeInputStream<2>(ptr, len, _flags & SoundMixer::FLAG_UNSIGNED, _flags & SoundMixer::FLAG_16BITS); + else + return makeInputStream<1>(ptr, len, _flags & SoundMixer::FLAG_UNSIGNED, _flags & SoundMixer::FLAG_16BITS); +} diff --git a/sound/audiostream.h b/sound/audiostream.h index 38c012a9e9..1eca349967 100644 --- a/sound/audiostream.h +++ b/sound/audiostream.h @@ -22,7 +22,8 @@ #ifndef AUDIOSTREAM_H #define AUDIOSTREAM_H -#include "mixer.h" +#include "scummsys.h" +#include <assert.h> // TODO: // * maybe make readIntern return 16.16 or 24.8 fixed point values @@ -46,7 +47,7 @@ public: class ZeroInputStream : public AudioInputStream { protected: - uint _len; + int _len; int16 readIntern() { return 0; } void advance() { _len--; } public: @@ -54,71 +55,6 @@ public: virtual int size() { return _len; } }; -template<int channels, int sampleSize> -class MemoryAudioInputStream : public AudioInputStream { -protected: - const byte *_ptr; - const byte *_end; - void advance() { _ptr += channels * sampleSize; } -public: - MemoryAudioInputStream(const byte *ptr, uint len) : _ptr(ptr), _end(ptr+len) { } - virtual int size() { return (_end - _ptr) / (channels * sampleSize); } -}; - - -template<int channels> -class Input8bitSignedStream : public MemoryAudioInputStream<channels, 1> { -protected: - int16 readIntern() { int8 v = (int8)*_ptr; return v << 8; } -public: - Input8bitSignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 1>(ptr, len) { } -}; - -template<int channels> -class Input8bitUnsignedStream : public MemoryAudioInputStream<channels, 1> { -protected: - int16 readIntern() { int8 v = (int8)(*_ptr ^ 0x80); return v << 8; } -public: - Input8bitUnsignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 1>(ptr, len) { } -}; - -template<int channels> -class Input16bitSignedStream : public MemoryAudioInputStream<channels, 2> { -protected: - int16 readIntern() { return (int16)READ_BE_UINT16(_ptr); } -public: - Input16bitSignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 2>(ptr, len) { } -}; - -template<int channels> -class Input16bitUnsignedStream : public MemoryAudioInputStream<channels, 2> { -protected: - int16 readIntern() { return (int16)(READ_BE_UINT16(_ptr) ^ 0x8000); } -public: - Input16bitUnsignedStream(const byte *ptr, int len) : MemoryAudioInputStream<channels, 2>(ptr, len) { } -}; - - -template<int channels> -static AudioInputStream *makeInputStream(const byte *ptr, uint32 len, bool isUnsigned, bool is16Bit) { - if (isUnsigned) { - if (is16Bit) - return new Input16bitUnsignedStream<channels>(ptr, len); - else - return new Input8bitUnsignedStream<channels>(ptr, len); - } else { - if (is16Bit) - return new Input16bitSignedStream<channels>(ptr, len); - else - return new Input8bitSignedStream<channels>(ptr, len); - } -} - -static inline AudioInputStream *makeInputStream(byte _flags, const byte *ptr, uint32 len) { - if (_flags & SoundMixer::FLAG_STEREO) - return makeInputStream<2>(ptr, len, _flags & SoundMixer::FLAG_UNSIGNED, _flags & SoundMixer::FLAG_16BITS); - else - return makeInputStream<1>(ptr, len, _flags & SoundMixer::FLAG_UNSIGNED, _flags & SoundMixer::FLAG_16BITS); -} +AudioInputStream *makeInputStream(byte _flags, const byte *ptr, uint32 len); #endif |