jj2000.j2k.quantization.dequantizer
Class StdDequantizer

java.lang.Object
  |
  +--jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
        |
        +--jj2000.j2k.quantization.dequantizer.Dequantizer
              |
              +--jj2000.j2k.quantization.dequantizer.StdDequantizer
All Implemented Interfaces:
CBlkWTDataSrcDec, InvWTData, MultiResImgData

public class StdDequantizer
extends Dequantizer

This class implements a scalar dequantizer with deadzone. The output can be either integer ('int') or floating-point ('float') data. The dequantization step sizes and other parameters are taken from a StdDequantizerParams class, which inherits from DequantizerParams.

Sign magnitude representation is used (instead of two's complement) for the input data. The most significant bit is used for the sign (0 if positive, 1 if negative). Then the magnitude of the quantized coefficient is stored in the next most significat bits. The most significant magnitude bit corresponds to the most significant bit-plane and so on.

When reversible quantization is used, this class only converts between the sign-magnitude representation and the integer (or eventually fixed-point) output, since there is no true quantization.

The output data is fixed-point two's complement for 'int' output and floating-point for 'float' output. The type of output and the number number of fractional bits for 'int' output are defined at the constructor. Each component may have a different number of fractional bits.

The reconstruction levels used by the dequantizer are exactly what is received from the entropy decoder. It is assumed that the entropy decoder always returns codewords that are midways in the decoded intervals. In this way the dequantized values will always lie midways in the quantization intervals.


Field Summary
private  GuardBitsSpec gbs
          The number of guard bits spec
private  DataBlkInt inblk
          The 'DataBlkInt' object used to request data, used when output data is not int
private  int outdtype
          Type of the current output data
private  StdDequantizerParams params
          The decoding parameters of the dequantizer
private  QuantStepSizeSpec qsss
          The quantizer step sizes spec
private  QuantTypeSpec qts
          The quantizer type spec
 
Fields inherited from class jj2000.j2k.quantization.dequantizer.Dequantizer
OPT_PREFIX, rb, src, utrb
 
Fields inherited from class jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
mressrc, tIdx
 
Constructor Summary
StdDequantizer(CBlkQuantDataSrcDec src, int[] utrb, DecoderSpecs decSpec)
          Initializes the source of compressed data.
 
Method Summary
 DataBlk getCodeBlock(int c, int m, int n, SubbandSyn sb, DataBlk cblk)
          Returns the specified code-block in the current tile for the specified component, as a copy (see below).
 int getFixedPoint(int c)
          Returns the position of the fixed point in the output data for the specified component.
 DataBlk getInternCodeBlock(int c, int m, int n, SubbandSyn sb, DataBlk cblk)
          Returns the specified code-block in the current tile for the specified component (as a reference or copy).
 
Methods inherited from class jj2000.j2k.quantization.dequantizer.Dequantizer
getCbULX, getCbULY, getNomRangeBits, getParameterInfo, getSynSubbandTree, nextTile, setTile
 
Methods inherited from class jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getImgHeight, getImgULX, getImgULY, getImgWidth, getNomTileHeight, getNomTileWidth, getNumComps, getNumTiles, getNumTiles, getResULX, getResULY, getTile, getTileCompHeight, getTileCompWidth, getTileHeight, getTileIdx, getTilePartULX, getTilePartULY, getTileWidth
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface jj2000.j2k.wavelet.synthesis.MultiResImgData
getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getImgHeight, getImgULX, getImgULY, getImgWidth, getNomTileHeight, getNomTileWidth, getNumComps, getNumTiles, getNumTiles, getResULX, getResULY, getTile, getTileCompHeight, getTileCompWidth, getTileHeight, getTileIdx, getTilePartULX, getTilePartULY, getTileWidth
 

Field Detail

qts

private QuantTypeSpec qts
The quantizer type spec


qsss

private QuantStepSizeSpec qsss
The quantizer step sizes spec


gbs

private GuardBitsSpec gbs
The number of guard bits spec


params

private StdDequantizerParams params
The decoding parameters of the dequantizer


inblk

private DataBlkInt inblk
The 'DataBlkInt' object used to request data, used when output data is not int


outdtype

private int outdtype
Type of the current output data

Constructor Detail

StdDequantizer

public StdDequantizer(CBlkQuantDataSrcDec src,
                      int[] utrb,
                      DecoderSpecs decSpec)
Initializes the source of compressed data. And sets the number of range bits and fraction bits and receives the parameters for the dequantizer.

Parameters:
src - From where to obtain the quantized data.
Throws:
java.lang.IllegalArgumentException - Thrown if 'outdt' is neither TYPE_FLOAT nor TYPE_INT, or if 'param' specify reversible quantization and 'outdt' is not TYPE_INT or 'fp' has non-zero values, or if 'outdt' is TYPE_FLOAT and 'fp' has non-zero values.
See Also:
Dequantizer.getNomRangeBits(int)
Method Detail

getFixedPoint

public int getFixedPoint(int c)
Returns the position of the fixed point in the output data for the specified component. This is the position of the least significant integral (i.e. non-fractional) bit, which is equivalent to the number of fractional bits. For instance, for fixed-point values with 2 fractional bits, 2 is returned. For floating-point data this value does not apply and 0 should be returned. Position 0 is the position of the least significant bit in the data. If the output data is 'float' then 0 is always returned.

Note: Fractional bits are no more supported by JJ2000.

Parameters:
c - The index of the component.
Returns:
The position of the fixed-point, which is the same as the number of fractional bits. For floating-point data 0 is returned.

getCodeBlock

public final DataBlk getCodeBlock(int c,
                                  int m,
                                  int n,
                                  SubbandSyn sb,
                                  DataBlk cblk)
Returns the specified code-block in the current tile for the specified component, as a copy (see below).

The returned code-block may be progressive, which is indicated by the 'progressive' variable of the returned 'DataBlk' object. If a code-block is progressive it means that in a later request to this method for the same code-block it is possible to retrieve data which is a better approximation, since meanwhile more data to decode for the code-block could have been received. If the code-block is not progressive then later calls to this method for the same code-block will return the exact same data values.

The data returned by this method is always a copy of the internal data of this object, if any, and it can be modified "in place" without any problems after being returned. The 'offset' of the returned data is 0, and the 'scanw' is the same as the code-block width. See the 'DataBlk' class.

Parameters:
c - The component for which to return the next code-block.
m - The vertical index of the code-block to return, in the specified subband.
n - The horizontal index of the code-block to return, in the specified subband.
sb - The subband in which the code-block to return is.
cblk - If non-null this object will be used to return the new code-block. If null a new one will be allocated and returned. If the "data" array of the object is non-null it will be reused, if possible, to return the data.
Returns:
The next code-block in the current tile for component 'n', or null if all code-blocks for the current tile have been returned.
See Also:
DataBlk

getInternCodeBlock

public final DataBlk getInternCodeBlock(int c,
                                        int m,
                                        int n,
                                        SubbandSyn sb,
                                        DataBlk cblk)
Returns the specified code-block in the current tile for the specified component (as a reference or copy).

The returned code-block may be progressive, which is indicated by the 'progressive' variable of the returned 'DataBlk' object. If a code-block is progressive it means that in a later request to this method for the same code-block it is possible to retrieve data which is a better approximation, since meanwhile more data to decode for the code-block could have been received. If the code-block is not progressive then later calls to this method for the same code-block will return the exact same data values.

The data returned by this method can be the data in the internal buffer of this object, if any, and thus can not be modified by the caller. The 'offset' and 'scanw' of the returned data can be arbitrary. See the 'DataBlk' class.

Parameters:
c - The component for which to return the next code-block.
m - The vertical index of the code-block to return, in the specified subband.
n - The horizontal index of the code-block to return, in the specified subband.
sb - The subband in which the code-block to return is.
cblk - If non-null this object will be used to return the new code-block. If null a new one will be allocated and returned. If the "data" array of the object is non-null it will be reused, if possible, to return the data.
Returns:
The next code-block in the current tile for component 'n', or null if all code-blocks for the current tile have been returned.
See Also:
DataBlk