[]
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.
<p>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.</p><p>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.</p><p>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).</p><p>This implementation buffers the symbols and calls the MQ coder only once
per stripe and per coding pass, to reduce the method call overhead.</p><p>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.</p><p>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.</p>
public class StdEntropyCoder : EntropyCoder, CodedCBlkDataSrcEnc, ForwWTDataProps, ImgData
Name | Description |
---|---|
StdEntropyCoder(CBlkQuantDataSrcEnc, CBlkSizeSpec, PrecinctSizeSpec, StringSpec, StringSpec, StringSpec, StringSpec, StringSpec, StringSpec, StringSpec) | Instantiates a new entropy coder engine, with the specified source of data, nominal block width and height.
|
Name | Description |
---|---|
DEF_THREADS_NUM | The default value for the property in THREADS_PROP_NAME: 0 |
THREADS_PRIORITY_INC | 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 | The Java system property name for the number of threads to use: jj2000.j2k.entropy.encoder.StdEntropyCoder.nthreads |
bms | By-pass mode specifications |
css | Causal stripes specifications |
lcs | The length calculation specifications |
mqrs | MQ reset specifications |
rts | Regular termination specifications |
sss | Error resilience segment symbol use specifications |
tts | The termination type specifications |
Name | Description |
---|---|
getCBlkHeight(int, int) | Returns the code-block height for the specified tile and component. |
getCBlkWidth(int, int) | Returns the code-block width for the specified tile and component. |
getNextCodeBlock(int, CBlkRateDistStats) | 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'.
|
getPPX(int, int, int) | Returns the precinct partition width for the specified component, tile and resolution level. |
getPPY(int, int, int) | Returns the precinct partition height for the specified component, tile and resolution level. |
initTileComp(int, int) | Load options, length calculation type and termination type for each tile-component. |
nextTile() | 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).
|
precinctPartitionUsed(int, int) | Returns true if precinct partition is used for the specified component and tile, returns false otherwise. |
setTile(int, int) | Changes the current tile, given the new indexes. An IllegalArgumentException is thrown if the indexes do not correspond to a valid tile.
|