jj2000.j2k.roi
Class ROIDeScaler

java.lang.Object
  |
  +--jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
        |
        +--jj2000.j2k.roi.ROIDeScaler

public class ROIDeScaler
extends MultiResImgDataAdapter
implements CBlkQuantDataSrcDec

This class takes care of the de-scaling of ROI coefficients. The de-scaler works on a tile basis and any mask that is generated is for the current mask only

Default implementations of the methods in 'MultiResImgData' are provided through the 'MultiResImgDataAdapter' abstract class.

Sign magnitude representation is used (instead of two's complement) for the output 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.


Field Summary
private  MaxShiftSpec mss
          The MaxShiftSpec containing the scaling values for all tile-components
static char OPT_PREFIX
          The prefix for ROI decoder options: 'R'
private static java.lang.String[][] pinfo
          The list of parameters that is accepted by the entropy decoders.
private  CBlkQuantDataSrcDec src
          The entropy decoder from where to get the compressed data (the source)
 
Fields inherited from class jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
mressrc, tIdx
 
Constructor Summary
ROIDeScaler(CBlkQuantDataSrcDec src, MaxShiftSpec mss)
          Constructor of the ROI descaler, takes EntropyDEcoder as source of data to de-scale.
 
Method Summary
static ROIDeScaler createInstance(CBlkQuantDataSrcDec src, ParameterList pl, DecoderSpecs decSpec)
          Creates a ROIDeScaler object.
 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).
 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).
 Coord getNumCodeBlocks(SubbandSyn sb, int n, Coord co)
          Returns the number of code-blocks in a subband, along the horizontal and vertical dimensions.
static java.lang.String[][] getParameterInfo()
          Returns the parameters that are used in this class and implementing classes.
 int getPartitionULX()
          Returns the horizontal coordinate of the origin of the cell and code-block partition, with respect to the canvas origin, on the reference grid.
 int getPartitionULY()
          Returns the vertical coordinate of the origin of the cell and code-block partition, with respect to the canvas origin, on the reference grid.
 SubbandSyn getSubbandTree(int t, int c)
          Returns the subband tree, for the specified tile-component.
 
Methods inherited from class jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
getCompHeight, getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompWidth, getHeight, getImgHeight, getImgULX, getImgULY, getImgWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileIdx, getTileOff, getULX, getULY, getWidth, nextTile, setTile
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

mss

private MaxShiftSpec mss
The MaxShiftSpec containing the scaling values for all tile-components

OPT_PREFIX

public static final char OPT_PREFIX
The prefix for ROI decoder options: 'R'

pinfo

private static final java.lang.String[][] pinfo
The list of parameters that is accepted by the entropy decoders. They start with 'R'.

src

private CBlkQuantDataSrcDec src
The entropy decoder from where to get the compressed data (the source)
Constructor Detail

ROIDeScaler

public ROIDeScaler(CBlkQuantDataSrcDec src,
                   MaxShiftSpec mss)
Constructor of the ROI descaler, takes EntropyDEcoder as source of data to de-scale.
Parameters:
src - The EntropyDecoder that is the source of data.
mss - The MaxShiftSpec containing the scaling values for all tile-components
Method Detail

getSubbandTree

public SubbandSyn getSubbandTree(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 is not initialized.

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.

getPartitionULX

public int getPartitionULX()
Returns the horizontal coordinate of the origin of the cell and code-block partition, with respect to the canvas origin, on the reference grid. Allowable values are 0 and 1, nothing else.
Returns:
The horizontal coordinate of the origin of the cell and code-block partitions, with respect to the canvas origin, on the reference grid.

getPartitionULY

public int getPartitionULY()
Returns the vertical coordinate of the origin of the cell and code-block partition, with respect to the canvas origin, on the reference grid. Allowable values are 0 and 1, nothing else.
Returns:
The vertical coordinate of the origin of the cell and code-block partitions, with respect to the canvas origin, on the reference grid.

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.

getNumCodeBlocks

public Coord getNumCodeBlocks(SubbandSyn sb,
                              int n,
                              Coord co)
Returns the number of code-blocks in a subband, along the horizontal and vertical dimensions.
Specified by:
getNumCodeBlocks in interface CBlkQuantDataSrcDec
Parameters:
sb - The subband for which to return the number of blocks.
n - The component where the subband is.
co - If not null the values are returned in this object. If null a new object is allocated and returned.
Returns:
The number of code-blocks along the horizontal dimension in 'Coord.x' and the number of code-blocks along the vertical dimension in 'Coord.y'.

getCodeBlock

public 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.

The 'ulx' and 'uly' members of the returned 'DataBlk' object contain the coordinates of the top-left corner of the block, with respect to the tile, not the subband.

Specified by:
getCodeBlock in interface CBlkQuantDataSrcDec
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 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.

The 'ulx' and 'uly' members of the returned 'DataBlk' object contain the coordinates of the top-left corner of the block, with respect to the tile, not the subband.

Specified by:
getInternCodeBlock in interface CBlkQuantDataSrcDec
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 requested code-block in the current tile for component 'c'.
See Also:
DataBlk

createInstance

public static ROIDeScaler createInstance(CBlkQuantDataSrcDec src,
                                         ParameterList pl,
                                         DecoderSpecs decSpec)
Creates a ROIDeScaler object. The information needed to create the object is the Entropy decoder used and the parameters.
Parameters:
src - The source of data that is to be descaled
pl - The parameter list (or options).
decSpec - The decoding specifications
Throws:
java.lang.IllegalArgumentException - If an error occurs while parsing the options in 'pl'