jj2000.j2k.image.forwcomptransf
Class ForwCompTransf

java.lang.Object
  |
  +--jj2000.j2k.image.ImgDataAdapter
        |
        +--jj2000.j2k.image.forwcomptransf.ForwCompTransf
All Implemented Interfaces:
BlkImgDataSrc, ImgData

public class ForwCompTransf
extends ImgDataAdapter
implements BlkImgDataSrc

This class apply component transformations to the tiles depending on user specifications. These transformations can be used to improve compression efficiency but are not related to colour transforms used to map colour values for display purposes. JPEG 2000 part I defines 2 component transformations: RCT (Reversible Component Transformation) and ICT (Irreversible Component Transformation).

See Also:
ModuleSpec

Field Summary
private  DataBlkInt block0
          Block used to request component with index 0
private  DataBlkInt block1
          Block used to request component with index 1
private  DataBlkInt block2
          Block used to request component with index 2
private  CompTransfSpec cts
          The component transformations specifications
static int FORW_ICT
          Identifier for the Forward Irreversible Component Transformation (FORW_ICT).
static int FORW_RCT
          Identifier for the Forward Reversible Component Transformation (FORW_RCT).
static int NONE
          Identifier for no component transformation.
static char OPT_PREFIX
          The prefix for component transformation type: 'M'
private  DataBlk outBlk
          Output block used instead of the one provided as an argument if the later is DataBlkFloat.
private static java.lang.String[][] pinfo
          The list of parameters that is accepted by the forward component transformation module.
private  BlkImgDataSrc src
          The source of image data
private  int[] tdepth
          The bit-depths of transformed components
private  int transfType
          The type of the current component transformation.
private  AnWTFilterSpec wfs
          The wavelet filter specifications
 
Fields inherited from class jj2000.j2k.image.ImgDataAdapter
imgdatasrc, tIdx
 
Constructor Summary
ForwCompTransf(BlkImgDataSrc imgSrc, EncoderSpecs encSpec)
          Constructs a new ForwCompTransf object that operates on the specified source of image data.
 
Method Summary
static int[] calcMixedBitDepths(int[] ntdepth, int ttype, int[] tdepth)
          Calculates the bitdepths of the transformed components, given the bitdepth of the un-transformed components and the component transformation type.
private  DataBlk forwICT(DataBlk blk, int c)
          Apply forward irreversible component transformation to obtain requested component from specified block of data.
private  DataBlk forwRCT(DataBlk blk, int c)
          Apply forward component transformation to obtain requested component from specified block of data.
 DataBlk getCompData(DataBlk blk, int c)
          Apply forward component transformation associated with the current tile.
 int getFixedPoint(int c)
          Returns the position of the fixed point in the specified component.
 DataBlk getInternCompData(DataBlk blk, int c)
          Apply the component transformation associated with the current tile.
 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 and in the current tile.
static java.lang.String[][] getParameterInfo()
          Returns the parameters that are used in this class and implementing classes.
private  void initForwICT()
          Initialize some variables used with ICT.
private  void initForwRCT()
          Initialize some variables used with RCT.
 boolean isReversible()
          Returns true if this transform is reversible in current tile.
 void nextTile()
          Goes to the next tile, in standard scan-line order (by rows then by columns).
 void setTile(int x, int y)
          Changes the current tile, given the new indexes.
 java.lang.String toString()
          Returns a string with a descriptive text of which forward component transformation is used.
 
Methods inherited from class jj2000.j2k.image.ImgDataAdapter
getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompULX, getCompULY, getImgHeight, getImgULX, getImgULY, getImgWidth, getNomTileHeight, getNomTileWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileCompHeight, getTileCompWidth, getTileHeight, getTileIdx, getTilePartULX, getTilePartULY, getTileWidth
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface jj2000.j2k.image.ImgData
getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompULX, getCompULY, getImgHeight, getImgULX, getImgULY, getImgWidth, getNomTileHeight, getNomTileWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileCompHeight, getTileCompWidth, getTileHeight, getTileIdx, getTilePartULX, getTilePartULY, getTileWidth
 

Field Detail

NONE

public static final int NONE
Identifier for no component transformation. Value is 0.

See Also:
Constant Field Values

FORW_RCT

public static final int FORW_RCT
Identifier for the Forward Reversible Component Transformation (FORW_RCT). Value is 1.

See Also:
Constant Field Values

FORW_ICT

public static final int FORW_ICT
Identifier for the Forward Irreversible Component Transformation (FORW_ICT). Value is 2

See Also:
Constant Field Values

src

private BlkImgDataSrc src
The source of image data


cts

private CompTransfSpec cts
The component transformations specifications


wfs

private AnWTFilterSpec wfs
The wavelet filter specifications


transfType

private int transfType
The type of the current component transformation. JPEG 2000 part 1 supports only NONE, FORW_RCT and FORW_ICT types


tdepth

private int[] tdepth
The bit-depths of transformed components


outBlk

private DataBlk outBlk
Output block used instead of the one provided as an argument if the later is DataBlkFloat.


block0

private DataBlkInt block0
Block used to request component with index 0


block1

private DataBlkInt block1
Block used to request component with index 1


block2

private DataBlkInt block2
Block used to request component with index 2


OPT_PREFIX

public static final char OPT_PREFIX
The prefix for component transformation type: 'M'

See Also:
Constant Field Values

pinfo

private static final java.lang.String[][] pinfo
The list of parameters that is accepted by the forward component transformation module. Options start with an 'M'.

Constructor Detail

ForwCompTransf

public ForwCompTransf(BlkImgDataSrc imgSrc,
                      EncoderSpecs encSpec)
Constructs a new ForwCompTransf object that operates on the specified source of image data.

Parameters:
imgSrc - The source from where to get the data to be transformed
encSpec - The encoder specifications
See Also:
BlkImgDataSrc
Method Detail

getFixedPoint

public int getFixedPoint(int c)
Returns the position of the fixed point in 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.

This default implementation assumes that the number of fractional bits is not modified by the component mixer.

Specified by:
getFixedPoint in interface BlkImgDataSrc
Parameters:
c - The index of the component.
Returns:
The value of the fixed point position of the source since the color transform does not affect it.

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 4 elements. The first element is the option name, the second one is the synopsis, the third one is a long description of what the parameter is and the fourth is its default value. 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.

calcMixedBitDepths

public static int[] calcMixedBitDepths(int[] ntdepth,
                                       int ttype,
                                       int[] tdepth)
Calculates the bitdepths of the transformed components, given the bitdepth of the un-transformed components and the component transformation type.

Parameters:
ntdepth - The bitdepth of each non-transformed components.
ttype - The type ID of the component transformation.
tdepth - If not null the results are stored in this array, otherwise a new array is allocated and returned.
Returns:
The bitdepth of each transformed component.

initForwRCT

private void initForwRCT()
Initialize some variables used with RCT. It must be called, at least, at the beginning of each new tile.


initForwICT

private void initForwICT()
Initialize some variables used with ICT. It must be called, at least, at the beginning of a new tile.


toString

public java.lang.String toString()
Returns a string with a descriptive text of which forward component transformation is used. This can be either "Forward RCT" or "Forward ICT" or "No component transformation" depending on the current tile.

Overrides:
toString in class java.lang.Object
Returns:
A descriptive string

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 and in the current tile. 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. Note that this value can be affected by the multiple component transform.

Specified by:
getNomRangeBits in interface ImgData
Overrides:
getNomRangeBits in class ImgDataAdapter
Parameters:
c - The index of the component.
Returns:
The bitdepth of component 'c' after mixing.

isReversible

public boolean isReversible()
Returns true if this transform is reversible in current tile. Reversible component transformations are those which operation can be completely reversed without any loss of information (not even due to rounding).

Returns:
Reversibility of component transformation in current tile

getCompData

public DataBlk getCompData(DataBlk blk,
                           int c)
Apply forward component transformation associated with the current tile. If no component transformation has been requested by the user, data are not modified.

This method calls the getInternCompData() method, but respects the definitions of the getCompData() method defined in the BlkImgDataSrc interface.

Specified by:
getCompData in interface BlkImgDataSrc
Parameters:
blk - Determines the rectangular area to return, and the data is returned in this object.
c - Index of the output component.
Returns:
The requested DataBlk
See Also:
BlkImgDataSrc.getCompData(jj2000.j2k.image.DataBlk, int)

getInternCompData

public DataBlk getInternCompData(DataBlk blk,
                                 int c)
Apply the component transformation associated with the current tile. If no component transformation has been requested by the user, data are not modified. Else, appropriate method is called (forwRCT or forwICT).

Specified by:
getInternCompData in interface BlkImgDataSrc
Parameters:
blk - Determines the rectangular area to return.
c - Index of the output component.
Returns:
The requested DataBlk
See Also:
forwRCT(jj2000.j2k.image.DataBlk, int), forwICT(jj2000.j2k.image.DataBlk, int)

forwRCT

private DataBlk forwRCT(DataBlk blk,
                        int c)
Apply forward component transformation to obtain requested component from specified block of data. Whatever the type of requested DataBlk, it always returns a DataBlkInt.

Parameters:
blk - Determine the rectangular area to return
c - The index of the requested component
Returns:
Data of requested component

forwICT

private DataBlk forwICT(DataBlk blk,
                        int c)
Apply forward irreversible component transformation to obtain requested component from specified block of data. Whatever the type of requested DataBlk, it always returns a DataBlkFloat.

Parameters:
blk - Determine the rectangular area to return
c - The index of the requested component
Returns:
Data of requested component

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 ImgData
Overrides:
setTile in class ImgDataAdapter
Parameters:
x - The horizontal index of the tile.
y - The vertical index of the new tile.

nextTile

public void nextTile()
Goes to the next tile, in standard scan-line order (by rows then by 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 ImgData
Overrides:
nextTile in class ImgDataAdapter