From a2eceaa5f093db9e165770a0c1830d5f752e2755 Mon Sep 17 00:00:00 2001 From: Vojtech Moravec <vojtech.moravec.st@vsb.cz> Date: Fri, 25 Sep 2020 13:03:25 +0200 Subject: [PATCH] Bits Per Codebook index improvements. --- .../compression/CompressionOptions.java | 1 + .../CompressorDecompressorBase.java | 22 +++++++++++-------- .../compression/ImageCompressor.java | 4 ---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/azgracompress/compression/CompressionOptions.java b/src/main/java/azgracompress/compression/CompressionOptions.java index a28afee..e32af40 100644 --- a/src/main/java/azgracompress/compression/CompressionOptions.java +++ b/src/main/java/azgracompress/compression/CompressionOptions.java @@ -70,6 +70,7 @@ public class CompressionOptions implements Cloneable { public CompressionOptions(final ICacheFile codebookCacheFile) { this(); quantizationType = codebookCacheFile.getHeader().getQuantizationType(); + bitsPerCodebookIndex = codebookCacheFile.getHeader().getBitsPerCodebookIndex(); codebookType = CodebookType.Global; } diff --git a/src/main/java/azgracompress/compression/CompressorDecompressorBase.java b/src/main/java/azgracompress/compression/CompressorDecompressorBase.java index c6669f1..469f7b3 100644 --- a/src/main/java/azgracompress/compression/CompressorDecompressorBase.java +++ b/src/main/java/azgracompress/compression/CompressorDecompressorBase.java @@ -21,11 +21,15 @@ public abstract class CompressorDecompressorBase { private ArrayList<IStatusListener> statusListeners; private ArrayList<IProgressListener> progressListeners; - public CompressorDecompressorBase(CompressionOptions options) { + public CompressorDecompressorBase(final CompressionOptions options) { this.options = options; this.codebookSize = (int) Math.pow(2, this.options.getBitsPerCodebookIndex()); } + public int getBitsPerCodebookIndex() { + return this.options.getBitsPerCodebookIndex(); + } + public void addStatusListener(final IStatusListener listener) { if (statusListeners == null) { statusListeners = new ArrayList<>(1); @@ -45,7 +49,7 @@ public abstract class CompressorDecompressorBase { this.progressListeners.clear(); } - protected void duplicateAllListeners(IListenable other) { + protected void duplicateAllListeners(final IListenable other) { if (other == this) return; @@ -89,7 +93,7 @@ public abstract class CompressorDecompressorBase { } protected int[] createHuffmanSymbols(final int codebookSize) { - int[] symbols = new int[codebookSize]; + final int[] symbols = new int[codebookSize]; for (int i = 0; i < codebookSize; i++) { symbols[i] = i; } @@ -97,7 +101,7 @@ public abstract class CompressorDecompressorBase { } protected Huffman createHuffmanCoder(final int[] symbols, final long[] frequencies) { - Huffman huffman = new Huffman(symbols, frequencies); + final Huffman huffman = new Huffman(symbols, frequencies); huffman.buildHuffmanTree(); return huffman; } @@ -109,7 +113,7 @@ public abstract class CompressorDecompressorBase { final int from = inputData.getPlaneRange().getFrom(); final int count = inputData.getPlaneRange().getTo() - from; - int[] indices = new int[count + 1]; + final int[] indices = new int[count + 1]; for (int i = 0; i <= count; i++) { indices[i] = from + i; } @@ -120,7 +124,7 @@ public abstract class CompressorDecompressorBase { } private int[] generateAllPlaneIndices(final int planeCount) { - int[] planeIndices = new int[planeCount]; + final int[] planeIndices = new int[planeCount]; for (int i = 0; i < planeCount; i++) { planeIndices[i] = i; } @@ -152,15 +156,15 @@ public abstract class CompressorDecompressorBase { * @return Number of bytes written. * @throws ImageCompressionException when fails to write to compress stream. */ - protected long writeHuffmanEncodedIndices(DataOutputStream compressStream, + protected long writeHuffmanEncodedIndices(final DataOutputStream compressStream, final Huffman huffman, final int[] indices) throws ImageCompressionException { - try (OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerCodebookIndex(), 2048)) { + try (final OutBitStream outBitStream = new OutBitStream(compressStream, options.getBitsPerCodebookIndex(), 2048)) { for (final int index : indices) { outBitStream.write(huffman.getCode(index)); } return outBitStream.getBytesWritten(); - } catch (Exception ex) { + } catch (final Exception ex) { throw new ImageCompressionException("Unable to write indices to OutBitStream.", ex); } } diff --git a/src/main/java/azgracompress/compression/ImageCompressor.java b/src/main/java/azgracompress/compression/ImageCompressor.java index 2ace74c..2e0d000 100644 --- a/src/main/java/azgracompress/compression/ImageCompressor.java +++ b/src/main/java/azgracompress/compression/ImageCompressor.java @@ -25,10 +25,6 @@ public class ImageCompressor extends CompressorDecompressorBase { imageCompressor.preloadGlobalCodebook(codebookCacheFile); } - public int getBitsPerCodebookIndex() { - return this.options.getBitsPerCodebookIndex(); - } - /** * Set InputData object for compressor. * -- GitLab