[Scummvm-git-logs] scummvm-tools master -> bdf059dd03c80138f96991d8ea797bfbdb418873
sev-
sev at scummvm.org
Mon Dec 7 22:08:12 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm-tools' repo located at https://github.com/scummvm/scummvm-tools .
Summary:
0a5cd25d6d SCUMM: Repack raw iMuse as used by Akella COMI localization
bdf059dd03 SCUMM: Skip garbage files when converting BUNs
Commit: 0a5cd25d6d12a030b48fca5ea7a031423e4ab4f7
https://github.com/scummvm/scummvm-tools/commit/0a5cd25d6d12a030b48fca5ea7a031423e4ab4f7
Author: Vladimir Serbinenko (phcoder at google.com)
Date: 2020-12-07T23:08:08+01:00
Commit Message:
SCUMM: Repack raw iMuse as used by Akella COMI localization
This is a counterpart of https://github.com/scummvm/scummvm/pull/2668
Changed paths:
engines/scumm/compress_scumm_bun.cpp
engines/scumm/compress_scumm_bun.h
diff --git a/engines/scumm/compress_scumm_bun.cpp b/engines/scumm/compress_scumm_bun.cpp
index 4065c1393..89faefbcb 100644
--- a/engines/scumm/compress_scumm_bun.cpp
+++ b/engines/scumm/compress_scumm_bun.cpp
@@ -696,7 +696,7 @@ void CompressScummBun::writeWaveHeader(int s_size, int rate, int chan) {
_waveTmpFile.close();
}
-void CompressScummBun::writeToTempWave(char *fileName, byte *output_data, unsigned int size) {
+void CompressScummBun::writeToTempWave(char *fileName, byte *output_data, unsigned int size, bool littleEndian) {
if (!_waveTmpFile.isOpen()) {
_waveTmpFile.open(fileName, "wb");
byte wav[44];
@@ -704,10 +704,12 @@ void CompressScummBun::writeToTempWave(char *fileName, byte *output_data, unsign
_waveTmpFile.write(output_data, 44);
_waveDataSize = 0;
}
- for (unsigned int j = 0; j < size - 1; j += 2) {
- byte tmp = output_data[j + 0];
- output_data[j + 0] = output_data[j + 1];
- output_data[j + 1] = tmp;
+ if (!littleEndian) {
+ for (unsigned int j = 0; j < size - 1; j += 2) {
+ byte tmp = output_data[j + 0];
+ output_data[j + 0] = output_data[j + 1];
+ output_data[j + 1] = tmp;
+ }
}
_waveTmpFile.write(output_data, size);
_waveDataSize += size;
@@ -715,13 +717,22 @@ void CompressScummBun::writeToTempWave(char *fileName, byte *output_data, unsign
typedef struct { int offset, size, codec; } CompTable;
-byte *CompressScummBun::decompressBundleSound(int index, Common::File &input, int32 &finalSize) {
+byte *CompressScummBun::decompressBundleSound(int index, Common::File &input, int32 &finalSize, bool &rawMuse) {
byte compOutput[0x2000];
int i;
input.seek(_bundleTable[index].offset, SEEK_SET);
uint32 tag = input.readUint32BE();
+ if (tag == 'iMUS') {
+ input.seek(_bundleTable[index].offset, SEEK_SET);
+ finalSize = _bundleTable[index].size;
+ byte *compFinal = (byte *)malloc(finalSize);
+ input.read_throwsOnError(compFinal, finalSize);
+ rawMuse = true;
+ return compFinal;
+ }
+ rawMuse = false;
assert(tag == 'COMP');
int numCompItems = input.readUint32BE();
input.seek(8, SEEK_CUR);
@@ -867,7 +878,7 @@ struct Marker {
static Region *_region;
static int _numRegions;
-void CompressScummBun::writeRegions(byte *ptr, int bits, int freq, int channels, const char *dir, char *filename, Common::File &output) {
+void CompressScummBun::writeRegions(byte *ptr, int bits, int freq, int channels, const char *dir, char *filename, Common::File &output, bool littleEndian) {
char tmpPath[200];
for (int l = 0; l < _numRegions; l++) {
@@ -876,7 +887,7 @@ void CompressScummBun::writeRegions(byte *ptr, int bits, int freq, int channels,
int offset = _region[l].offset;
byte *outputData = convertTo16bit(ptr + offset, size, outputSize, bits, freq, channels);
sprintf(tmpPath, "%s%s_reg%03d.wav", dir, filename, l);
- writeToTempWave(tmpPath, outputData, outputSize);
+ writeToTempWave(tmpPath, outputData, outputSize, littleEndian);
writeWaveHeader(_waveDataSize, freq, channels);
free(outputData);
sprintf(tmpPath, "%s%s_reg%03d", dir, filename, l);
@@ -1143,9 +1154,10 @@ void CompressScummBun::execute() {
int offsetData = 0, bits = 0, freq = 0, channels = 0;
int32 size = 0;
- byte *compFinal = decompressBundleSound(i, input, size);
+ bool rawMuse = false;
+ byte *compFinal = decompressBundleSound(i, input, size, rawMuse);
writeToRMAPFile(compFinal, output, _bundleTable[i].filename, offsetData, bits, freq, channels);
- writeRegions(compFinal + offsetData, bits, freq, channels, outpath.getPath().c_str(), _bundleTable[i].filename, output);
+ writeRegions(compFinal + offsetData, bits, freq, channels, outpath.getPath().c_str(), _bundleTable[i].filename, output, rawMuse && bits == 16);
free(compFinal);
}
diff --git a/engines/scumm/compress_scumm_bun.h b/engines/scumm/compress_scumm_bun.h
index 63b9c0f21..fcd58bff9 100644
--- a/engines/scumm/compress_scumm_bun.h
+++ b/engines/scumm/compress_scumm_bun.h
@@ -52,11 +52,12 @@ protected:
void encodeWaveWithOgg(char *filename);
void encodeWaveWithLame(char *filename);
void writeWaveHeader(int s_size, int rate, int chan);
- void writeToTempWave(char *fileName, byte *output_data, unsigned int size);
- byte *decompressBundleSound(int index, Common::File &input, int32 &finalSize);
+ void writeToTempWave(char *fileName, byte *output_data, unsigned int size, bool littleEndian);
+ byte *decompressBundleSound(int index, Common::File &input, int32 &finalSize, bool &rawBundle);
byte *convertTo16bit(byte *ptr, int inputSize, int &outputSize, int bits, int freq, int channels);
void countMapElements(byte *ptr, int &numRegions, int &numJumps, int &numSyncs, int &numMarkers);
- void writeRegions(byte *ptr, int bits, int freq, int channels, const char *dir, char *filename, Common::File &output);
+ void writeRegions(byte *ptr, int bits, int freq, int channels, const char *dir, char *filename, Common::File &output,
+ bool littleEndian);
void recalcRegions(int32 &value, int bits, int freq, int channels);
void writeToRMAPFile(byte *ptr, Common::File &output, char *filename, int &offsetData, int &bits, int &freq, int &channels);
};
Commit: bdf059dd03c80138f96991d8ea797bfbdb418873
https://github.com/scummvm/scummvm-tools/commit/bdf059dd03c80138f96991d8ea797bfbdb418873
Author: Vladimir Serbinenko (phcoder at google.com)
Date: 2020-12-07T23:08:08+01:00
Commit Message:
SCUMM: Skip garbage files when converting BUNs
Akella localization has 2 garbage files, drop them when repacking. This is
counterpart of https://github.com/scummvm/scummvm/pull/2668
Changed paths:
engines/scumm/compress_scumm_bun.cpp
diff --git a/engines/scumm/compress_scumm_bun.cpp b/engines/scumm/compress_scumm_bun.cpp
index 89faefbcb..23efabdf8 100644
--- a/engines/scumm/compress_scumm_bun.cpp
+++ b/engines/scumm/compress_scumm_bun.cpp
@@ -732,6 +732,9 @@ byte *CompressScummBun::decompressBundleSound(int index, Common::File &input, i
rawMuse = true;
return compFinal;
}
+
+ if (tag != 'COMP')
+ return nullptr;
rawMuse = false;
assert(tag == 'COMP');
int numCompItems = input.readUint32BE();
@@ -1156,6 +1159,10 @@ void CompressScummBun::execute() {
int32 size = 0;
bool rawMuse = false;
byte *compFinal = decompressBundleSound(i, input, size, rawMuse);
+ if (!compFinal) {
+ printf("%s is garbage. Skipping\n", _bundleTable[i].filename);
+ continue;
+ }
writeToRMAPFile(compFinal, output, _bundleTable[i].filename, offsetData, bits, freq, channels);
writeRegions(compFinal + offsetData, bits, freq, channels, outpath.getPath().c_str(), _bundleTable[i].filename, output, rawMuse && bits == 16);
free(compFinal);
More information about the Scummvm-git-logs
mailing list