Skip to content
Snippets Groups Projects
CompressionOptions.java 3.75 KiB
package azgracompress.compression;

import azgracompress.data.V2i;
import azgracompress.data.V3i;
import azgracompress.fileformat.QuantizationType;

/**
 * Options for the compressor/decompressor.
 */
public class CompressionOptions {
    /**
     * Input image or compressed file.
     */
    private String inputFilePath;

    /**
     * Output image or compressed file.
     */
    private String outputFilePath;

    /**
     * Type of quantization.
     */
    private QuantizationType quantizationType;

    /**
     * Directory which contains codebook caches.
     */
    private String codebookCacheFolder = null;

    /**
     * Number of bits, which are used to encode single codebook index.
     */
    private int bitsPerCodebookIndex = 8;

    /**
     * Dimensions of the quantization vector.
     * TODO: Once we support 3D quantization, this should be V3i.
     */
    private V2i vectorDimension = new V2i(0);

    /**
     * Dimensions of the input image data.
     */
    private V3i imageDimension = new V3i(0);

    /**
     * Flag, whether to use middle plane as reference plane for codebook creation.
     */
    private boolean useMiddlePlane = false;

    /**
     * Index of the plane to compress.
     */
    private Integer planeIndex = null;

    /**
     * Range of the planes to compress.
     */
    Interval<Integer> planeRange = null;

    /**
     * Number of workers to be used for different operations.
     */
    private int workerCount = 1;

    // NOTE(Moravec): Getters and setters for the private fields.


    public String getInputFilePath() {
        return inputFilePath;
    }

    public void setInputFilePath(String inputFilePath) {
        this.inputFilePath = inputFilePath;
    }

    public String getOutputFilePath() {
        return outputFilePath;
    }

    public void setOutputFilePath(String outputFilePath) {
        this.outputFilePath = outputFilePath;
    }

    public QuantizationType getQuantizationType() {
        return quantizationType;
    }

    public void setQuantizationType(QuantizationType quantizationType) {
        this.quantizationType = quantizationType;
    }

    public String getCodebookCacheFolder() {
        return codebookCacheFolder;
    }

    public void setCodebookCacheFolder(String codebookCacheFolder) {
        this.codebookCacheFolder = codebookCacheFolder;
    }

    public int getBitsPerCodebookIndex() {
        return bitsPerCodebookIndex;
    }

    public void setBitsPerCodebookIndex(int bitsPerCodebookIndex) {
        this.bitsPerCodebookIndex = bitsPerCodebookIndex;
    }

    public V2i getVectorDimension() {
        return vectorDimension;
    }

    public void setVectorDimension(V2i vectorDimension) {
        this.vectorDimension = vectorDimension;
    }

    public V3i getImageDimension() {
        return imageDimension;
    }

    public void setImageDimension(V3i imageDimension) {
        this.imageDimension = imageDimension;
    }

    public boolean shouldUseMiddlePlane() {
        return useMiddlePlane;
    }

    public void setUseMiddlePlane(boolean useMiddlePlane) {
        this.useMiddlePlane = useMiddlePlane;
    }

    public Integer getPlaneIndex() {
        return planeIndex;
    }

    public boolean isPlaneIndexSet() {
        return (planeIndex != null);
    }

    public boolean isPlaneRangeSet() {
        return (planeRange != null);
    }

    public void setPlaneIndex(Integer planeIndex) {
        this.planeIndex = planeIndex;
    }

    public Interval<Integer> getPlaneRange() {
        return planeRange;
    }

    public void setPlaneRange(Interval<Integer> planeRange) {
        this.planeRange = planeRange;
    }

    public int getWorkerCount() {
        return workerCount;
    }

    public void setWorkerCount(int workerCount) {
        this.workerCount = workerCount;
    }
}