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

Set parsed RAW dims and improve logging.

We weren't setting the parsed dimensions of the RAW file. Also when
input file doesn't exist, report the path of the file.

Added isConsoleApplication() helper, which returns true, when the app is
run from console.
parent 65a2620d
Branches
No related tags found
No related merge requests found
...@@ -189,7 +189,7 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable { ...@@ -189,7 +189,7 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
// Check if input file exists. // Check if input file exists.
if (!new File(fileInputData.getFilePath()).exists()) { if (!new File(fileInputData.getFilePath()).exists()) {
parseErrorOccurred = true; 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; return;
} }
...@@ -273,13 +273,16 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable { ...@@ -273,13 +273,16 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
getInputDataInfo().setDataLoaderType(InputData.DataLoaderType.RawDataLoader); getInputDataInfo().setDataLoaderType(InputData.DataLoaderType.RawDataLoader);
final Optional<V3i> parsedImageDims = ParseUtils.tryParseV3i(inputFileArguments[1], 'x'); final Optional<V3i> parsedImageDims = ParseUtils.tryParseV3i(inputFileArguments[1], 'x');
if (!parsedImageDims.isPresent()) { if (parsedImageDims.isPresent()) {
getInputDataInfo().setDimension(parsedImageDims.get());
} else {
parseErrorOccurred = true; parseErrorOccurred = true;
errorBuilder.append("Failed to parse image dimensions of format DxDxD. Got: ") errorBuilder.append("Failed to parse image dimensions of format DxDxD. Got: ")
.append(inputFileArguments[1]) .append(inputFileArguments[1])
.append('\n'); .append('\n');
return; return;
} }
// User specified plane index or plane range. // User specified plane index or plane range.
if (inputFileArguments.length > 2) { if (inputFileArguments.length > 2) {
parseInputFilePlaneOptions(errorBuilder, inputFileArguments, 2); parseInputFilePlaneOptions(errorBuilder, inputFileArguments, 2);
...@@ -531,4 +534,9 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable { ...@@ -531,4 +534,9 @@ public class ParsedCliOptions extends CompressionOptions implements Cloneable {
public Object clone() throws CloneNotSupportedException { public Object clone() throws CloneNotSupportedException {
return super.clone(); return super.clone();
} }
@Override
public boolean isConsoleApplication() {
return true;
}
} }
...@@ -139,4 +139,6 @@ public class CompressionOptions { ...@@ -139,4 +139,6 @@ public class CompressionOptions {
public void setCodebookType(CodebookType codebookType) { public void setCodebookType(CodebookType codebookType) {
this.codebookType = codebookType; this.codebookType = codebookType;
} }
public boolean isConsoleApplication() {return false;}
} }
...@@ -272,9 +272,14 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm ...@@ -272,9 +272,14 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
final int[] indices = quantizer.quantizeIntoIndices(voxelData, options.getWorkerCount()); final int[] indices = quantizer.quantizeIntoIndices(voxelData, options.getWorkerCount());
voxelLayersSizes[voxelLayerIndex] = writeHuffmanEncodedIndices(compressStream, huffman, indices); voxelLayersSizes[voxelLayerIndex] = writeHuffmanEncodedIndices(compressStream, huffman, indices);
stopwatch.stop(); stopwatch.stop();
reportProgressToListeners(voxelLayerIndex, voxelLayerCount, if (options.isConsoleApplication()) {
"%d/%d Finished voxel layer %s compression pass in %s", reportStatusToListeners("%d/%d Finished voxel layer %s compression pass in %s",
voxelLayerIndex, voxelLayerCount, voxelLayerRange.toString(), stopwatch.getElapsedTimeString()); 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; return voxelLayersSizes;
......
...@@ -136,8 +136,8 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I ...@@ -136,8 +136,8 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
final int planeDataSize = (int) header.getPlaneDataSizes()[planeIndex]; final int planeDataSize = (int) header.getPlaneDataSizes()[planeIndex];
try (InBitStream inBitStream = new InBitStream(compressedStream, try (InBitStream inBitStream = new InBitStream(compressedStream,
header.getBitsPerCodebookIndex(), header.getBitsPerCodebookIndex(),
planeDataSize)) { planeDataSize)) {
inBitStream.readToBuffer(); inBitStream.readToBuffer();
inBitStream.setAllowReadFromUnderlyingStream(false); inBitStream.setAllowReadFromUnderlyingStream(false);
...@@ -145,13 +145,13 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I ...@@ -145,13 +145,13 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
for (int vecIndex = 0; vecIndex < planeVectorCount; vecIndex++) { for (int vecIndex = 0; vecIndex < planeVectorCount; vecIndex++) {
final int huffmanSymbol = decodeHuffmanSymbol(huffman, inBitStream); final int huffmanSymbol = decodeHuffmanSymbol(huffman, inBitStream);
System.arraycopy(codebook.getVectors()[huffmanSymbol].getVector(), System.arraycopy(codebook.getVectors()[huffmanSymbol].getVector(),
0, decompressedVectors[vecIndex], 0, vectorSize); 0, decompressedVectors[vecIndex], 0, vectorSize);
} }
final ImageU16 decompressedPlane = reconstructImageFromQuantizedVectors(decompressedVectors, final ImageU16 decompressedPlane = reconstructImageFromQuantizedVectors(decompressedVectors,
qVector, qVector,
header.getImageDims()); header.getImageDims());
decompressedPlaneData = decompressedPlaneData =
TypeConverter.unsignedShortArrayToByteArray(decompressedPlane.getData(), false); TypeConverter.unsignedShortArrayToByteArray(decompressedPlane.getData(), false);
} catch (Exception ex) { } catch (Exception ex) {
...@@ -167,7 +167,7 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I ...@@ -167,7 +167,7 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
stopwatch.stop(); stopwatch.stop();
reportProgressToListeners(planeIndex, planeCountForDecompression, 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 ...@@ -207,8 +207,8 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
final int planeDataSize = (int) header.getPlaneDataSizes()[planeIndex]; final int planeDataSize = (int) header.getPlaneDataSizes()[planeIndex];
try (InBitStream inBitStream = new InBitStream(compressedStream, try (InBitStream inBitStream = new InBitStream(compressedStream,
header.getBitsPerCodebookIndex(), header.getBitsPerCodebookIndex(),
planeDataSize)) { planeDataSize)) {
inBitStream.readToBuffer(); inBitStream.readToBuffer();
inBitStream.setAllowReadFromUnderlyingStream(false); inBitStream.setAllowReadFromUnderlyingStream(false);
...@@ -221,20 +221,22 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I ...@@ -221,20 +221,22 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
currentHuffmanNode = currentHuffmanNode.traverse(bit); currentHuffmanNode = currentHuffmanNode.traverse(bit);
} }
System.arraycopy(codebook.getVectors()[currentHuffmanNode.getSymbol()].getVector(), System.arraycopy(codebook.getVectors()[currentHuffmanNode.getSymbol()].getVector(),
0, decompressedVectors[vecIndex], 0, vectorSize); 0, decompressedVectors[vecIndex], 0, vectorSize);
} }
final ImageU16 decompressedPlane = reconstructImageFromQuantizedVectors(decompressedVectors, final ImageU16 decompressedPlane = reconstructImageFromQuantizedVectors(decompressedVectors,
qVector, qVector,
header.getImageDims()); header.getImageDims());
buffer[planeIndex] = TypeConverter.intArrayToShortArray(decompressedPlane.getData()); buffer[planeIndex] = TypeConverter.intArrayToShortArray(decompressedPlane.getData());
} catch (Exception ex) { } 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, reportProgressToListeners(planeIndex, planeCountForDecompression,
"Decompressed plane %d.", planeIndex); "Decompressed plane %d.", planeIndex);
} }
} }
...@@ -283,13 +285,14 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I ...@@ -283,13 +285,14 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
for (int voxelIndex = 0; voxelIndex < voxelLayerVoxelCount; voxelIndex++) { for (int voxelIndex = 0; voxelIndex < voxelLayerVoxelCount; voxelIndex++) {
final int huffmanSymbol = decodeHuffmanSymbol(huffman, inBitStream); final int huffmanSymbol = decodeHuffmanSymbol(huffman, inBitStream);
System.arraycopy(codebook.getVectors()[huffmanSymbol].getVector(), System.arraycopy(codebook.getVectors()[huffmanSymbol].getVector(),
0, decompressedVoxels[voxelIndex], 0, vectorSize); 0, decompressedVoxels[voxelIndex], 0, vectorSize);
} }
final Voxel currentVoxel = new Voxel(currentVoxelLayerDims); final Voxel currentVoxel = new Voxel(currentVoxelLayerDims);
currentVoxelLayer = currentVoxel.reconstructFromVoxelsToDataset(voxelDims, decompressedVoxels); currentVoxelLayer = currentVoxel.reconstructFromVoxelsToDataset(voxelDims, decompressedVoxels);
} catch (Exception e) { } 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++) { for (int layer = 0; layer < currentVoxelLayerDims.getZ(); layer++) {
...@@ -301,9 +304,14 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I ...@@ -301,9 +304,14 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
} }
stopwatch.stop(); stopwatch.stop();
reportProgressToListeners(voxelLayerIndex, voxelLayerCount, if (options.isConsoleApplication()) {
"Decompressed voxel layer %d/%d in %s", reportStatusToListeners("Decompressed voxel layer %d/%d in %s",
voxelLayerIndex, voxelLayerCount, stopwatch.getElapsedTimeString()); voxelLayerIndex, voxelLayerCount, stopwatch.getElapsedTimeString());
} else {
reportProgressToListeners(voxelLayerIndex, voxelLayerCount,
"Decompressed voxel layer %d/%d in %s",
voxelLayerIndex, voxelLayerCount, stopwatch.getElapsedTimeString());
}
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment