| java.lang.Object jj2000.j2k.image.ImgDataAdapter jj2000.j2k.entropy.encoder.EntropyCoder jj2000.j2k.entropy.encoder.StdEntropyCoder
StdEntropyCoder | public class StdEntropyCoder extends EntropyCoder implements StdEntropyCoderOptions(Code) | | This class implements the JPEG 2000 entropy coder, which codes stripes in
code-blocks. This entropy coding engine can function in a single-threaded
mode where one code-block is encoded at a time, or in a multi-threaded mode
where multiple code-blocks are entropy coded in parallel. The interface
presented by this class is the same in both modes.
The number of threads used by this entropy coder is specified by the
"jj2000.j2k.entropy.encoder.StdEntropyCoder.nthreads" Java system
property. If set to "0" the single threaded implementation is used. If set
to 'n' ('n' larger than 0) then 'n' extra threads are started by this class
which are used to encode the code-blocks in parallel (i.e. ideally 'n'
code-blocks will be encoded in parallel at a time). On multiprocessor
machines under a "native threads" Java Virtual Machine implementation each
one of these threads can run on a separate processor speeding up the
encoding time. By default the single-threaded implementation is used. The
multi-threaded implementation currently assumes that the vast majority of
consecutive calls to 'getNextCodeBlock()' will be done on the same
component. If this is not the case, the speed-up that can be expected on
multiprocessor machines might be significantly decreased.
The code-blocks are rectangular, with dimensions which must be powers of
2. Each dimension has to be no smaller than 4 and no larger than 256. The
product of the two dimensions (i.e. area of the code-block) may not 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 buffers the symbols and calls the MQ coder only once
per stripe and per coding pass, to reduce the method call overhead.
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.
The source module must implement the CBlkQuantDataSrcEnc interface and
code-block's data is received in a CBlkWTData instance. This modules sends
code-block's information in a CBlkRateDistStats instance.
See Also: CBlkQuantDataSrcEnc See Also: CBlkWTData See Also: CBlkRateDistStats |
Constructor Summary | |
public | StdEntropyCoder(CBlkQuantDataSrcEnc src, CBlkSizeSpec cblks, PrecinctSizeSpec pss, StringSpec bms, StringSpec mqrs, StringSpec rts, StringSpec css, StringSpec sss, StringSpec lcs, StringSpec tts) Instantiates a new entropy coder engine, with the specified source of
data, nominal block width and height. |
Method Summary | |
public void | finalize() Prints the timing information, if collected, and calls 'finalize' on
the super class. | public int | getCBlkHeight(int t, int c) Returns the code-block height for the specified tile and component. | public int | getCBlkWidth(int t, int c) Returns the code-block width for the specified tile and component. | public CBlkRateDistStats | getNextCodeBlock(int c, CBlkRateDistStats ccb) Returns the next coded code-block in the current tile for the specified
component, as a copy (see below). | public int | getPPX(int t, int c, int rl) Returns the precinct partition width for the specified
component, tile and resolution level. | public int | getPPY(int t, int c, int rl) Returns the precinct partition height for the specified
component, tile and resolution level. | public void | initTileComp(int nt, int nc) Load options, length calculation type and termination type for
each tile-component. | public void | nextTile() Advances to the next tile, in standard scan-line order (by rows
then columns). | public boolean | precinctPartitionUsed(int c, int t) Returns true if precinct partition is used for the specified
component and tile, returns false otherwise. | public void | setTile(int x, int y) Changes the current tile, given the new indexes. |
DEF_THREADS_NUM | final public static String DEF_THREADS_NUM(Code) | | The default value for the property in THREADS_PROP_NAME: 0
|
THREADS_PRIORITY_INC | final public static int THREADS_PRIORITY_INC(Code) | | The increase in priority for the compressor threads, currently 3. The
compressor threads will have a priority of THREADS_PRIORITY_INC more
than the priority of the thread calling this class constructor. Used
only in the multi-threaded implementation.
|
THREADS_PROP_NAME | final public static String THREADS_PROP_NAME(Code) | | The Java system property name for the number of threads to use:
jj2000.j2k.entropy.encoder.StdEntropyCoder.nthreads
|
sss | public StringSpec sss(Code) | | Error resilience segment symbol use specifications
|
StdEntropyCoder | public StdEntropyCoder(CBlkQuantDataSrcEnc src, CBlkSizeSpec cblks, PrecinctSizeSpec pss, StringSpec bms, StringSpec mqrs, StringSpec rts, StringSpec css, StringSpec sss, StringSpec lcs, StringSpec tts)(Code) | | Instantiates a new entropy coder engine, with the specified source of
data, nominal block width and height.
If the 'OPT_PRED_TERM' option is given then the MQ termination must
be 'TERM_PRED_ER' or an exception is thrown.
Parameters: src - The source of data Parameters: cbks - Code-block size specifications Parameters: pss - Precinct partition specifications Parameters: bms - By-pass mode specifications Parameters: mqrs - MQ-reset specifications Parameters: rts - Regular termination specifications Parameters: css - Causal stripes specifications Parameters: sss - Error resolution segment symbol use specifications Parameters: lcs - Length computation specifications Parameters: tts - Termination type specifications See Also: MQCoder |
finalize | public void finalize() throws Throwable(Code) | | Prints the timing information, if collected, and calls 'finalize' on
the super class.
|
getCBlkHeight | public int getCBlkHeight(int t, int c)(Code) | | Returns the code-block height for the specified tile and component.
Parameters: t - The tile index Parameters: c - The component index The code-block height for the specified tile and component. |
getCBlkWidth | public int getCBlkWidth(int t, int c)(Code) | | Returns the code-block width for the specified tile and component.
Parameters: t - The tile index Parameters: c - the component index The code-block width for the specified tile and component |
getNextCodeBlock | public CBlkRateDistStats getNextCodeBlock(int c, CBlkRateDistStats ccb)(Code) | | Returns the next coded code-block in the current tile for the specified
component, as a copy (see below). The order in which code-blocks are
returned is not specified. However each code-block is returned only
once and all code-blocks will be returned if the method is called 'N'
times, where 'N' is the number of code-blocks in the tile. After all
the code-blocks have been returned for the current tile calls to this
method will return 'null'.
When changing the current tile (through 'setTile()' or 'nextTile()')
this method will always return the first code-block, as if this method
was never called before for the new current tile.
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.
Parameters: c - The component for which to return the next code-block. Parameters: ccb - If non-null this object might be used in returning the codedcode-block in this or any subsequent call to this method. If null a newone is created and returned. If the 'data' array of 'cbb' is not nullit may be reused to return the compressed data. The next coded code-block in the current tile for component'n', or null if all code-blocks for the current tile have beenreturned. See Also: CBlkRateDistStats |
getPPX | public int getPPX(int t, int c, int rl)(Code) | | Returns the precinct partition width for the specified
component, tile and resolution level.
Parameters: t - the tile index Parameters: c - the component Parameters: rl - the resolution level The precinct partition width for the specifiedcomponent, tile and resolution level |
getPPY | public int getPPY(int t, int c, int rl)(Code) | | Returns the precinct partition height for the specified
component, tile and resolution level.
Parameters: t - the tile index Parameters: c - the component Parameters: rl - the resolution level The precinct partition height for the specifiedcomponent, tile and resolution level |
initTileComp | public void initTileComp(int nt, int nc)(Code) | | Load options, length calculation type and termination type for
each tile-component.
Parameters: nt - The number of tiles Parameters: nc - The number of components |
nextTile | public void nextTile()(Code) | | 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.
|
precinctPartitionUsed | public boolean precinctPartitionUsed(int c, int t)(Code) | | Returns true if precinct partition is used for the specified
component and tile, returns false otherwise.
Parameters: c - The component Parameters: t - The tile True if precinct partition is used for the specifiedcomponent and tile, returns false otherwise. |
setTile | public void setTile(int x, int y)(Code) | | 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 just changes the tile in the
source.
Parameters: x - The horizontal index of the tile. Parameters: y - The vertical index of the new tile. |
Methods inherited from jj2000.j2k.entropy.encoder.EntropyCoder | public static EntropyCoder createInstance(CBlkQuantDataSrcEnc src, J2KImageWriteParamJava wp, CBlkSizeSpec cblks, PrecinctSizeSpec pss, StringSpec bms, StringSpec mqrs, StringSpec rts, StringSpec css, StringSpec sss, StringSpec lcs, StringSpec tts)(Code)(Java Doc) public SubbandAn getAnSubbandTree(int t, int c)(Code)(Java Doc) abstract public int getCBlkHeight(int t, int c)(Code)(Java Doc) abstract public int getCBlkWidth(int t, int c)(Code)(Java Doc) public int getCbULX()(Code)(Java Doc) public int getCbULY()(Code)(Java Doc) public static String[][] getParameterInfo()(Code)(Java Doc) public boolean isReversible(int t, int c)(Code)(Java Doc)
|
|
|