diff --git a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java index 8f57c41b0acbd64cca5537e0bb9242a76ecdb615..c381c681fda387b002c1720d4a847d6ed5bca5aa 100644 --- a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java +++ b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java @@ -12,7 +12,6 @@ import java.util.ArrayList; public class QuantizationCacheManager { - /** * Folders where cache files are stored. */ @@ -126,7 +125,7 @@ public class QuantizationCacheManager { final String fileName = getCacheFilePathForSQ(trainFile, codebook.getCodebookSize()).getAbsolutePath(); final QvcHeaderV1 header = createHeaderForSQ(new File(trainFile).getName(), codebook); - final SQCacheFile cacheFile = new SQCacheFile(header, codebook); + final SqQvcFile cacheFile = new SqQvcFile(header, codebook); try (final FileOutputStream fos = new FileOutputStream(fileName, false); final DataOutputStream dos = new DataOutputStream(fos)) { @@ -153,7 +152,7 @@ public class QuantizationCacheManager { codebook.getVectorDims()).getAbsolutePath(); final QvcHeaderV1 header = createHeaderForVQ(new File(trainFile).getName(), codebook); - final VQCacheFile cacheFile = new VQCacheFile(header, codebook); + final VqQvcFile cacheFile = new VqQvcFile(header, codebook); try (final FileOutputStream fos = new FileOutputStream(fileName, false); final DataOutputStream dos = new DataOutputStream(fos)) { @@ -173,7 +172,7 @@ public class QuantizationCacheManager { * @return Cache file with data from disk. * @throws IOException when fails to read the cache file from disk. */ - private ICacheFile readCacheFile(final File file, final ICacheFile cacheFile) throws IOException { + private IQvcFile readCacheFile(final File file, final IQvcFile cacheFile) throws IOException { try (final FileInputStream fis = new FileInputStream(file); final DataInputStream dis = new DataInputStream(fis)) { @@ -212,10 +211,10 @@ public class QuantizationCacheManager { * @param codebookSize Codebook size. * @return SQ cache file. */ - public SQCacheFile loadSQCacheFile(final String imageFile, final int codebookSize) { + public SqQvcFile loadSQCacheFile(final String imageFile, final int codebookSize) { final File path = getCacheFilePathForSQ(imageFile, codebookSize); try { - return (SQCacheFile) readCacheFile(path, new SQCacheFile()); + return (SqQvcFile) readCacheFile(path, new SqQvcFile()); } catch (final IOException e) { System.err.println("Failed to read SQ cache file." + path); e.printStackTrace(System.err); @@ -231,12 +230,12 @@ public class QuantizationCacheManager { * @param vDim Quantization vector dimension. * @return VQ cache file. */ - public VQCacheFile loadVQCacheFile(final String trainFile, - final int codebookSize, - final V3i vDim) { + public VqQvcFile loadVQCacheFile(final String trainFile, + final int codebookSize, + final V3i vDim) { final File path = getCacheFilePathForVQ(trainFile, codebookSize, vDim); try { - return (VQCacheFile) readCacheFile(path, new VQCacheFile()); + return (VqQvcFile) readCacheFile(path, new VqQvcFile()); } catch (final IOException e) { System.err.println("Failed to read VQ cache file." + path); e.printStackTrace(System.err); @@ -252,7 +251,7 @@ public class QuantizationCacheManager { * @return SQ codebook or null. */ public SQCodebook loadSQCodebook(final String trainFile, final int codebookSize) { - final SQCacheFile cacheFile = loadSQCacheFile(trainFile, codebookSize); + final SqQvcFile cacheFile = loadSQCacheFile(trainFile, codebookSize); if (cacheFile != null) return cacheFile.getCodebook(); else @@ -270,7 +269,7 @@ public class QuantizationCacheManager { public VQCodebook loadVQCodebook(final String trainFile, final int codebookSize, final V3i vDim) { - final VQCacheFile cacheFile = loadVQCacheFile(trainFile, codebookSize, vDim); + final VqQvcFile cacheFile = loadVQCacheFile(trainFile, codebookSize, vDim); if (cacheFile != null) return cacheFile.getCodebook(); else @@ -278,11 +277,11 @@ public class QuantizationCacheManager { } - private static ICacheFile getCacheFile(final QuantizationType qt) { + private static IQvcFile getCacheFile(final QuantizationType qt) { if (qt.isOneOf(QuantizationType.Vector1D, QuantizationType.Vector2D, QuantizationType.Vector3D)) - return new VQCacheFile(); + return new VqQvcFile(); else if (qt == QuantizationType.Scalar) - return new SQCacheFile(); + return new SqQvcFile(); assert (false) : "Invalid quantization type."; return null; @@ -295,15 +294,15 @@ public class QuantizationCacheManager { * @param compressionParams Parameters used to find cache file. * @return Cache files which are available for given file and quantization type. */ - public ArrayList<ICacheFile> loadAvailableCacheFiles(final CompressionOptions compressionParams) { - final ArrayList<ICacheFile> availableCacheFiles = new ArrayList<>(); + public ArrayList<IQvcFile> loadAvailableCacheFiles(final CompressionOptions compressionParams) { + final ArrayList<IQvcFile> availableCacheFiles = new ArrayList<>(); final int originalBPCI = compressionParams.getBitsPerCodebookIndex(); try { for (int bpci = 2; bpci < 9; bpci++) { // 2 to 8 compressionParams.setBitsPerCodebookIndex(bpci); - final ICacheFile bpciCacheFile = loadCacheFile(compressionParams); + final IQvcFile bpciCacheFile = loadCacheFile(compressionParams); if (bpciCacheFile != null) { availableCacheFiles.add(bpciCacheFile); } @@ -321,7 +320,7 @@ public class QuantizationCacheManager { * @param compressionParams Parameters used to find cache file. * @return Quantization cache file or null if requested file doesn't exist. */ - public ICacheFile loadCacheFile(final CompressionOptions compressionParams) { + public IQvcFile loadCacheFile(final CompressionOptions compressionParams) { final String path; final int codebookSize = (int) Math.pow(2, compressionParams.getBitsPerCodebookIndex()); switch (compressionParams.getQuantizationType()) { @@ -349,7 +348,7 @@ public class QuantizationCacheManager { * @param inputStream Input stream. * @return Cache file or null, if exception occurs. */ - private static ICacheFile readCacheFileImpl(final InputStream inputStream) { + private static IQvcFile readCacheFileImpl(final InputStream inputStream) { final DataInputStream dis; if (inputStream instanceof DataInputStream) { dis = (DataInputStream) inputStream; @@ -366,7 +365,7 @@ public class QuantizationCacheManager { return null; } - final ICacheFile cacheFile = getCacheFile(header.getQuantizationType()); + final IQvcFile cacheFile = getCacheFile(header.getQuantizationType()); assert (cacheFile != null); try { cacheFile.readFromStream(dis, header); @@ -384,7 +383,7 @@ public class QuantizationCacheManager { * @param inputStream Input data stream. * @return Cache file or null if reading fails. */ - public static ICacheFile readCacheFile(final InputStream inputStream) { + public static IQvcFile readCacheFile(final InputStream inputStream) { return readCacheFileImpl(inputStream); } @@ -395,7 +394,7 @@ public class QuantizationCacheManager { * @param path File path. * @return Cache file or null if reading fails. */ - public static ICacheFile readCacheFile(final String path) { + public static IQvcFile readCacheFile(final String path) { try (final FileInputStream fis = new FileInputStream(path)) { return readCacheFileImpl(fis); } catch (final IOException e) { @@ -433,7 +432,7 @@ public class QuantizationCacheManager { if (verbose) { - final ICacheFile cacheFile = getCacheFile(header.getQuantizationType()); + final IQvcFile cacheFile = getCacheFile(header.getQuantizationType()); assert (cacheFile != null); try (final FileInputStream fis = new FileInputStream(path); diff --git a/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java b/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java index a5f0fea8631131f416119677c6878d1d70f5adbc..32b62054975fec4337112abca419f3befb641b95 100644 --- a/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java +++ b/src/main/java/cz/it4i/qcmp/cli/functions/DebugFunction.java @@ -1,7 +1,7 @@ package cz.it4i.qcmp.cli.functions; import cz.it4i.qcmp.cache.QuantizationCacheManager; -import cz.it4i.qcmp.cache.VQCacheFile; +import cz.it4i.qcmp.cache.VqQvcFile; import cz.it4i.qcmp.cli.CompressionOptionsCLIParser; import cz.it4i.qcmp.cli.CustomFunctionBase; import cz.it4i.qcmp.huffman.HuffmanNode; @@ -29,7 +29,7 @@ public class DebugFunction extends CustomFunctionBase { @Override public boolean run() { - final VQCodebook codebook = ((VQCacheFile) QuantizationCacheManager.readCacheFile("D:\\tmp\\codebook.qvc")).getCodebook(); + final VQCodebook codebook = ((VqQvcFile) QuantizationCacheManager.readCacheFile("D:\\tmp\\codebook.qvc")).getCodebook(); final int[] symbols = new int[codebook.getCodebookSize()]; for (int i = 0; i < codebook.getCodebookSize(); i++) { @@ -56,6 +56,8 @@ public class DebugFunction extends CustomFunctionBase { ex.printStackTrace(); } + readRoot. + final boolean equal = huffmanBuilder.createEncoder().getRoot().treeEqual(readRoot); System.out.println(readRoot != null); diff --git a/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java b/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java index 82d6da1a7d1aa6b124c36a2fb3492905635c9d5d..02e987bb65ea469bda6df488c11f150442fa90d1 100644 --- a/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java +++ b/src/main/java/cz/it4i/qcmp/compression/CompressionOptions.java @@ -1,6 +1,6 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.data.V3i; import cz.it4i.qcmp.fileformat.QuantizationType; import cz.it4i.qcmp.io.InputData; @@ -69,7 +69,7 @@ public class CompressionOptions implements Cloneable { this.workerCount = (cores / 2); } - public CompressionOptions(final ICacheFile codebookCacheFile) { + public CompressionOptions(final IQvcFile codebookCacheFile) { this(); quantizationType = codebookCacheFile.getHeader().getQuantizationType(); bitsPerCodebookIndex = codebookCacheFile.getHeader().getBitsPerCodebookIndex(); diff --git a/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java index 5b4277f7c8798a0d87817de77c06ecf8472ca8a1..c93e3db2ae14bf57ec8c097c7285057562de596f 100644 --- a/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/IImageCompressor.java @@ -1,6 +1,6 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.compression.exception.ImageCompressionException; import cz.it4i.qcmp.io.InputData; @@ -50,5 +50,5 @@ public interface IImageCompressor extends IListenable { * * @param codebookCacheFile Codebook cache file. */ - void preloadGlobalCodebook(final ICacheFile codebookCacheFile); + void preloadGlobalCodebook(final IQvcFile codebookCacheFile); } diff --git a/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java index 81817f35a600dc160ee195f6d98cc35c6b0beadf..d10870fa3c73025ea13e146dee3f3a096ddc3154 100644 --- a/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/IImageDecompressor.java @@ -1,6 +1,6 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.compression.exception.ImageDecompressionException; import cz.it4i.qcmp.fileformat.QCMPFileHeader; @@ -40,5 +40,5 @@ public interface IImageDecompressor extends IListenable { * * @param codebookCacheFile Codebook cache file. */ - void preloadGlobalCodebook(final ICacheFile codebookCacheFile); + void preloadGlobalCodebook(final IQvcFile codebookCacheFile); } diff --git a/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java index 92140eb3820d996a65434779e4402273000db67c..3ff365c7ffa561f2537a560ada0af38796db6060 100644 --- a/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/ImageCompressor.java @@ -1,7 +1,7 @@ package cz.it4i.qcmp.compression; import cz.it4i.qcmp.U16; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.compression.exception.ImageCompressionException; import cz.it4i.qcmp.data.Range; import cz.it4i.qcmp.fileformat.QCMPFileHeader; @@ -20,7 +20,7 @@ public class ImageCompressor extends CompressorDecompressorBase { imageCompressor = getImageCompressor(); } - public ImageCompressor(final CompressionOptions options, final ICacheFile codebookCacheFile) { + public ImageCompressor(final CompressionOptions options, final IQvcFile codebookCacheFile) { this(options); imageCompressor.preloadGlobalCodebook(codebookCacheFile); } diff --git a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java index 7240b7cdcdec57b7d863e9110753248fe464d7e0..02ce02884048d0100255589ff1bc1836be470b85 100644 --- a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java @@ -1,6 +1,6 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.compression.exception.ImageDecompressionException; import cz.it4i.qcmp.data.ImageU16Dataset; import cz.it4i.qcmp.fileformat.QCMPFileHeader; @@ -25,7 +25,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { } - public ImageDecompressor(final ICacheFile codebookCacheFile) { + public ImageDecompressor(final IQvcFile codebookCacheFile) { this(new CompressionOptions(codebookCacheFile)); cachedDecompressor = getImageDecompressor(options.getQuantizationType()); assert (cachedDecompressor != null); diff --git a/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java index 06ee7b79632e8d81f8139b176c05459d4a954928..b782dcc81cf57ed0680e3cc282151fea418e4209 100644 --- a/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/SQImageCompressor.java @@ -1,9 +1,9 @@ package cz.it4i.qcmp.compression; import cz.it4i.qcmp.U16; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.cache.QuantizationCacheManager; -import cz.it4i.qcmp.cache.SQCacheFile; +import cz.it4i.qcmp.cache.SqQvcFile; import cz.it4i.qcmp.compression.exception.ImageCompressionException; import cz.it4i.qcmp.huffman.HuffmanEncoder; import cz.it4i.qcmp.io.InputData; @@ -42,8 +42,8 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm } @Override - public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) { - final SQCodebook cachedCodebook = ((SQCacheFile) codebookCacheFile).getCodebook(); + public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) { + final SQCodebook cachedCodebook = ((SqQvcFile) codebookCacheFile).getCodebook(); cachedQuantizer = new ScalarQuantizer(cachedCodebook); cachedHuffmanEncoder = createHuffmanEncoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()), cachedCodebook.getSymbolFrequencies()); diff --git a/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java index b962be46a092acc017f0409a654961c40d3d8a9e..703beda0fe4ddf5f18f30f927a4b0bda395301ea 100644 --- a/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/SQImageDecompressor.java @@ -1,7 +1,7 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; -import cz.it4i.qcmp.cache.SQCacheFile; +import cz.it4i.qcmp.cache.IQvcFile; +import cz.it4i.qcmp.cache.SqQvcFile; import cz.it4i.qcmp.compression.exception.ImageDecompressionException; import cz.it4i.qcmp.fileformat.QCMPFileHeader; import cz.it4i.qcmp.huffman.HuffmanDecoder; @@ -104,10 +104,10 @@ public class SQImageDecompressor extends CompressorDecompressorBase implements I } @Override - public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) { - assert (codebookCacheFile instanceof SQCacheFile) : "Incorrect codebook cache file type for SQImageDecompressor"; + public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) { + assert (codebookCacheFile instanceof SqQvcFile) : "Incorrect codebook cache file type for SQImageDecompressor"; - final SQCacheFile codebookCache = (SQCacheFile) codebookCacheFile; + final SqQvcFile codebookCache = (SqQvcFile) codebookCacheFile; cachedCodebook = codebookCache.getCodebook(); cachedHuffmanDecoder = createHuffmanDecoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()), diff --git a/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java b/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java index 063ff1c530f264c0e41dae68a6488378a55975de..babbf166675a3995e480c4271c5bf1b6d9c1a86c 100644 --- a/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/VQImageCompressor.java @@ -1,8 +1,8 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; +import cz.it4i.qcmp.cache.IQvcFile; import cz.it4i.qcmp.cache.QuantizationCacheManager; -import cz.it4i.qcmp.cache.VQCacheFile; +import cz.it4i.qcmp.cache.VqQvcFile; import cz.it4i.qcmp.compression.exception.ImageCompressionException; import cz.it4i.qcmp.data.Range; import cz.it4i.qcmp.fileformat.QuantizationType; @@ -33,8 +33,8 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm } @Override - public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) { - final VQCodebook cachedCodebook = ((VQCacheFile) codebookCacheFile).getCodebook(); + public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) { + final VQCodebook cachedCodebook = ((VqQvcFile) codebookCacheFile).getCodebook(); cachedQuantizer = new VectorQuantizer(cachedCodebook); cachedHuffmanEncoder = createHuffmanEncoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()), cachedCodebook.getVectorFrequencies()); diff --git a/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java index 6cff655804476201c0e01306a3a469a18a3c6431..9262328746cf2fbec3d6cf5bbcd85edaccfa1871 100644 --- a/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/VQImageDecompressor.java @@ -1,7 +1,7 @@ package cz.it4i.qcmp.compression; -import cz.it4i.qcmp.cache.ICacheFile; -import cz.it4i.qcmp.cache.VQCacheFile; +import cz.it4i.qcmp.cache.IQvcFile; +import cz.it4i.qcmp.cache.VqQvcFile; import cz.it4i.qcmp.compression.exception.ImageDecompressionException; import cz.it4i.qcmp.data.*; import cz.it4i.qcmp.fileformat.QCMPFileHeader; @@ -67,9 +67,9 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I } @Override - public void preloadGlobalCodebook(final ICacheFile codebookCacheFile) { - assert (codebookCacheFile instanceof VQCacheFile) : "Incorrect codebook cache file type for VQImageDecompressor"; - final VQCacheFile codebookCache = (VQCacheFile) codebookCacheFile; + public void preloadGlobalCodebook(final IQvcFile codebookCacheFile) { + assert (codebookCacheFile instanceof VqQvcFile) : "Incorrect codebook cache file type for VQImageDecompressor"; + final VqQvcFile codebookCache = (VqQvcFile) codebookCacheFile; cachedCodebook = codebookCache.getCodebook(); cachedHuffmanDecoder = createHuffmanDecoder(createHuffmanSymbols(cachedCodebook.getCodebookSize()),