jj2000.j2k.image
Class ImgDataConverter

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

public class ImgDataConverter
extends ImgDataAdapter
implements BlkImgDataSrc

This class is responsible of all data type conversions. It should be used, at encoder side, between Tiler and ForwardWT modules and, at decoder side, between InverseWT/CompDemixer and ImgWriter modules. The conversion is realized when a block of data is requested: if source and destination data type are the same one, it does nothing, else appropriate cast is done. All the methods of the 'ImgData' interface are implemented by the 'ImgDataAdapter' class that is the superclass of this one, so they don't need to be reimplemented by subclasses.


Field Summary
private  int fp
          The number of fraction bits in the casted ints
private  BlkImgDataSrc src
          The source of image data
private  DataBlk srcBlk
          The block used to request data from the source in the case that a conversion seems necessary.
 
Fields inherited from class jj2000.j2k.image.ImgDataAdapter
imgdatasrc, tIdx
 
Constructor Summary
ImgDataConverter(BlkImgDataSrc imgSrc)
          Constructs a new ImgDataConverter object that operates on the specified source of image data.
ImgDataConverter(BlkImgDataSrc imgSrc, int fp)
          Constructs a new ImgDataConverter object that operates on the specified source of image data.
 
Method Summary
 DataBlk getCompData(DataBlk blk, int c)
          Returns, in the blk argument, a block of image data containing the specifed rectangular area, in the specified component, using the 'transfer type' specified in the block given as argument.
private  DataBlk getData(DataBlk blk, int c, boolean intern)
          Implements the 'getInternCompData()' and the 'getCompData()' methods.
 int getFixedPoint(int c)
          Returns the position of the fixed point in the specified component.
 DataBlk getInternCompData(DataBlk blk, int c)
          Returns, in the blk argument, a block of image data containing the specifed rectangular area, in the specified component, using the 'transfer type' defined in the block given as argument.
 
Methods inherited from class jj2000.j2k.image.ImgDataAdapter
getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompULX, getCompULY, getImgHeight, getImgULX, getImgULY, getImgWidth, getNomRangeBits, getNomTileHeight, getNomTileWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileCompHeight, getTileCompWidth, getTileHeight, getTileIdx, getTilePartULX, getTilePartULY, getTileWidth, nextTile, setTile
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface jj2000.j2k.image.ImgData
getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompULX, getCompULY, getImgHeight, getImgULX, getImgULY, getImgWidth, getNomRangeBits, getNomTileHeight, getNomTileWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileCompHeight, getTileCompWidth, getTileHeight, getTileIdx, getTilePartULX, getTilePartULY, getTileWidth, nextTile, setTile
 

Field Detail

srcBlk

private DataBlk srcBlk
The block used to request data from the source in the case that a conversion seems necessary. It can be either int or float at initialization time. It will be checked (and corrected if necessary) by the source whenever necessary


src

private BlkImgDataSrc src
The source of image data


fp

private int fp
The number of fraction bits in the casted ints

Constructor Detail

ImgDataConverter

public ImgDataConverter(BlkImgDataSrc imgSrc,
                        int fp)
Constructs a new ImgDataConverter object that operates on the specified source of image data.

Parameters:
imgSrc - The source from where to get the data to be transformed
fp - The number of fraction bits in the casted ints
See Also:
BlkImgDataSrc

ImgDataConverter

public ImgDataConverter(BlkImgDataSrc imgSrc)
Constructs a new ImgDataConverter object that operates on the specified source of image data.

Parameters:
imgSrc - The source from where to get the data to be transformed
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.

Specified by:
getFixedPoint in interface BlkImgDataSrc
Parameters:
c - The index of the component.
Returns:
The position of the fixed-point, which is the same as the number of fractional bits.

getCompData

public DataBlk getCompData(DataBlk blk,
                           int c)
Returns, in the blk argument, a block of image data containing the specifed rectangular area, in the specified component, using the 'transfer type' specified in the block given as argument. The data is returned, as a copy of the internal data, therefore the returned data can be modified "in place".

The rectangular area to return is specified by the 'ulx', 'uly', 'w' and 'h' members of the 'blk' argument, relative to the current tile. These members are not modified by this method. The 'offset' of the returned data is 0, and the 'scanw' is the same as the block's width. See the 'DataBlk' class.

This method, in general, is less efficient than the 'getInternCompData()' method since, in general, it copies the data. However if the array of returned data is to be modified by the caller then this method is preferable.

If the data array in 'blk' is 'null', then a new one is created. If the data array is not 'null' then it is reused, and it must be large enough to contain the block's data. Otherwise an 'ArrayStoreException' or an 'IndexOutOfBoundsException' is thrown by the Java system.

The returned data may have its 'progressive' attribute set. In this case the returned data is only an approximation of the "final" data.

Specified by:
getCompData in interface BlkImgDataSrc
Parameters:
blk - Its coordinates and dimensions specify the area to return, relative to the current tile. If it contains a non-null data array, then it must be large enough. If it contains a null data array a new one is created. Some fields in this object are modified to return the data.
c - The index of the component from which to get the data.
See Also:
getInternCompData(jj2000.j2k.image.DataBlk, int)

getInternCompData

public final DataBlk getInternCompData(DataBlk blk,
                                       int c)
Returns, in the blk argument, a block of image data containing the specifed rectangular area, in the specified component, using the 'transfer type' defined in the block given as argument. The data is returned, as a reference to the internal data, if any, instead of as a copy, therefore the returned data should not be modified.

The rectangular area to return is specified by the 'ulx', 'uly', 'w' and 'h' members of the 'blk' argument, relative to the current tile. These members are not modified by this method. The 'offset' and 'scanw' of the returned data can be arbitrary. See the 'DataBlk' class.

If source data and expected data (blk) are using the same type, block returned without any modification. If not appropriate cast is used.

This method, in general, is more efficient than the 'getCompData()' method since it may not copy the data. However if the array of returned data is to be modified by the caller then the other method is probably preferable.

If the data array in blk is null, then a new one is created if necessary. The implementation of this interface may choose to return the same array or a new one, depending on what is more efficient. Therefore, the data array in blk prior to the method call should not be considered to contain the returned data, a new array may have been created. Instead, get the array from blk after the method has returned.

The returned data may have its 'progressive' attribute set. In this case the returned data is only an approximation of the "final" data.

Specified by:
getInternCompData in interface BlkImgDataSrc
Parameters:
blk - Its coordinates and dimensions specify the area to return, relative to the current tile. Some fields in this object are modified to return the data.
c - The index of the component from which to get the data.
Returns:
The requested DataBlk
See Also:
getCompData(jj2000.j2k.image.DataBlk, int)

getData

private DataBlk getData(DataBlk blk,
                        int c,
                        boolean intern)
Implements the 'getInternCompData()' and the 'getCompData()' methods. The 'intern' flag signals which of the two methods should run as.

Parameters:
blk - The data block to get.
c - The index of the component from which to get the data.
intern - If true behave as 'getInternCompData(). Otherwise behave as 'getCompData()'
Returns:
The requested data block
See Also:
getInternCompData(jj2000.j2k.image.DataBlk, int), getCompData(jj2000.j2k.image.DataBlk, int)