|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--jj2000.j2k.entropy.decoder.MQDecoder
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.
Field Summary | |
(package private) int |
a
The current interval |
(package private) int |
b
The last byte read |
(package private) int |
c
The current bit code |
(package private) int |
cT
The bit code counter |
(package private) int[] |
I
The current index of each context |
(package private) ByteInputBuffer |
in
The ByteInputBuffer used to read the compressed bit stream. |
(package private) int[] |
initStates
The initial state of each context |
(package private) boolean |
markerFound
Flag indicating if a marker has been found |
(package private) int[] |
mPS
The current most probable signal for each context |
(package private) static int[] |
nLPS
The indexes of the next LPS |
(package private) static int[] |
nMPS
The indexes of the next MPS |
(package private) static int[] |
qe
The data structures containing the probabilities for the LPS |
(package private) static int[] |
switchLM
Whether LPS and MPS should be switched |
Constructor Summary | |
MQDecoder(ByteInputBuffer iStream,
int nrOfContexts,
int[] initStates)
Instantiates a new MQ-decoder, with the specified number of contexts and initial states. |
Method Summary | |
private void |
byteIn()
This function gets one byte of compressed bits from the in-stream. |
boolean |
checkPredTerm()
Checks for past errors in the decoding process using the predictable error resilient termination. |
int |
decodeSymbol(int context)
Arithmetically decodes one symbol from the bit stream with the given context and returns its decoded value. |
void |
decodeSymbols(int[] bits,
int[] cX,
int n)
This function performs the arithmetic decoding. |
boolean |
fastDecodeSymbols(int[] bits,
int ctxt,
int n)
Decodes 'n' symbols from the bit stream using the same context 'ctxt'. |
ByteInputBuffer |
getByteInputBuffer()
Returns the underlying 'ByteInputBuffer' from where the MQ coded input bytes are read. |
int |
getNumCtxts()
Returns the number of contexts in the arithmetic coder. |
private void |
init()
Initializes the state of the MQ coder, without modifying the current context states. |
void |
nextSegment(byte[] buf,
int off,
int len)
Resets the MQ decoder to start a new segment. |
void |
resetCtxt(int c)
Resets a context to the original probability distribution. |
void |
resetCtxts()
Resets a context to the original probability distribution. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
static final int[] qe
static final int[] nMPS
static final int[] nLPS
static final int[] switchLM
ByteInputBuffer in
int[] mPS
int[] I
int c
int cT
int a
int b
boolean markerFound
final int[] initStates
Constructor Detail |
public MQDecoder(ByteInputBuffer iStream, int nrOfContexts, int[] initStates)
iStream
- the stream that contains the coded bitsnrOfContexts
- The number of contexts usedinitStates
- The initial state for each context. A reference is
kept to this array to reinitialize the contexts whenever 'reset()' or
'resetCtxts()' is called.Method Detail |
public final boolean fastDecodeSymbols(int[] bits, int ctxt, int n)
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].
bits
- The array where to put the decoded symbols. Must be of
length 'n' or more.ctxt
- The context to use in decoding the symbols.n
- The number of symbols to decode.
public final void decodeSymbols(int[] bits, int[] cX, int n)
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.
bits
- The array where to place the decoded symbols. It should be
long enough to contain 'n' elements.cX
- The context to use in decoding each symbol.n
- The number of symbols to decodepublic final int decodeSymbol(int context)
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.
context
- The context to use in decoding the symbol
public boolean checkPredTerm()
private void byteIn()
public final int getNumCtxts()
public final void resetCtxt(int c)
c
- The number of the context (it starts at 0).public final void resetCtxts()
public final void nextSegment(byte[] buf, int off, int len)
buf
- The byte array containing the MQ encoded data. If null the
current byte array is assumed.off
- The index of the first element in 'buf' to be decoded. If
negative the byte just after the previous segment is assumed, only
valid if 'buf' is null.len
- The number of bytes in 'buf' to be decoded. Any subsequent
bytes are taken to be 0xFF.public ByteInputBuffer getByteInputBuffer()
private void init()
To have a complete reset of the MQ (as if a new MQDecoder object was created) 'resetCtxts()' should be called after this method.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |