Skip to content
Snippets Groups Projects
Commit 7662a4e6 authored by Vojtěch Moravec's avatar Vojtěch Moravec
Browse files

Add setWorkerCount() in IPlaneLoader.

With this API you can set worker count for plane loader.
Plane loader may want to use more than one thread in some operations.
parent d971b564
No related branches found
No related tags found
No related merge requests found
...@@ -233,7 +233,6 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -233,7 +233,6 @@ public class ImageDecompressor extends CompressorDecompressorBase {
return true; return true;
} }
// TODO(Moravec): Return optional to get rid of null check.
public Optional<ImageU16Dataset> decompressInMemory() { public Optional<ImageU16Dataset> decompressInMemory() {
try (FileInputStream fileInputStream = new FileInputStream(options.getInputDataInfo().getFilePath()); try (FileInputStream fileInputStream = new FileInputStream(options.getInputDataInfo().getFilePath());
DataInputStream dataInputStream = new DataInputStream(fileInputStream)) { DataInputStream dataInputStream = new DataInputStream(fileInputStream)) {
......
...@@ -207,6 +207,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm ...@@ -207,6 +207,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
final IPlaneLoader planeLoader; final IPlaneLoader planeLoader;
try { try {
planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo()); planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo());
planeLoader.setWorkerCount(options.getWorkerCount());
} catch (Exception e) { } catch (Exception e) {
throw new ImageCompressionException("Unable to create reader. " + e.getMessage()); throw new ImageCompressionException("Unable to create reader. " + e.getMessage());
} }
...@@ -308,6 +309,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm ...@@ -308,6 +309,7 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
final int[] huffmanSymbols = createHuffmanSymbols(getCodebookSize()); final int[] huffmanSymbols = createHuffmanSymbols(getCodebookSize());
try { try {
planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo()); planeLoader = PlaneLoaderFactory.getPlaneLoaderForInputFile(options.getInputDataInfo());
planeLoader.setWorkerCount(options.getWorkerCount());
} catch (Exception e) { } catch (Exception e) {
throw new ImageCompressionException("Unable to create plane reader. " + e.getMessage()); throw new ImageCompressionException("Unable to create plane reader. " + e.getMessage());
} }
......
...@@ -8,6 +8,7 @@ import java.io.IOException; ...@@ -8,6 +8,7 @@ import java.io.IOException;
public abstract class BasicLoader { public abstract class BasicLoader {
protected final V3i dims; protected final V3i dims;
protected int threadCount = 1;
protected BasicLoader(final V3i datasetDims) { protected BasicLoader(final V3i datasetDims) {
this.dims = datasetDims; this.dims = datasetDims;
...@@ -85,13 +86,11 @@ public abstract class BasicLoader { ...@@ -85,13 +86,11 @@ public abstract class BasicLoader {
* *
* @param voxelDim Single voxel dimensions. * @param voxelDim Single voxel dimensions.
* @param planeRange Range of planes to load voxels from. * @param planeRange Range of planes to load voxels from.
* @param threadCount Number of threads used for loading.
* @return Voxel data arranged in arrays. * @return Voxel data arranged in arrays.
* @throws IOException When fails to load plane data. * @throws IOException When fails to load plane data.
*/ */
protected int[][] loadVoxelsImplByValueAt(final V3i voxelDim, protected int[][] loadVoxelsImplByValueAt(final V3i voxelDim,
final Range<Integer> planeRange, final Range<Integer> planeRange) throws IOException {
final int threadCount) throws IOException {
// TODO(Moravec): Improve performance of loading. // TODO(Moravec): Improve performance of loading.
final Voxel dstVoxel = new Voxel(voxelDim); final Voxel dstVoxel = new Voxel(voxelDim);
...@@ -155,4 +154,8 @@ public abstract class BasicLoader { ...@@ -155,4 +154,8 @@ public abstract class BasicLoader {
return voxels; return voxels;
} }
public void setWorkerCount(final int threadCount) {
this.threadCount = threadCount;
}
} }
...@@ -55,4 +55,11 @@ public interface IPlaneLoader { ...@@ -55,4 +55,11 @@ public interface IPlaneLoader {
* @throws IOException when fails to load plane data. * @throws IOException when fails to load plane data.
*/ */
int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException; 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);
} }
...@@ -35,7 +35,6 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade ...@@ -35,7 +35,6 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade
protected int valueAt(int plane, int offset) { protected int valueAt(int plane, int offset) {
final short value = ((short[]) bufferInputData.getPixelBuffer(plane))[offset]; final short value = ((short[]) bufferInputData.getPixelBuffer(plane))[offset];
return TypeConverter.shortToInt(value); return TypeConverter.shortToInt(value);
// return ((value & 0xFF00) | (value & 0x00FF));
} }
@Override @Override
...@@ -94,8 +93,7 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade ...@@ -94,8 +93,7 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade
@Override @Override
public int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException { 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);
return loadVoxelsImplByValueAt(voxelDim, planeRange, 1);
} }
} }
...@@ -4,8 +4,6 @@ import azgracompress.io.BufferInputData; ...@@ -4,8 +4,6 @@ import azgracompress.io.BufferInputData;
import azgracompress.io.FileInputData; import azgracompress.io.FileInputData;
import azgracompress.io.InputData; import azgracompress.io.InputData;
import java.nio.Buffer;
public final class PlaneLoaderFactory { public final class PlaneLoaderFactory {
/** /**
...@@ -26,6 +24,5 @@ public final class PlaneLoaderFactory { ...@@ -26,6 +24,5 @@ public final class PlaneLoaderFactory {
default: default:
throw new Exception("Unsupported data loader."); throw new Exception("Unsupported data loader.");
} }
// return null;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment