ucar.jpeg.jj2000.j2k.entropy.decoder
Class StdEntropyDecoder

java.lang.Object
  extended by ucar.jpeg.jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
      extended by ucar.jpeg.jj2000.j2k.entropy.decoder.EntropyDecoder
          extended by ucar.jpeg.jj2000.j2k.entropy.decoder.StdEntropyDecoder
All Implemented Interfaces:
StdEntropyCoderOptions, CBlkQuantDataSrcDec, InvWTData, MultiResImgData

public class StdEntropyDecoder
extends EntropyDecoder
implements StdEntropyCoderOptions

This class implements the JPEG 2000 entropy decoder, which codes stripes in code-blocks. This entropy decoding engine decodes one code-block at a time.

The code-blocks are rectangular and their dimensions must be powers of 2. Each dimension cannot be smaller than 4 and larger than 256. The product of the two dimensions (i.e. area of the code-block) cannot exceed 4096.

Context 0 of the MQ-coder is used as the uniform one (uniform, non-adaptive probability distribution). Context 1 is used for RLC coding. Contexts 2-10 are used for zero-coding (ZC), contexts 11-15 are used for sign-coding (SC) and contexts 16-18 are used for magnitude-refinement (MR).

This implementation also provides some timing features. They can be enabled by setting the 'DO_TIMING' constant of this class to true and recompiling. The timing uses the 'System.currentTimeMillis()' Java API call, which returns wall clock time, not the actual CPU time used. The timing results will be printed on the message output. Since the times reported are wall clock times and not CPU usage times they can not be added to find the total used time (i.e. some time might be counted in several places). When timing is disabled ('DO_TIMING' is false) there is no penalty if the compiler performs some basic optimizations. Even if not the penalty should be negligeable.


Field Summary
 
Fields inherited from class ucar.jpeg.jj2000.j2k.entropy.decoder.EntropyDecoder
OPT_PREFIX, src
 
Fields inherited from class ucar.jpeg.jj2000.j2k.wavelet.synthesis.MultiResImgDataAdapter
mressrc, tIdx
 
Fields inherited from interface ucar.jpeg.jj2000.j2k.entropy.StdEntropyCoderOptions
FIRST_BYPASS_PASS_IDX, MAX_CB_AREA, MAX_CB_DIM, MIN_CB_DIM, NUM_EMPTY_PASSES_IN_MS_BP, NUM_NON_BYPASS_MS_BP, NUM_PASSES, OPT_BYPASS, OPT_PRED_TERM, OPT_RESET_MQ, OPT_SEG_SYMBOLS, OPT_TERM_PASS, OPT_VERT_STR_CAUSAL, STRIPE_HEIGHT
 
Constructor Summary
StdEntropyDecoder(CodedCBlkDataSrcDec src, DecoderSpecs decSpec, boolean doer, boolean verber, int mQuit)
          Instantiates a new entropy decoder engine, with the specified source of data, nominal block width and height.
 
Method Summary
 void finalize()
          Prints the timing information, if collected, and calls 'finalize' on the super class.
 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).
 
Methods inherited from class ucar.jpeg.jj2000.j2k.entropy.decoder.EntropyDecoder
getCbULX, getCbULY, getParameterInfo, getSynSubbandTree
 
Methods inherited from class ucar.jpeg.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, nextTile, setTile
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface ucar.jpeg.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, nextTile, setTile
 

Constructor Detail

StdEntropyDecoder

public StdEntropyDecoder(CodedCBlkDataSrcDec src,
                         DecoderSpecs decSpec,
                         boolean doer,
                         boolean verber,
                         int mQuit)
Instantiates a new entropy decoder engine, with the specified source of data, nominal block width and height.

Parameters:
src - The source of data
opt - The options to use for this encoder. It is a mix of the 'OPT_TERM_PASS', 'OPT_RESET_MQ', 'OPT_VERT_STR_CAUSAL', 'OPT_BYPASS' and 'OPT_SEG_SYMBOLS' option flags.
doer - If true error detection will be performed, if any error detection features have been enabled.
verber - This flag indicates if the entropy decoder should be verbose about bit stream errors that are detected and concealed.
mQuit - the maximum number of bit planes to decode according to the m quit condition
Method Detail

finalize

public void finalize()
              throws Throwable
Prints the timing information, if collected, and calls 'finalize' on the super class.

Overrides:
finalize in class Object
Throws:
Throwable

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


Copyright © 1999-2011 UCAR/Unidata. All Rights Reserved.