PRINCE: Move decompression method to reusable place

This commit is contained in:
Eugene Sandulenko 2018-05-05 20:35:31 +02:00
parent 5a9eba989a
commit 85aa17d9ac
2 changed files with 23 additions and 23 deletions

View File

@ -32,6 +32,28 @@
namespace Prince {
Common::SeekableReadStream *Resource::getDecompressedStream(Common::SeekableReadStream *stream) {
byte header[4];
stream->read(header, 4);
stream->seek(0);
if (READ_BE_UINT32(header) == MKTAG('M', 'A', 'S', 'M')) {
byte *buffer = (byte *)malloc(stream->size());
stream->read(buffer, stream->size());
Decompressor dec;
uint32 decompLen = READ_BE_UINT32(buffer + 14);
byte *decompData = (byte *)malloc(decompLen);
dec.decompress(buffer + 18, decompData, decompLen);
free(buffer);
return new Common::MemoryReadStream(decompData, decompLen, DisposeAfterUse::YES);
} else {
return stream;
}
}
bool AnimListItem::loadFromStream(Common::SeekableReadStream &stream) {
int32 pos = stream.pos();

View File

@ -35,7 +35,7 @@ namespace Prince {
namespace Resource {
static Common::SeekableReadStream *getDecompressedStream(Common::SeekableReadStream *stream);
Common::SeekableReadStream *getDecompressedStream(Common::SeekableReadStream *stream);
template <typename T>
bool loadFromStream(T &resource, Common::SeekableReadStream &stream) {
@ -104,28 +104,6 @@ bool loadResource(Common::Array<T *> &array, const char *resourceName, bool requ
return true;
}
static Common::SeekableReadStream *getDecompressedStream(Common::SeekableReadStream *stream) {
byte header[4];
stream->read(header, 4);
stream->seek(0);
if (READ_BE_UINT32(header) == MKTAG('M', 'A', 'S', 'M')) {
byte *buffer = (byte *)malloc(stream->size());
stream->read(buffer, stream->size());
Decompressor dec;
uint32 decompLen = READ_BE_UINT32(buffer + 14);
byte *decompData = (byte *)malloc(decompLen);
dec.decompress(buffer + 18, decompData, decompLen);
free(buffer);
return new Common::MemoryReadStream(decompData, decompLen, DisposeAfterUse::YES);
} else {
return stream;
}
}
}
} // End of namespace Prince