diff --git a/src/main/java/azgracompress/compression/ImageDecompressor.java b/src/main/java/azgracompress/compression/ImageDecompressor.java index 1bb1f5c11f64053ae6d81bd46c16d0432ec86d3b..4b5651e99891a73f45431a913ba2373cfb214f9d 100644 --- a/src/main/java/azgracompress/compression/ImageDecompressor.java +++ b/src/main/java/azgracompress/compression/ImageDecompressor.java @@ -233,7 +233,6 @@ public class ImageDecompressor extends CompressorDecompressorBase { return true; } - // TODO(Moravec): Return optional to get rid of null check. public Optional<ImageU16Dataset> decompressInMemory() { try (FileInputStream fileInputStream = new FileInputStream(options.getInputDataInfo().getFilePath()); DataInputStream dataInputStream = new DataInputStream(fileInputStream)) { diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java index bc302b1a81eb742b680cd98b8b26fab98b98b3cf..976f40fcc4fd37d9ec9acbd768c7529381b43748 100644 --- a/src/main/java/azgracompress/compression/VQImageCompressor.java +++ b/src/main/java/azgracompress/compression/VQImageCompressor.java @@ -207,6 +207,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm final IPlaneLoader planeLoader; try { planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo()); + planeLoader.setWorkerCount(options.getWorkerCount()); } catch (Exception e) { throw new ImageCompressionException("Unable to create reader. " + e.getMessage()); } @@ -308,6 +309,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm final int[] huffmanSymbols = createHuffmanSymbols(getCodebookSize()); try { planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo()); + planeLoader.setWorkerCount(options.getWorkerCount()); } catch (Exception e) { throw new ImageCompressionException("Unable to create plane reader. " + e.getMessage()); } diff --git a/src/main/java/azgracompress/io/loader/BasicLoader.java b/src/main/java/azgracompress/io/loader/BasicLoader.java index fcc936eae815cd38026092ca671c2342faa82385..3d47d5423d0bda62b7c657af9b0a20b280ee034e 100644 --- a/src/main/java/azgracompress/io/loader/BasicLoader.java +++ b/src/main/java/azgracompress/io/loader/BasicLoader.java @@ -8,6 +8,7 @@ import java.io.IOException; public abstract class BasicLoader { protected final V3i dims; + protected int threadCount = 1; protected BasicLoader(final V3i datasetDims) { this.dims = datasetDims; @@ -83,15 +84,13 @@ public abstract class BasicLoader { * Load specified planes from dataset to voxel of specified dimensions. * This overload uses the valueAt function to read src data. * - * @param voxelDim Single voxel dimensions. - * @param planeRange Range of planes to load voxels from. - * @param threadCount Number of threads used for loading. + * @param voxelDim Single voxel dimensions. + * @param planeRange Range of planes to load voxels from. * @return Voxel data arranged in arrays. * @throws IOException When fails to load plane data. */ protected int[][] loadVoxelsImplByValueAt(final V3i voxelDim, - final Range<Integer> planeRange, - final int threadCount) throws IOException { + final Range<Integer> planeRange) throws IOException { // TODO(Moravec): Improve performance of loading. final Voxel dstVoxel = new Voxel(voxelDim); @@ -155,4 +154,8 @@ public abstract class BasicLoader { return voxels; } + public void setWorkerCount(final int threadCount) { + this.threadCount = threadCount; + } + } diff --git a/src/main/java/azgracompress/io/loader/IPlaneLoader.java b/src/main/java/azgracompress/io/loader/IPlaneLoader.java index 42162f98ac314b2ef9196b7686e5b4f0687cd467..9fdafcc8d6292574aa07775239da63ccd12bc33d 100644 --- a/src/main/java/azgracompress/io/loader/IPlaneLoader.java +++ b/src/main/java/azgracompress/io/loader/IPlaneLoader.java @@ -55,4 +55,11 @@ public interface IPlaneLoader { * @throws IOException when fails to load plane data. */ int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException; + + /** + * Set thread count, which can be used by the loader if needed. + * + * @param threadCount Available thread count for loader. + */ + void setWorkerCount(final int threadCount); } diff --git a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java index ecf84c9db25dbb2454a107bd8ad328a08ea4cac0..3aff05a4f1c63dd5e7042cf8d3b769dd8c5cbd7d 100644 --- a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java +++ b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java @@ -35,7 +35,6 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade protected int valueAt(int plane, int offset) { final short value = ((short[]) bufferInputData.getPixelBuffer(plane))[offset]; return TypeConverter.shortToInt(value); - // return ((value & 0xFF00) | (value & 0x00FF)); } @Override @@ -94,8 +93,7 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade @Override public int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException { - // TODO(Moravec): Thread count, now 4, should be configurable. - return loadVoxelsImplByValueAt(voxelDim, planeRange, 1); + return loadVoxelsImplByValueAt(voxelDim, planeRange); } } diff --git a/src/main/java/azgracompress/io/loader/PlaneLoaderFactory.java b/src/main/java/azgracompress/io/loader/PlaneLoaderFactory.java index 7d51b7af9df9e0d8caaf6121d36e0b4536abbf2a..b147eba2f70b90f52a7de6dd42344c557e407dfe 100644 --- a/src/main/java/azgracompress/io/loader/PlaneLoaderFactory.java +++ b/src/main/java/azgracompress/io/loader/PlaneLoaderFactory.java @@ -4,8 +4,6 @@ import azgracompress.io.BufferInputData; import azgracompress.io.FileInputData; import azgracompress.io.InputData; -import java.nio.Buffer; - public final class PlaneLoaderFactory { /** @@ -26,6 +24,5 @@ public final class PlaneLoaderFactory { default: throw new Exception("Unsupported data loader."); } -// return null; } }