Class RiceCompressor<T extends Buffer>

java.lang.Object
nom.tam.fits.compression.algorithm.rice.RiceCompressor<T>
All Implemented Interfaces:
ICompressor<T>
Direct Known Subclasses:
RiceCompressor.ByteRiceCompressor, RiceCompressor.IntRiceCompressor, RiceCompressor.ShortRiceCompressor

public abstract class RiceCompressor<T extends Buffer> extends Object implements ICompressor<T>
The original compression was designed by Rice, Yeh, and Miller the code was written by Richard White at STSc at the STScI and included (ported to c and adapted) in cfitsio by William Pence, NASA/GSFC. That code was then ported to java by R. van Nieuwenhoven. Later it was massively refactored to harmonize the different compression algorithms and reduce the duplicate code pieces without obscuring the algorithm itself as far as possible.
  • Field Details

    • UNSIGNED_BYTE_MASK

      private static final long UNSIGNED_BYTE_MASK
      mask to convert a "unsigned" byte to a long.
      See Also:
    • UNSIGNED_SHORT_MASK

      private static final long UNSIGNED_SHORT_MASK
      mask to convert a "unsigned" short to a long.
      See Also:
    • UNSIGNED_INTEGER_MASK

      private static final long UNSIGNED_INTEGER_MASK
      mask to convert a "unsigned" int to a long.
      See Also:
    • LOG

      private static final Logger LOG
      logger to log to.
    • BITS_OF_1_BYTE

      private static final int BITS_OF_1_BYTE
      See Also:
    • BITS_PER_BYTE

      private static final int BITS_PER_BYTE
      See Also:
    • BYTE_MASK

      private static final int BYTE_MASK
      See Also:
    • FS_BITS_FOR_BYTE

      private static final int FS_BITS_FOR_BYTE
      See Also:
    • FS_BITS_FOR_INT

      private static final int FS_BITS_FOR_INT
      See Also:
    • FS_BITS_FOR_SHORT

      private static final int FS_BITS_FOR_SHORT
      See Also:
    • FS_MAX_FOR_BYTE

      private static final int FS_MAX_FOR_BYTE
      See Also:
    • FS_MAX_FOR_INT

      private static final int FS_MAX_FOR_INT
      See Also:
    • FS_MAX_FOR_SHORT

      private static final int FS_MAX_FOR_SHORT
      See Also:
    • NONZERO_COUNT

      private static final int[] NONZERO_COUNT
    • bBits

      private final int bBits
    • bitsPerPixel

      private final int bitsPerPixel
    • blockSize

      private final int blockSize
    • fsBits

      private final int fsBits
    • fsMax

      private final int fsMax
  • Constructor Details

  • Method Details

    • undoMappingAndDifferencing

      private long undoMappingAndDifferencing(long lastpix, long diff)

      undo mapping and differencing Note that some of these operations will overflow the unsigned int arithmetic -- that's OK, it all works out to give the right answers in the output file.

      In java this is more complicated because of the missing unsigned integers. trying to simulate the behavior

      Parameters:
      lastpix - the current last pix value
      diff - the difference to "add"
      Returns:
      return the new lastpiy value
    • compress

      protected void compress(int dataLength, int firstPixel, BitBuffer buffer)
      compress the integer tiledImageOperation on a rise compressed byte buffer.
      Parameters:
      dataLength - length of the data to compress
      firstPixel - the value of the first pixel
      buffer - the buffer to write to
    • decompressBuffer

      protected void decompressBuffer(ByteBuffer readBuffer, int nx)
      decompress the readbuffer and fill the pixelarray.
      Parameters:
      readBuffer - input buffer
      nx - the number of pixel to uncompress
    • nextPixel

      protected abstract int nextPixel()
    • nextPixel

      protected abstract void nextPixel(int pixel)