diff --git a/src/main/java/azgracompress/cli/ParsedCliOptions.java b/src/main/java/azgracompress/cli/ParsedCliOptions.java index d20f44a1653df7874c14b5be8422d2809be1666f..db87c5a66b5e012d798201df98b5ab81552d9cde 100644 --- a/src/main/java/azgracompress/cli/ParsedCliOptions.java +++ b/src/main/java/azgracompress/cli/ParsedCliOptions.java @@ -189,7 +189,7 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable { // Check if input file exists. if (!new File(fileInputData.getFilePath()).exists()) { parseErrorOccurred = true; - errorBuilder.append("Input file doesn't exist.\n"); + errorBuilder.append("Input file doesn't exist. Provided path: '").append(fileInputData.getFilePath()).append("'\n"); return; } @@ -273,13 +273,16 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable { getInputDataInfo().setDataLoaderType(InputData.DataLoaderType.RawDataLoader); final Optional<V3i> parsedImageDims = ParseUtils.tryParseV3i(inputFileArguments[1], 'x'); - if (!parsedImageDims.isPresent()) { + if (parsedImageDims.isPresent()) { + getInputDataInfo().setDimension(parsedImageDims.get()); + } else { parseErrorOccurred = true; errorBuilder.append("Failed to parse image dimensions of format DxDxD. Got: ") .append(inputFileArguments[1]) .append('\n'); return; } + // User specified plane index or plane range. if (inputFileArguments.length > 2) { parseInputFilePlaneOptions(errorBuilder, inputFileArguments, 2); @@ -531,4 +534,9 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable { public Object clone() throws CloneNotSupportedException { return super.clone(); } + + @Override + public boolean isConsoleApplication() { + return true; + } } diff --git a/src/main/java/azgracompress/compression/CompressionOptions.java b/src/main/java/azgracompress/compression/CompressionOptions.java index 0d7040de5e8eced04b5760a14b0adb7706fdae0e..66d805a0b1b1af053453c78d595faf749af506d1 100644 --- a/src/main/java/azgracompress/compression/CompressionOptions.java +++ b/src/main/java/azgracompress/compression/CompressionOptions.java @@ -139,4 +139,6 @@ public class CompressionOptions { public void setCodebookType(CodebookType codebookType) { this.codebookType = codebookType; } + + public boolean isConsoleApplication() {return false;} } diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java index 777236c62124b0165b2b4988b15a4fb59559b516..cbbd70245a7ad6b4e3a9bb348faa4302688ab238 100644 --- a/src/main/java/azgracompress/compression/VQImageCompressor.java +++ b/src/main/java/azgracompress/compression/VQImageCompressor.java @@ -272,9 +272,14 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm final int[] indices = quantizer.quantizeIntoIndices(voxelData, options.getWorkerCount()); voxelLayersSizes[voxelLayerIndex] = writeHuffmanEncodedIndices(compressStream, huffman, indices); stopwatch.stop(); - reportProgressToListeners(voxelLayerIndex, voxelLayerCount, - "%d/%d Finished voxel layer %s compression pass in %s", - voxelLayerIndex, voxelLayerCount, voxelLayerRange.toString(), stopwatch.getElapsedTimeString()); + if (options.isConsoleApplication()) { + reportStatusToListeners("%d/%d Finished voxel layer %s compression pass in %s", + voxelLayerIndex, voxelLayerCount, voxelLayerRange.toString(), stopwatch.getElapsedTimeString()); + } else { + reportProgressToListeners(voxelLayerIndex, voxelLayerCount, + "%d/%d Finished voxel layer %s compression pass in %s", + voxelLayerIndex, voxelLayerCount, voxelLayerRange.toString(), stopwatch.getElapsedTimeString()); + } } return voxelLayersSizes; diff --git a/src/main/java/azgracompress/compression/VQImageDecompressor.java b/src/main/java/azgracompress/compression/VQImageDecompressor.java index 220b91b5b4939631c8b5f0a6cd3f9c91f466a476..ec0d3795680948aed3e74a519ddafe143e6f4fe6 100644 --- a/src/main/java/azgracompress/compression/VQImageDecompressor.java +++ b/src/main/java/azgracompress/compression/VQImageDecompressor.java @@ -136,8 +136,8 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I final int planeDataSize = (int) header.getPlaneDataSizes()[planeIndex]; try (InBitStream inBitStream = new InBitStream(compressedStream, - header.getBitsPerCodebookIndex(), - planeDataSize)) { + header.getBitsPerCodebookIndex(), + planeDataSize)) { inBitStream.readToBuffer(); inBitStream.setAllowReadFromUnderlyingStream(false); @@ -145,13 +145,13 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I for (int vecIndex = 0; vecIndex < planeVectorCount; vecIndex++) { final int huffmanSymbol = decodeHuffmanSymbol(huffman, inBitStream); System.arraycopy(codebook.getVectors()[huffmanSymbol].getVector(), - 0, decompressedVectors[vecIndex], 0, vectorSize); + 0, decompressedVectors[vecIndex], 0, vectorSize); } final ImageU16 decompressedPlane = reconstructImageFromQuantizedVectors(decompressedVectors, - qVector, - header.getImageDims()); + qVector, + header.getImageDims()); decompressedPlaneData = TypeConverter.unsignedShortArrayToByteArray(decompressedPlane.getData(), false); } catch (Exception ex) { @@ -167,7 +167,7 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I stopwatch.stop(); reportProgressToListeners(planeIndex, planeCountForDecompression, - "Decompressed plane %d in %s", planeIndex, stopwatch.getElapsedTimeString()); + "Decompressed plane %d in %s", planeIndex, stopwatch.getElapsedTimeString()); } } @@ -207,8 +207,8 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I final int planeDataSize = (int) header.getPlaneDataSizes()[planeIndex]; try (InBitStream inBitStream = new InBitStream(compressedStream, - header.getBitsPerCodebookIndex(), - planeDataSize)) { + header.getBitsPerCodebookIndex(), + planeDataSize)) { inBitStream.readToBuffer(); inBitStream.setAllowReadFromUnderlyingStream(false); @@ -221,20 +221,22 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I currentHuffmanNode = currentHuffmanNode.traverse(bit); } System.arraycopy(codebook.getVectors()[currentHuffmanNode.getSymbol()].getVector(), - 0, decompressedVectors[vecIndex], 0, vectorSize); + 0, decompressedVectors[vecIndex], 0, vectorSize); } final ImageU16 decompressedPlane = reconstructImageFromQuantizedVectors(decompressedVectors, - qVector, - header.getImageDims()); + qVector, + header.getImageDims()); buffer[planeIndex] = TypeConverter.intArrayToShortArray(decompressedPlane.getData()); } catch (Exception ex) { - throw new ImageDecompressionException("VQImageDecompressor::decompressToBuffer() - Unable to read indices from InBitStream.", ex); + throw new ImageDecompressionException("VQImageDecompressor::decompressToBuffer() - Unable to read indices from " + + "InBitStream.", + ex); } reportProgressToListeners(planeIndex, planeCountForDecompression, - "Decompressed plane %d.", planeIndex); + "Decompressed plane %d.", planeIndex); } } @@ -283,13 +285,14 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I for (int voxelIndex = 0; voxelIndex < voxelLayerVoxelCount; voxelIndex++) { final int huffmanSymbol = decodeHuffmanSymbol(huffman, inBitStream); System.arraycopy(codebook.getVectors()[huffmanSymbol].getVector(), - 0, decompressedVoxels[voxelIndex], 0, vectorSize); + 0, decompressedVoxels[voxelIndex], 0, vectorSize); } final Voxel currentVoxel = new Voxel(currentVoxelLayerDims); currentVoxelLayer = currentVoxel.reconstructFromVoxelsToDataset(voxelDims, decompressedVoxels); } catch (Exception e) { - throw new ImageDecompressionException("VQImageDecompressor::decompressVoxels() - Unable to read indices from InBitStream.", e); + throw new ImageDecompressionException("VQImageDecompressor::decompressVoxels() - Unable to read indices from InBitStream.", + e); } for (int layer = 0; layer < currentVoxelLayerDims.getZ(); layer++) { @@ -301,9 +304,14 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I } stopwatch.stop(); - reportProgressToListeners(voxelLayerIndex, voxelLayerCount, - "Decompressed voxel layer %d/%d in %s", - voxelLayerIndex, voxelLayerCount, stopwatch.getElapsedTimeString()); + if (options.isConsoleApplication()) { + reportStatusToListeners("Decompressed voxel layer %d/%d in %s", + voxelLayerIndex, voxelLayerCount, stopwatch.getElapsedTimeString()); + } else { + reportProgressToListeners(voxelLayerIndex, voxelLayerCount, + "Decompressed voxel layer %d/%d in %s", + voxelLayerIndex, voxelLayerCount, stopwatch.getElapsedTimeString()); + } } }