diff --git a/src/main/java/azgracompress/compression/ImageDecompressor.java b/src/main/java/azgracompress/compression/ImageDecompressor.java index 4b5651e99891a73f45431a913ba2373cfb214f9d..011d110c40cc8feb61f289daebb3f2a8a4b8ce4b 100644 --- a/src/main/java/azgracompress/compression/ImageDecompressor.java +++ b/src/main/java/azgracompress/compression/ImageDecompressor.java @@ -1,5 +1,6 @@ package azgracompress.compression; +import azgracompress.cache.ICacheFile; import azgracompress.compression.exception.ImageDecompressionException; import azgracompress.data.ImageU16Dataset; import azgracompress.fileformat.QCMPFileHeader; @@ -14,8 +15,17 @@ import java.util.Optional; @SuppressWarnings("DuplicatedCode") public class ImageDecompressor extends CompressorDecompressorBase { - public ImageDecompressor(CompressionOptions options) { - super(options); + private IImageDecompressor cachedDecompressor = null; + + public ImageDecompressor(final CompressionOptions passedOptions) { + super(passedOptions); + } + + + public ImageDecompressor(final ICacheFile codebookCacheFile) { + this(new CompressionOptions(codebookCacheFile)); + cachedDecompressor = getImageDecompressor(options.getQuantizationType()); + cachedDecompressor.preloadGlobalCodebook(codebookCacheFile); } /** @@ -39,9 +49,9 @@ public class ImageDecompressor extends CompressorDecompressorBase { * * @return Correct implementation of image decompressor. */ - private IImageDecompressor getImageDecompressor(final QCMPFileHeader header) { + private IImageDecompressor getImageDecompressor(final QuantizationType quantizationType) { IImageDecompressor decompressor; - switch (header.getQuantizationType()) { + switch (quantizationType) { case Scalar: decompressor = new SQImageDecompressor(options); break; @@ -131,7 +141,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { final long fileSize = new File(options.getInputDataInfo().getFilePath()).length(); final long dataSize = fileSize - header.getHeaderSize(); - final IImageDecompressor decompressor = getImageDecompressor(header); + final IImageDecompressor decompressor = getImageDecompressor(header.getQuantizationType()); if (decompressor != null) { final long expectedDataSize = decompressor.getExpectedDataSize(header); @@ -189,7 +199,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { decompressedFileSize = 2 * header.getImageDims().multiplyTogether(); - IImageDecompressor imageDecompressor = getImageDecompressor(header); + final IImageDecompressor imageDecompressor = getImageDecompressor(header.getQuantizationType()); if (imageDecompressor == null) { System.err.println("Unable to create correct decompressor."); return false; @@ -241,7 +251,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { if (header == null) return Optional.empty(); - IImageDecompressor imageDecompressor = getImageDecompressor(header); + IImageDecompressor imageDecompressor = getImageDecompressor(header.getQuantizationType()); if (imageDecompressor == null) { System.err.println("Unable to create correct decompressor."); return Optional.empty(); @@ -270,6 +280,10 @@ public class ImageDecompressor extends CompressorDecompressorBase { } } + public short[] decompressStream(final InputStream compressedStream) { + return new short[0]; + } + @Nullable private QCMPFileHeader decompressQcmpHeader(DataInputStream dataInputStream) throws IOException { final QCMPFileHeader header = readQCMPFileHeader(dataInputStream);