mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 05:38:56 +00:00
delete CustomProcInputStream and add getFreeSpace for appendable audiostream
svn-id: r13629
This commit is contained in:
parent
cc5fb7fc58
commit
43979c9012
@ -214,6 +214,7 @@ public:
|
||||
|
||||
void append(const byte *data, uint32 len);
|
||||
void finish() { _finalized = true; }
|
||||
uint32 getFreeSpace();
|
||||
};
|
||||
|
||||
|
||||
@ -298,6 +299,20 @@ void AppendableMemoryStream<stereo, is16Bit, isUnsigned>::append(const byte *dat
|
||||
}
|
||||
}
|
||||
|
||||
template<bool stereo, bool is16Bit, bool isUnsigned>
|
||||
uint32 AppendableMemoryStream<stereo, is16Bit, isUnsigned>::getFreeSpace() {
|
||||
uint32 free;
|
||||
|
||||
if (_pos <= _end) {
|
||||
uint32 free_from_end = _bufferEnd - _end;
|
||||
uint32 free_to_pos = _pos - _bufferStart;
|
||||
free = free_from_end + free_to_pos;
|
||||
} else {
|
||||
free = _pos - _end;
|
||||
}
|
||||
|
||||
return free;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark --- Procedural stream ---
|
||||
@ -336,35 +351,6 @@ public:
|
||||
};
|
||||
#endif
|
||||
|
||||
CustomProcInputStream::CustomProcInputStream(int rate, byte flags, CustomInputProc proc, void *refCon) {
|
||||
_refCon = refCon;
|
||||
_refStream = this;
|
||||
_rate = rate;
|
||||
_proc = proc;
|
||||
_finished = false;
|
||||
_isStereo = (flags & SoundMixer::FLAG_STEREO) != 0;
|
||||
_is16Bit = (flags & SoundMixer::FLAG_16BITS) != 0;
|
||||
_isUnsigned = (flags & SoundMixer::FLAG_UNSIGNED) != 0;
|
||||
assert(!(flags & SoundMixer::FLAG_LITTLE_ENDIAN));
|
||||
assert(!(flags & SoundMixer::FLAG_AUTOFREE));
|
||||
}
|
||||
|
||||
int CustomProcInputStream::readBuffer(int16 *buffer, const int numSamples) {
|
||||
int numBytes = numSamples;
|
||||
numBytes *= (_is16Bit ? 2 : 1);
|
||||
byte *tmpBuffer = (byte *)malloc(numBytes);
|
||||
int gotSamples = (_proc)(_refCon, _refStream, tmpBuffer, numBytes) / (_is16Bit ? 2 : 1);
|
||||
|
||||
const byte *ptr = tmpBuffer;
|
||||
for (int samples = 0; samples < gotSamples; samples++) {
|
||||
*buffer++ = READSAMPLE(_is16Bit, _isUnsigned, ptr);
|
||||
ptr += (_is16Bit ? 2 : 1);
|
||||
}
|
||||
|
||||
free(tmpBuffer);
|
||||
return gotSamples;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark --- Input stream factories ---
|
||||
#pragma mark -
|
||||
|
@ -93,6 +93,7 @@ class AppendableAudioStream : public AudioStream {
|
||||
public:
|
||||
virtual void append(const byte *data, uint32 len) = 0;
|
||||
virtual void finish() = 0;
|
||||
virtual uint32 getFreeSpace() = 0;
|
||||
};
|
||||
|
||||
class ZeroInputStream : public AudioStream {
|
||||
@ -113,31 +114,6 @@ public:
|
||||
int getRate() const { return -1; }
|
||||
};
|
||||
|
||||
class CustomProcInputStream : public AudioStream {
|
||||
public:
|
||||
typedef int (*CustomInputProc)(void *refCon, CustomProcInputStream *stream, byte *data, uint len);
|
||||
|
||||
private:
|
||||
bool _isStereo;
|
||||
bool _is16Bit;
|
||||
bool _isUnsigned;
|
||||
int _rate;
|
||||
CustomInputProc _proc;
|
||||
CustomProcInputStream *_refStream;
|
||||
void *_refCon;
|
||||
bool _finished;
|
||||
|
||||
public:
|
||||
|
||||
CustomProcInputStream(int rate, byte flags, CustomInputProc proc, void *refCon);
|
||||
|
||||
int readBuffer(int16 *buffer, const int numSamples);
|
||||
bool isStereo() const { return _isStereo; }
|
||||
bool endOfData() const { return _finished; }
|
||||
void finish() { _finished = true; }
|
||||
int getRate() const { return _rate; }
|
||||
};
|
||||
|
||||
AudioStream *makeLinearInputStream(int rate, byte _flags, const byte *ptr, uint32 len, uint loopOffset, uint loopLen);
|
||||
AppendableAudioStream *makeAppendableAudioStream(int rate, byte _flags, uint32 len);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user