[Scummvm-cvs-logs] SF.net SVN: scummvm:[48883] tools/trunk/engines/sci
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Sat May 1 21:45:05 CEST 2010
Revision: 48883
http://scummvm.svn.sourceforge.net/scummvm/?rev=48883&view=rev
Author: m_kiewitz
Date: 2010-05-01 19:45:03 +0000 (Sat, 01 May 2010)
Log Message:
-----------
SCI: accidentally created files from r48882 removed
Removed Paths:
-------------
tools/trunk/engines/sci/compress_tinsel.cpp
tools/trunk/engines/sci/compress_tinsel.h
Deleted: tools/trunk/engines/sci/compress_tinsel.cpp
===================================================================
--- tools/trunk/engines/sci/compress_tinsel.cpp 2010-05-01 19:28:16 UTC (rev 48882)
+++ tools/trunk/engines/sci/compress_tinsel.cpp 2010-05-01 19:45:03 UTC (rev 48883)
@@ -1,343 +0,0 @@
-/* compress_tinsel - .smp compressor
- * Copyright (C) 2009 The ScummVM Team
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-// By Jimi (m [underline] kiewitz [AT] users.sourceforge.net)
-
-#include <stdlib.h>
-
-#include "compress.h"
-#include "common/endian.h"
-
-#include "compress_tinsel.h"
-
-// data-format of index-file:
-// [pointer to data file DWORD] [pointer to data file DWORD] [pointer to data file DWORD]
-// we use index[0] to signal the engine what data format it's supposed to expect. It may be 'MP3 ', 'OGG ' or 'FLAC'
-
-// data-format of sample-file:
-// [sample-length DWORD] [sample-data]
-// or
-// [subsamplecount DWORD] [sample-length DWORD] [sample-data]
-// where subsamplecount has upmost bit 31 set (that's how one differentiates sample-length and subsamplecount)
-// It seems that data-format 1 is used by DiscWorld 1 and data-format 2 is used by DiscWorld 2. Also DiscWorld 1 uses
-// raw-data as samples and DiscWorld 2 uses ADPCM 6-bit encoded data as samples. We suppose that we will need to do ADPCM
-// decoding on all multi-sample data.
-
-// We also copy over the first 5000 bytes of the .smp file, because otherwise we would trash ScummVM detection.
-
-#define TEMP_IDX "compressed.idx"
-#define TEMP_SMP "compressed.smp"
-#define TEMP_RAW "tempfile.raw"
-#define TEMP_ENC "tempfile.enc"
-
-CompressTinsel::CompressTinsel(const std::string &name) : CompressionTool(name, TOOLTYPE_COMPRESSION) {
- _supportsProgressBar = true;
-
- ToolInput input1;
- input1.format = "*.smp";
- _inputPaths.push_back(input1);
-
- ToolInput input2;
- input2.format = "*.idx";
- _inputPaths.push_back(input2);
-
- _shorthelp = "Used to compress tinsel .smp files.";
- _helptext = "\nUsage: " + getName() + " [mode-params] [-o outputname] <infile.smp> <infile.idx>\n";
-}
-
-/* Converts raw-data sample in input_smp of size SampleSize to requested dataformat and writes to output_smp */
-void CompressTinsel::convertTinselRawSample (uint32 sampleSize) {
- uint32 copyLeft = 0;
- uint32 doneRead = 0;
- char buffer[2048];
- Common::File curFileHandle;
-
- print("Assuming DW1 sample being 8-bit raw...\n");
-
- unlink(TEMP_RAW); unlink(TEMP_ENC);
- curFileHandle.open(TEMP_RAW, "wb");
- copyLeft = sampleSize;
- while (copyLeft > 0) {
- doneRead = _input_smp.read_noThrow(buffer, copyLeft > sizeof(buffer) ? sizeof(buffer) : copyLeft);
- if (doneRead <= 0)
- break;
- copyLeft -= (int)doneRead;
- curFileHandle.write(buffer, doneRead);
- }
- curFileHandle.close();
-
- // Encode this raw data...
- setRawAudioType(true, false, 8); // LE, mono, 8-bit (??)
- encodeAudio(TEMP_RAW, true, 22050, TEMP_ENC, _format);
-
- // Append compressed data to output_smp
- curFileHandle.open(TEMP_ENC, "rb");
- curFileHandle.seek(0, SEEK_END);
- copyLeft = curFileHandle.pos();
- curFileHandle.seek(0, SEEK_SET);
- // Write size of compressed data
- _output_smp.writeUint32LE(copyLeft);
- // Write actual data
- while (copyLeft > 0) {
- doneRead = curFileHandle.read_noThrow(buffer, copyLeft > sizeof(buffer) ? sizeof(buffer) : copyLeft);
- if (doneRead <= 0)
- break;
- copyLeft -= (int)doneRead;
- _output_smp.write(buffer, doneRead);
- }
-}
-
-static const double TinselFilterTable[4][2] = {
- {0, 0 },
- {0.9375, 0},
- {1.796875, -0.8125},
- {1.53125, -0.859375}
-};
-
-template<typename T> inline T CLIP (T v, T amin, T amax) {
- if (v < amin)
- return amin;
- else if (v > amax)
- return amax;
- else
- return v;
-}
-
-/* Converts ADPCM-data sample in input_smp of size SampleSize to requested dataformat and writes to output_smp */
-/* Quick hack together from adpcm.cpp */
-void CompressTinsel::convertTinselADPCMSample (uint32 sampleSize) {
- byte *inBuffer, *inPos;
- int16 *outBuffer, *outPos;
- double predictor = 0;
- double k0 = 0, k1 = 0;
- double d0 = 0, d1 = 0;
- uint32 blockAlign, blockPos;
- uint16 chunkData = 0;
- int16 chunkWord = 0;
- uint8 headerByte, filterVal, chunkPos = 0;
- const double eVal = 1.032226562;
- uint32 decodeLeft = 0, decodedCount = 0;
- uint32 uncompressedSize;
- double sample;
-
- uint32 copyLeft = 0;
- uint32 doneRead = 0;
- char buffer[2048];
- Common::File curFileHandle;
-
- print("Assuming DW2 sample using ADPCM 6-bit, decoding to 16-bit raw...\n");
-
- // Allocate buffer for the ADPCM-compressed sample
- inBuffer = (byte *)malloc(sampleSize);
- if (!inBuffer) {
- print("malloc failed!\n");
- return;
- }
-
- // Allocate buffer for uncompressed sample data (3 bytes will be uncompressed to 8 bytes)
- uncompressedSize = (sampleSize/3)*4*2+16;
- outBuffer = (int16 *)malloc(uncompressedSize);
- if (!outBuffer) {
- print("malloc failed!\n");
- free(inBuffer);
- return;
- }
-
- _input_smp.read_throwsOnError(inBuffer, sampleSize);
-
- // 1 channel, 22050 rate, block align 24,
- blockAlign = 24; // Fixed for Tinsel 6-bit
- blockPos = blockAlign; // To make sure first header is read
-
- inPos = inBuffer; outPos = outBuffer;
- decodeLeft = sampleSize;
- while (decodeLeft > 0) {
- if (blockPos == blockAlign) {
- // read Tinsel header
- headerByte = *inPos; inPos++; decodeLeft--;
- filterVal = (headerByte & 0xC0) >> 6;
-
- if ((headerByte & 0x20) != 0) {
- //Lower 6 bit are negative
- // Negate
- headerByte = ~(headerByte | 0xC0) + 1;
- predictor = 1 << headerByte;
- } else {
- // Lower 6 bit are positive
- // Truncate
- headerByte &= 0x1F;
- predictor = ((double) 1.0) / (1 << headerByte);
- }
- k0 = TinselFilterTable[filterVal][0];
- k1 = TinselFilterTable[filterVal][1];
- blockPos = 0;
- chunkPos = 0;
- }
-
- switch (chunkPos) {
- case 0:
- chunkData = *inPos; inPos++; decodeLeft--;
- chunkWord = (chunkData << 8) & 0xFC00;
- break;
- case 1:
- chunkData = (chunkData << 8) | *inPos; inPos++; decodeLeft--;
- blockPos++;
- chunkWord = (chunkData << 6) & 0xFC00;
- break;
- case 2:
- chunkData = (chunkData << 8) | *inPos; inPos++; decodeLeft--;
- blockPos++;
- chunkWord = (chunkData << 4) & 0xFC00;
- break;
- case 3:
- chunkData = chunkData << 8;
- blockPos++;
- chunkWord = (chunkData << 2) & 0xFC00;
- break;
- }
- sample = chunkWord;
- sample *= eVal * predictor;
- sample += (d0 * k0) + (d1 * k1);
- d1 = d0;
- d0 = sample;
- *outPos = (int16) CLIP<double>(sample, -32768.0, 32767.0); outPos++;
- decodedCount++;
- chunkPos = (chunkPos + 1) % 4;
- }
-
- unlink(TEMP_RAW);
- unlink(TEMP_ENC);
-
- curFileHandle.open(TEMP_RAW, "wb");
- curFileHandle.write(outBuffer, decodedCount*2);
-
- free(inBuffer);
- free(outBuffer);
-
- // Encode this raw data...
- setRawAudioType(true, false, 16); // LE, mono, 16-bit
- encodeAudio(TEMP_RAW, true, 22050, TEMP_ENC, _format);
-
- // Append compressed data to output_smp
- curFileHandle.open(TEMP_ENC, "rb");
- curFileHandle.seek(0, SEEK_END);
- copyLeft = curFileHandle.pos();
- curFileHandle.seek(0, SEEK_SET);
- // Write size of compressed data
- _output_smp.writeUint32LE(copyLeft);
- // Write actual data
- while (copyLeft > 0) {
- doneRead = curFileHandle.read_noThrow(buffer, copyLeft > sizeof(buffer) ? sizeof(buffer) : copyLeft);
- if (doneRead <= 0)
- break;
- copyLeft -= (int)doneRead;
- _output_smp.write(buffer, doneRead);
- }
-}
-
-void CompressTinsel::execute() {
- uint32 indexNo = 0;
- uint32 indexCount = 0;
- uint32 indexOffset = 0;
- uint32 loopCount = 0;
- uint32 sampleSize = 0;
- uint32 sampleCount = 0;
-
- Common::Filename inpath_smp = _inputPaths[0].path;
- Common::Filename inpath_idx = _inputPaths[1].path;
-
- _input_idx.open(inpath_idx, "rb");
- _input_smp.open(inpath_smp, "rb");
-
- unlink(TEMP_IDX);
- _output_idx.open(TEMP_IDX, "wb");
-
- unlink(TEMP_SMP);
- _output_smp.open(TEMP_SMP, "wb");
-
- _input_idx.seek(0, SEEK_END);
- indexCount = _input_idx.pos() / sizeof(uint32);
- _input_idx.seek(0, SEEK_SET);
-
- loopCount = indexCount;
- while (loopCount>0) {
- // Update progress
- updateProgress(indexCount - loopCount, indexCount);
-
- indexOffset = _input_idx.readUint32LE();
- if (indexOffset) {
- if (indexNo==0) {
- error("The sourcefiles are already compressed, aborting...\n");
- }
- // Got sample(s), so convert...
- print("Converting sample %d of %d\n", indexNo, indexCount);
-
- // Seek to Sample in input-file and read SampleSize
- _input_smp.seek(indexOffset, SEEK_SET);
- sampleSize = _input_smp.readUint32LE();
-
- // Write offset of new data to new index file
- _output_idx.writeUint32LE(_output_smp.pos());
-
- if (sampleSize & 0x80000000) {
- // multiple samples in ADPCM format
- sampleCount = sampleSize & ~0x80000000;
- // Write sample count to new sample file
- _output_smp.writeUint32LE(sampleSize);
- while (sampleCount>0) {
- sampleSize = _input_smp.readUint32LE();
- convertTinselADPCMSample(sampleSize);
- sampleCount--;
- }
- } else {
- // just one sample in raw format
- convertTinselRawSample(sampleSize);
- }
- } else {
- if (indexNo==0) {
- // Write signature as index 0
- switch (_format) {
- case AUDIO_MP3: _output_idx.writeUint32BE(MKID_BE('MP3 ')); break;
- case AUDIO_VORBIS: _output_idx.writeUint32BE(MKID_BE('OGG ')); break;
- case AUDIO_FLAC: _output_idx.writeUint32BE(MKID_BE('FLAC')); break;
- default: throw ToolException("Unknown audio format!");
- }
- } else {
- _output_idx.writeUint32LE(0);
- }
- }
- loopCount--;
- indexNo++;
- }
-
- /* And some clean-up :-) */
- unlink(TEMP_RAW);
- unlink(TEMP_ENC);
-}
-
-
-#ifdef STANDALONE_MAIN
-int main(int argc, char *argv[]) {
- CompressTinsel tinsel(argv[0]);
- return tinsel.run(argc, argv);
-}
-#endif
Deleted: tools/trunk/engines/sci/compress_tinsel.h
===================================================================
--- tools/trunk/engines/sci/compress_tinsel.h 2010-05-01 19:28:16 UTC (rev 48882)
+++ tools/trunk/engines/sci/compress_tinsel.h 2010-05-01 19:45:03 UTC (rev 48883)
@@ -1,41 +0,0 @@
-/* compress_tinsel - .smp compressor
- * Copyright (C) 2009 The ScummVM Team
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef COMPRESS_TINSEL_H
-#define COMPRESS_TINSEL_H
-
-#include "compress.h"
-
-class CompressTinsel : public CompressionTool {
-public:
- CompressTinsel(const std::string &name = "compress_tinsel");
-
- virtual void execute();
-
-protected:
- Common::File _input_idx, _input_smp, _output_idx, _output_smp;
-
- void convertTinselRawSample(uint32 sampleSize);
- void convertTinselADPCMSample(uint32 sampleSize);
-};
-
-#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list