mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-10 04:43:26 +00:00
AUDIO: Fix Oki ADPCM to work with Mono streams using odd sized buffers.
This commit is contained in:
parent
b79221729b
commit
9c47fdae29
@ -71,13 +71,19 @@ int Oki_ADPCMStream::readBuffer(int16 *buffer, const int numSamples) {
|
||||
int samples;
|
||||
byte data;
|
||||
|
||||
assert(numSamples % 2 == 0);
|
||||
for (samples = 0; samples < numSamples && !_stream->eos() && (_stream->pos() < _endpos); samples++) {
|
||||
if (_decodedSampleCount == 0) {
|
||||
data = _stream->readByte();
|
||||
_decodedSamples[0] = decodeOKI((data >> 4) & 0x0f);
|
||||
_decodedSamples[1] = decodeOKI((data >> 0) & 0x0f);
|
||||
_decodedSampleCount = 2;
|
||||
}
|
||||
|
||||
for (samples = 0; samples < numSamples && !_stream->eos() && _stream->pos() < _endpos; samples += 2) {
|
||||
data = _stream->readByte();
|
||||
buffer[samples] = decodeOKI((data >> 4) & 0x0f);
|
||||
buffer[samples + 1] = decodeOKI(data & 0x0f);
|
||||
// (1 - (count - 1)) ensures that _decodedSamples acts as a FIFO of depth 2
|
||||
buffer[samples] = _decodedSamples[1 - (_decodedSampleCount - 1)];
|
||||
_decodedSampleCount--;
|
||||
}
|
||||
|
||||
return samples;
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,10 @@ public:
|
||||
|
||||
protected:
|
||||
int16 decodeOKI(byte);
|
||||
|
||||
private:
|
||||
uint8 _decodedSampleCount;
|
||||
int16 _decodedSamples[2];
|
||||
};
|
||||
|
||||
class Ima_ADPCMStream : public ADPCMStream {
|
||||
|
Loading…
x
Reference in New Issue
Block a user