public class MQDecoder extends Object
Modifier and Type | Field and Description |
---|---|
(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 and Description |
---|
MQDecoder(ByteInputBuffer iStream,
int nrOfContexts,
int[] initStates)
Instantiates a new MQ-decoder, with the specified number of contexts and
initial states.
|
Modifier and Type | Method and Description |
---|---|
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.
|
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
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.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 symbolpublic 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.
Copyright © 2015 Open Microscopy Environment