Skip to content
Snippets Groups Projects
Commit ed22a231 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Add ImageDecompressor ctor with ICacheFile.

Also prepare stream decompress method.
parent 46cedfe5
No related branches found
No related tags found
No related merge requests found
package azgracompress.compression; package azgracompress.compression;
import azgracompress.cache.ICacheFile;
import azgracompress.compression.exception.ImageDecompressionException; import azgracompress.compression.exception.ImageDecompressionException;
import azgracompress.data.ImageU16Dataset; import azgracompress.data.ImageU16Dataset;
import azgracompress.fileformat.QCMPFileHeader; import azgracompress.fileformat.QCMPFileHeader;
...@@ -14,8 +15,17 @@ import java.util.Optional; ...@@ -14,8 +15,17 @@ import java.util.Optional;
@SuppressWarnings("DuplicatedCode") @SuppressWarnings("DuplicatedCode")
public class ImageDecompressor extends CompressorDecompressorBase { public class ImageDecompressor extends CompressorDecompressorBase {
public ImageDecompressor(CompressionOptions options) { private IImageDecompressor cachedDecompressor = null;
super(options);
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 { ...@@ -39,9 +49,9 @@ public class ImageDecompressor extends CompressorDecompressorBase {
* *
* @return Correct implementation of image decompressor. * @return Correct implementation of image decompressor.
*/ */
private IImageDecompressor getImageDecompressor(final QCMPFileHeader header) { private IImageDecompressor getImageDecompressor(final QuantizationType quantizationType) {
IImageDecompressor decompressor; IImageDecompressor decompressor;
switch (header.getQuantizationType()) { switch (quantizationType) {
case Scalar: case Scalar:
decompressor = new SQImageDecompressor(options); decompressor = new SQImageDecompressor(options);
break; break;
...@@ -131,7 +141,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -131,7 +141,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
final long fileSize = new File(options.getInputDataInfo().getFilePath()).length(); final long fileSize = new File(options.getInputDataInfo().getFilePath()).length();
final long dataSize = fileSize - header.getHeaderSize(); final long dataSize = fileSize - header.getHeaderSize();
final IImageDecompressor decompressor = getImageDecompressor(header); final IImageDecompressor decompressor = getImageDecompressor(header.getQuantizationType());
if (decompressor != null) { if (decompressor != null) {
final long expectedDataSize = decompressor.getExpectedDataSize(header); final long expectedDataSize = decompressor.getExpectedDataSize(header);
...@@ -189,7 +199,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -189,7 +199,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
decompressedFileSize = 2 * header.getImageDims().multiplyTogether(); decompressedFileSize = 2 * header.getImageDims().multiplyTogether();
IImageDecompressor imageDecompressor = getImageDecompressor(header); final IImageDecompressor imageDecompressor = getImageDecompressor(header.getQuantizationType());
if (imageDecompressor == null) { if (imageDecompressor == null) {
System.err.println("Unable to create correct decompressor."); System.err.println("Unable to create correct decompressor.");
return false; return false;
...@@ -241,7 +251,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -241,7 +251,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
if (header == null) if (header == null)
return Optional.empty(); return Optional.empty();
IImageDecompressor imageDecompressor = getImageDecompressor(header); IImageDecompressor imageDecompressor = getImageDecompressor(header.getQuantizationType());
if (imageDecompressor == null) { if (imageDecompressor == null) {
System.err.println("Unable to create correct decompressor."); System.err.println("Unable to create correct decompressor.");
return Optional.empty(); return Optional.empty();
...@@ -270,6 +280,10 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -270,6 +280,10 @@ public class ImageDecompressor extends CompressorDecompressorBase {
} }
} }
public short[] decompressStream(final InputStream compressedStream) {
return new short[0];
}
@Nullable @Nullable
private QCMPFileHeader decompressQcmpHeader(DataInputStream dataInputStream) throws IOException { private QCMPFileHeader decompressQcmpHeader(DataInputStream dataInputStream) throws IOException {
final QCMPFileHeader header = readQCMPFileHeader(dataInputStream); final QCMPFileHeader header = readQCMPFileHeader(dataInputStream);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment