Modify makeAIFFStream to match the other sound decoder factories
svn-id: r49844
This commit is contained in:
parent
651e2760a3
commit
d570e10b77
4 changed files with 23 additions and 10 deletions
|
@ -260,9 +260,11 @@ Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32
|
|||
// Compressed audio made by our tool
|
||||
byte *compressedData = (byte *)malloc(audioRes->size);
|
||||
assert(compressedData);
|
||||
// We copy over the compressed data in our own buffer. If we don't do this resourcemanager may free the data
|
||||
// later. All other compression-types already decompress completely into an additional buffer here.
|
||||
// MP3/OGG/FLAC decompression works on-the-fly instead.
|
||||
// We copy over the compressed data in our own buffer. We have to do
|
||||
// this, because ResourceManager may free the original data late.
|
||||
// All other compression types already decompress completely into an
|
||||
// additional buffer here. MP3/OGG/FLAC decompression works on-the-fly
|
||||
// instead.
|
||||
memcpy(compressedData, audioRes->data, audioRes->size);
|
||||
Common::MemoryReadStream *compressedStream = new Common::MemoryReadStream(compressedData, audioRes->size, DisposeAfterUse::YES);
|
||||
|
||||
|
@ -319,8 +321,7 @@ Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32
|
|||
*sampleLen = (waveFlags & Audio::FLAG_16BITS ? waveSize >> 1 : waveSize) * 60 / waveRate;
|
||||
|
||||
waveStream->seek(0, SEEK_SET);
|
||||
audioStream = Audio::makeAIFFStream(*waveStream);
|
||||
delete waveStream; // makeAIFFStream doesn't handle this for us
|
||||
audioStream = Audio::makeAIFFStream(waveStream, DisposeAfterUse::YES);
|
||||
} else if (audioRes->size > 14 && READ_BE_UINT16(audioRes->data) == 1 && READ_BE_UINT16(audioRes->data + 2) == 1
|
||||
&& READ_BE_UINT16(audioRes->data + 4) == 5 && READ_BE_UINT32(audioRes->data + 10) == 0x00018051) {
|
||||
// Mac snd detected
|
||||
|
|
|
@ -107,7 +107,7 @@ bool MusicHandle::play(const char *fileBase, bool loop) {
|
|||
if (!_audioSource) {
|
||||
sprintf(fileName, "%s.aif", fileBase);
|
||||
if (_file.open(fileName))
|
||||
_audioSource = Audio::makeLoopingAudioStream(Audio::makeAIFFStream(_file), loop ? 0 : 1);
|
||||
_audioSource = Audio::makeLoopingAudioStream(Audio::makeAIFFStream(&_file, DisposeAfterUse::NO), loop ? 0 : 1);
|
||||
}
|
||||
|
||||
if (!_audioSource)
|
||||
|
|
|
@ -161,16 +161,21 @@ bool loadAIFFFromStream(Common::SeekableReadStream &stream, int &size, int &rate
|
|||
return true;
|
||||
}
|
||||
|
||||
SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream &stream) {
|
||||
SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream,
|
||||
DisposeAfterUse::Flag disposeAfterUse) {
|
||||
int size, rate;
|
||||
byte *data, flags;
|
||||
|
||||
if (!loadAIFFFromStream(stream, size, rate, flags))
|
||||
if (!loadAIFFFromStream(*stream, size, rate, flags)) {
|
||||
if (disposeAfterUse == DisposeAfterUse::YES)
|
||||
delete stream;
|
||||
return 0;
|
||||
}
|
||||
|
||||
data = (byte *)malloc(size);
|
||||
assert(data);
|
||||
stream.read(data, size);
|
||||
stream->read(data, size);
|
||||
delete stream;
|
||||
|
||||
// Since we allocated our own buffer for the data, we must specify DisposeAfterUse::YES.
|
||||
return makeRawStream(data, size, rate, flags);
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#define SOUND_AIFF_H
|
||||
|
||||
#include "common/scummsys.h"
|
||||
#include "common/types.h"
|
||||
|
||||
namespace Common { class SeekableReadStream; }
|
||||
|
||||
|
@ -55,8 +56,14 @@ extern bool loadAIFFFromStream(Common::SeekableReadStream &stream, int &size, in
|
|||
* from that data.
|
||||
*
|
||||
* This function uses loadAIFFFromStream() internally.
|
||||
*
|
||||
* @param stream the SeekableReadStream from which to read the AIFF data
|
||||
* @param disposeAfterUse whether to delete the stream after use
|
||||
* @return a new SeekableAudioStream, or NULL, if an error occurred
|
||||
*/
|
||||
SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream &stream);
|
||||
SeekableAudioStream *makeAIFFStream(
|
||||
Common::SeekableReadStream *stream,
|
||||
DisposeAfterUse::Flag disposeAfterUse);
|
||||
|
||||
} // End of namespace Audio
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue