[Scummvm-git-logs] scummvm master -> b2c79fdf4bce6e6a0b459c8aa553f139b072e9a2

antoniou79 antoniou at cti.gr
Mon Mar 25 09:36:41 CET 2019


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b2c79fdf4b BLADERUNNER: Fix static noise instead of proper audio in VQAs


Commit: b2c79fdf4bce6e6a0b459c8aa553f139b072e9a2
    https://github.com/scummvm/scummvm/commit/b2c79fdf4bce6e6a0b459c8aa553f139b072e9a2
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-03-25T10:34:58+02:00

Commit Message:
BLADERUNNER: Fix static noise instead of proper audio in VQAs

Changed paths:
    engines/bladerunner/adpcm_decoder.cpp
    engines/bladerunner/adpcm_decoder.h
    engines/bladerunner/aud_stream.cpp
    engines/bladerunner/vqa_decoder.cpp


diff --git a/engines/bladerunner/adpcm_decoder.cpp b/engines/bladerunner/adpcm_decoder.cpp
index c93d4eb..33c4282 100644
--- a/engines/bladerunner/adpcm_decoder.cpp
+++ b/engines/bladerunner/adpcm_decoder.cpp
@@ -22,6 +22,7 @@
 
 #include "bladerunner/adpcm_decoder.h"
 
+#include "common/endian.h"
 #include "common/util.h"
 
 namespace BladeRunner {
@@ -122,7 +123,7 @@ uint16 imaStepTable[712] = {
  0x0fff,0x2ffe,0x4ffe,0x6ffd,0x8ffe,0xaffd,0xcffd,0xeffc
 };
 
-void ADPCMWestwoodDecoder::decode(uint8 *in, size_t size, int16 *out) {
+void ADPCMWestwoodDecoder::decode(uint8 *in, size_t size, int16 *out, bool forceLittleEndianOut) {
 	uint8 *end = in + size;
 
 	int16 stepIndex = _stepIndex;
@@ -149,8 +150,16 @@ void ADPCMWestwoodDecoder::decode(uint8 *in, size_t size, int16 *out) {
 
 			predictor = CLIP<int32>(predictor, -32768, 32767);
 
-			*out++ = (int16)predictor;
-
+			if (forceLittleEndianOut) {
+				// Bugfix:
+				// enforce "little-endian" type of output for VQA audio stream
+				// This is needed for Big Endian platforms to behave correctly in raw audio streams in VQA videos
+				// because in VQADecoder::VQAAudioTrack::decodeAudioFrame() a raw stream is created for the audio
+				// with the explicit flag: FLAG_LITTLE_ENDIAN
+				WRITE_LE_INT16(out++, (int16)predictor);
+			} else {
+				*out++ = (int16)predictor;
+			}
 			stepIndex = imaIndexTable[code] + stepIndex;
 			stepIndex = CLIP<int16>(stepIndex, 0, 88);
 		}
diff --git a/engines/bladerunner/adpcm_decoder.h b/engines/bladerunner/adpcm_decoder.h
index 8f7a228..6f37430 100644
--- a/engines/bladerunner/adpcm_decoder.h
+++ b/engines/bladerunner/adpcm_decoder.h
@@ -41,7 +41,7 @@ public:
 		_predictor = predictor;
 	}
 
-	void decode(uint8 *in, size_t size, int16 *out);
+	void decode(uint8 *in, size_t size, int16 *out, bool forceLittleEndianOut);
 };
 
 } // End of namespace BladeRunner
diff --git a/engines/bladerunner/aud_stream.cpp b/engines/bladerunner/aud_stream.cpp
index bb35702..7396cbf 100644
--- a/engines/bladerunner/aud_stream.cpp
+++ b/engines/bladerunner/aud_stream.cpp
@@ -104,8 +104,7 @@ int AudStream::readBuffer(int16 *buffer, const int numSamples) {
 			assert(_end - _p >= _deafBlockRemain);
 
 			int bytesConsumed = MIN<int>(_deafBlockRemain, (numSamples - samplesRead) / 2);
-
-			_decoder.decode(_p, bytesConsumed, buffer + samplesRead);
+			_decoder.decode(_p, bytesConsumed, buffer + samplesRead, false);
 			_p += bytesConsumed;
 			_deafBlockRemain -= bytesConsumed;
 
diff --git a/engines/bladerunner/vqa_decoder.cpp b/engines/bladerunner/vqa_decoder.cpp
index ddd6c98..05ad7a8 100644
--- a/engines/bladerunner/vqa_decoder.cpp
+++ b/engines/bladerunner/vqa_decoder.cpp
@@ -950,7 +950,7 @@ Audio::SeekableAudioStream *VQADecoder::VQAAudioTrack::decodeAudioFrame() {
 	int16 *audioFrame = (int16 *)malloc(4 * 735);
 	memset(audioFrame, 0, 4 * 735);
 
-	_adpcmDecoder.decode(_compressedAudioFrame, 735, audioFrame);
+	_adpcmDecoder.decode(_compressedAudioFrame, 735, audioFrame, true);
 
 	uint flags = Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN;
 





More information about the Scummvm-git-logs mailing list