mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-05 00:36:57 +00:00
added CustomProcInputStream
svn-id: r13570
This commit is contained in:
parent
e42c1f0483
commit
6680c5368d
@ -336,6 +336,34 @@ 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 ---
|
||||
|
@ -113,6 +113,31 @@ 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