Fix that compression override would produce incorrect images

This commit is contained in:
2023-02-18 15:14:13 +01:00
parent faf4a2f4d5
commit fad3e31bf8
+12 -7
View File
@@ -206,17 +206,22 @@ void DataBlock::compress(int sampleFormatSize)
QByteArray tmp = data; QByteArray tmp = data;
uncompressedSize = data.size(); uncompressedSize = data.size();
byteShuffle(tmp, byteShuffleOverride ? sampleFormatSize : byteShuffling); if (compressionCodecOverride != CompressionCodec::None)
{
codec = compressionCodecOverride;
byteShuffling = sampleFormatSize;
compressLevel = compressionLevelOverride;
}
CompressionCodec useCodec = compressionCodecOverride != CompressionCodec::None ? compressionCodecOverride : codec; byteShuffle(tmp, byteShuffling);
int cLevel = compressionLevelOverride != -1 ? compressionLevelOverride : compressLevel;
switch(useCodec) switch(codec)
{ {
case None: case None:
data = tmp; data = tmp;
break; break;
case Zlib: case Zlib:
data = qCompress(tmp, cLevel); data = qCompress(tmp, compressLevel);
data.remove(0, sizeof(uint32_t)); data.remove(0, sizeof(uint32_t));
break; break;
case LZ4: case LZ4:
@@ -224,10 +229,10 @@ void DataBlock::compress(int sampleFormatSize)
{ {
int compSize = 0; int compSize = 0;
data.resize(LZ4_compressBound(tmp.size())); data.resize(LZ4_compressBound(tmp.size()));
if(useCodec == LZ4) if(codec == LZ4)
compSize = LZ4_compress_default(tmp.constData(), data.data(), tmp.size(), data.size()); compSize = LZ4_compress_default(tmp.constData(), data.data(), tmp.size(), data.size());
else else
compSize = LZ4_compress_HC(tmp.constData(), data.data(), tmp.size(), data.size(), cLevel < 0 ? LZ4HC_CLEVEL_DEFAULT : cLevel); compSize = LZ4_compress_HC(tmp.constData(), data.data(), tmp.size(), data.size(), compressLevel < 0 ? LZ4HC_CLEVEL_DEFAULT : compressLevel);
if(compSize <= 0) if(compSize <= 0)
throw Error("LZ4 compression failed"); throw Error("LZ4 compression failed");