jj2000.j2k.quantization.dequantizer
Class Dequantizer

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

public abstract class Dequantizer
extends MultiResImgDataAdapter
implements CBlkWTDataSrcDec

This is the abstract class from which all dequantizers must inherit. This class has the concept of a current tile and all operations are performed on the current tile.

This class provides default implemenations for most of the methods (wherever it makes sense), under the assumption that the image and component dimensions, and the tiles, are not modifed by the dequantizer. If that is not the case for a particular implementation then the methods should be overriden.

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.

The output data is either in floating-point, or in fixed-point two's complement. In case of floating-point data the the value returned by getFixedPoint() must be 0. If the case of fixed-point data the number of fractional bits must be defined at the constructor of the implementing class and all operations must be performed accordingly. Each component may have a different number of fractional bits.


Field Summary
private  CompTransfSpec cts
          The inverse component transformation specifications
static char OPT_PREFIX
          The prefix for dequantizer options: 'Q'
private static java.lang.String[][] pinfo
          The list of parameters that is accepted by the bit stream readers.
protected  int[] rb
          The "range bits" for each transformed component
protected  CBlkQuantDataSrcDec src
          The entropy decoder from where to get the quantized data (the source).
protected  int[] utrb
          The "range bits" for each un-transformed component
private  SynWTFilterSpec wfs
          Reference to the wavelet filter specifications
 
Fields inherited from class jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
mressrc, tIdx
 
Constructor Summary
Dequantizer(CBlkQuantDataSrcDec src, int[] utrb, DecoderSpecs decSpec)
          Initializes the source of compressed data.
 
Method Summary
 int getCbULX()
          Returns the horizontal code-block partition origin.
 int getCbULY()
          Returns the vertical code-block partition origin.
 int getNomRangeBits(int c)
          Returns the number of bits, referred to as the "range bits", corresponding to the nominal range of the data in the specified component.
static java.lang.String[][] getParameterInfo()
          Returns the parameters that are used in this class and implementing classes.
 SubbandSyn getSynSubbandTree(int t, int c)
          Returns the subband tree, for the specified tile-component.
 void nextTile()
          Advances to the next tile, in standard scan-line order (by rows then columns).
 void setTile(int x, int y)
          Changes the current tile, given the new indexes.
 
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.CBlkWTDataSrcDec
getCodeBlock, getFixedPoint, getInternCodeBlock
 
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

OPT_PREFIX

public static final char OPT_PREFIX
The prefix for dequantizer options: 'Q'

See Also:
Constant Field Values

pinfo

private static final java.lang.String[][] pinfo
The list of parameters that is accepted by the bit stream readers. They start with 'Q'


src

protected CBlkQuantDataSrcDec src
The entropy decoder from where to get the quantized data (the source).


rb

protected int[] rb
The "range bits" for each transformed component


utrb

protected int[] utrb
The "range bits" for each un-transformed component


cts

private CompTransfSpec cts
The inverse component transformation specifications


wfs

private SynWTFilterSpec wfs
Reference to the wavelet filter specifications

Constructor Detail

Dequantizer

public Dequantizer(CBlkQuantDataSrcDec src,
                   int[] utrb,
                   DecoderSpecs decSpec)
Initializes the source of compressed data.

Parameters:
src - From where to obtain the quantized data.
See Also:
getNomRangeBits(int)
Method Detail

getNomRangeBits

public int getNomRangeBits(int c)
Returns the number of bits, referred to as the "range bits", corresponding to the nominal range of the data in the specified component.

The returned value corresponds to the nominal dynamic range of the reconstructed image data, not of the wavelet coefficients themselves. This is because different subbands have different gains and thus different nominal ranges. To have an idea of the nominal range in each subband the subband analysis gain value from the subband tree structure, returned by the getSynSubbandTree() method, can be used. See the Subband class for more details.

If this number is b then for unsigned data the nominal range is between 0 and 2^b-1, and for signed data it is between -2^(b-1) and 2^(b-1)-1.

Specified by:
getNomRangeBits in interface CBlkWTDataSrcDec
Parameters:
c - The index of the component
Returns:
The number of bits corresponding to the nominal range of the data.
See Also:
Subband

getSynSubbandTree

public SubbandSyn getSynSubbandTree(int t,
                                    int c)
Returns the subband tree, for the specified tile-component. This method returns the root element of the subband tree structure, see Subband and SubbandSyn. The tree comprises all the available resolution levels.

The number of magnitude bits ('magBits' member variable) for each subband may have not been not initialized (it depends on the actual dequantizer and its implementation). However, they are not necessary for the subsequent steps in the decoder chain.

Specified by:
getSynSubbandTree in interface InvWTData
Parameters:
t - The index of the tile, from 0 to T-1.
c - The index of the component, from 0 to C-1.
Returns:
The root of the tree structure.

getCbULX

public int getCbULX()
Returns the horizontal code-block partition origin. Allowable values are 0 and 1, nothing else.

Specified by:
getCbULX in interface InvWTData

getCbULY

public int getCbULY()
Returns the vertical code-block partition origin. Allowable values are 0 and 1, nothing else.

Specified by:
getCbULY in interface InvWTData

getParameterInfo

public static java.lang.String[][] getParameterInfo()
Returns the parameters that are used in this class and implementing classes. It returns a 2D String array. Each of the 1D arrays is for a different option, and they have 3 elements. The first element is the option name, the second one is the synopsis and the third one is a long description of what the parameter is. The synopsis or description may be 'null', in which case it is assumed that there is no synopsis or description of the option, respectively. Null may be returned if no options are supported.

Returns:
the options name, their synopsis and their explanation, or null if no options are supported.

setTile

public void setTile(int x,
                    int y)
Changes the current tile, given the new indexes. An IllegalArgumentException is thrown if the indexes do not correspond to a valid tile.

This default implementation changes the tile in the source and re-initializes properly component transformation variables..

Specified by:
setTile in interface MultiResImgData
Overrides:
setTile in class MultiResImgDataAdapter
Parameters:
x - The horizontal index of the tile.
y - The vertical index of the new tile.

nextTile

public void nextTile()
Advances to the next tile, in standard scan-line order (by rows then columns). An NoNextElementException is thrown if the current tile is the last one (i.e. there is no next tile).

This default implementation just advances to the next tile in the source and re-initializes properly component transformation variables.

Specified by:
nextTile in interface MultiResImgData
Overrides:
nextTile in class MultiResImgDataAdapter