| java.lang.Object jj2000.j2k.entropy.decoder.MQDecoder
MQDecoder | public class MQDecoder (Code) | | This class implements the MQ arithmetic decoder. It is implemented using
the software conventions decoder for better performance (i.e. execution
time performance). The initial states for each context of the MQ-coder are
specified in the constructor.
|
Constructor Summary | |
public | MQDecoder(ByteInputBuffer iStream, int nrOfContexts, int initStates) Instantiates a new MQ-decoder, with the specified number of contexts and
initial states. |
Method Summary | |
public boolean | checkPredTerm() Checks for past errors in the decoding process using the predictable
error resilient termination. | final public int | decodeSymbol(int context) Arithmetically decodes one symbol from the bit stream with the given
context and returns its decoded value.
Each context has a current MPS and an index describing what the
current probability is for the LPS. | final public void | decodeSymbols(int[] bits, int[] cX, int n) This function performs the arithmetic decoding. | final public boolean | fastDecodeSymbols(int[] bits, int ctxt, int n) Decodes 'n' symbols from the bit stream using the same context
'ctxt'. | public ByteInputBuffer | getByteInputBuffer() Returns the underlying 'ByteInputBuffer' from where the MQ
coded input bytes are read. | final public int | getNumCtxts() Returns the number of contexts in the arithmetic coder. | final public void | nextSegment(byte buf, int off, int len) Resets the MQ decoder to start a new segment. | final public void | resetCtxt(int c) Resets a context to the original probability distribution. | final public void | resetCtxts() Resets a context to the original probability distribution. |
I | int[] I(Code) | | The current index of each context
|
a | int a(Code) | | The current interval
|
b | int b(Code) | | The last byte read
|
c | int c(Code) | | The current bit code
|
cT | int cT(Code) | | The bit code counter
|
initStates | final int initStates(Code) | | The initial state of each context
|
mPS | int[] mPS(Code) | | The current most probable signal for each context
|
markerFound | boolean markerFound(Code) | | Flag indicating if a marker has been found
|
nLPS | final static int nLPS(Code) | | The indexes of the next LPS
|
nMPS | final static int nMPS(Code) | | The indexes of the next MPS
|
qe | final static int qe(Code) | | The data structures containing the probabilities for the LPS
|
switchLM | final static int switchLM(Code) | | Whether LPS and MPS should be switched
|
MQDecoder | public MQDecoder(ByteInputBuffer iStream, int nrOfContexts, int initStates)(Code) | | Instantiates a new MQ-decoder, with the specified number of contexts and
initial states. The compressed bytestream is read from the 'iStream'
object.
Parameters: iStream - the stream that contains the coded bits Parameters: nrOfContexts - The number of contexts used Parameters: initStates - The initial state for each context. A reference iskept to this array to reinitialize the contexts whenever 'reset()' or'resetCtxts()' is called. |
checkPredTerm | public boolean checkPredTerm()(Code) | | Checks for past errors in the decoding process using the predictable
error resilient termination. This works only if the encoder used the
predictable error resilient MQ termination, otherwise it reports wrong
results. If an error is detected it means that the MQ bit stream has
been wrongly decoded or that the MQ terminated segment length is too
long. If no errors are detected it does not necessarily mean that the
MQ bit stream has been correctly decoded.
True if errors are found, false otherwise. |
decodeSymbol | final public int decodeSymbol(int context)(Code) | | Arithmetically decodes one symbol from the bit stream with the given
context and returns its decoded value.
Each context has a current MPS and an index describing what the
current probability is for the LPS. Each bit is encoded and if the
probability of the LPS exceeds .5, the MPS and LPS are switched.
Parameters: context - The context to use in decoding the symbol The decoded symbol, 0 or 1. |
decodeSymbols | final public void decodeSymbols(int[] bits, int[] cX, int n)(Code) | | This function performs the arithmetic decoding. The function receives
an array in which to put the decoded symbols and an array of contexts
with which to decode them.
Each context has a current MPS and an index describing what the
current probability is for the LPS. Each bit is decoded and if the
probability of the LPS exceeds .5, the MPS and LPS are switched.
Parameters: bits - The array where to place the decoded symbols. It should belong enough to contain 'n' elements. Parameters: cX - The context to use in decoding each symbol. Parameters: n - The number of symbols to decode |
fastDecodeSymbols | final public boolean fastDecodeSymbols(int[] bits, int ctxt, int n)(Code) | | Decodes 'n' symbols from the bit stream using the same context
'ctxt'. If possible the MQ-coder speedup mode will be used to speed up
decoding. The speedup mode is used if Q (the LPS probability for 'ctxt'
is low enough) and the A and C registers permit decoding several MPS
symbols without renormalization.
Speedup mode should be used when decoding long runs of MPS with high
probability with the same context.
This methiod will return the decoded symbols differently if speedup
mode was used or not. If true is returned, then speedup mode was used
and the 'n' decoded symbols are all the same and it is returned ain
bits[0] only. If false is returned then speedup mode was not used, the
decoded symbols are probably not all the same and they are returned in
bits[0], bits[1], ... bits[n-1].
Parameters: bits - The array where to put the decoded symbols. Must be oflength 'n' or more. Parameters: ctxt - The context to use in decoding the symbols. Parameters: n - The number of symbols to decode. True if speedup mode was used, false if not. If speedup modewas used then all the decoded symbols are the same and its value isreturned in 'bits[0]' only (not in bits[1], bits[2], etc.). |
getByteInputBuffer | public ByteInputBuffer getByteInputBuffer()(Code) | | Returns the underlying 'ByteInputBuffer' from where the MQ
coded input bytes are read.
The underlying ByteInputBuffer. |
getNumCtxts | final public int getNumCtxts()(Code) | | Returns the number of contexts in the arithmetic coder.
The number of contexts |
nextSegment | final public void nextSegment(byte buf, int off, int len)(Code) | | Resets the MQ decoder to start a new segment. This is like recreating a
new MQDecoder object with new input data.
Parameters: buf - The byte array containing the MQ encoded data. If null thecurrent byte array is assumed. Parameters: off - The index of the first element in 'buf' to be decoded. Ifnegative the byte just after the previous segment is assumed, onlyvalid if 'buf' is null. Parameters: len - The number of bytes in 'buf' to be decoded. Any subsequentbytes are taken to be 0xFF. |
resetCtxt | final public void resetCtxt(int c)(Code) | | Resets a context to the original probability distribution.
Parameters: c - The number of the context (it starts at 0). |
resetCtxts | final public void resetCtxts()(Code) | | Resets a context to the original probability distribution. The
original probability distribution depends on the actual
implementation of the arithmetic coder or decoder.
Parameters: c - The index of the context (it starts at 0). |
|
|