[]
        
(Showing Draft Content)

CSJ2K.j2k.entropy.encoder.StdEntropyCoder

StdEntropyCoder Class

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>
Inheritance
StdEntropyCoder
Namespace: CSJ2K.j2k.entropy.encoder
Assembly: C1.WPF.PdfViewer.4.6.2.dll
Syntax
public class StdEntropyCoder : EntropyCoder, CodedCBlkDataSrcEnc, ForwWTDataProps, ImgData

Constructors

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.

       <p>If the 'OPT_PRED_TERM' option is given then the MQ termination must
       be 'TERM_PRED_ER' or an exception is thrown.</p>

Fields

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

Methods

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

       <p>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.</p><p>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.</p>
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).

       <p>This default implementation just advances to the next tile in the
       source.</p>
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.

       <p>This default implementation just changes the tile in the source.</p>

See Also