Package jj2000.j2k.codestream.reader
Class PktDecoder
- java.lang.Object
-
- jj2000.j2k.codestream.reader.PktDecoder
-
- All Implemented Interfaces:
StdEntropyCoderOptions
public class PktDecoder extends Object implements StdEntropyCoderOptions
This class is used to read packet's head and body. All the members must be re-initialized at the beginning of each tile thanks to the restart() method.
-
-
Field Summary
-
Fields inherited from interface jj2000.j2k.entropy.StdEntropyCoderOptions
FIRST_BYPASS_PASS_IDX, MAX_CB_AREA, MAX_CB_DIM, MIN_CB_DIM, NUM_EMPTY_PASSES_IN_MS_BP, NUM_NON_BYPASS_MS_BP, NUM_PASSES, OPT_BYPASS, OPT_PRED_TERM, OPT_RESET_MQ, OPT_SEG_SYMBOLS, OPT_TERM_PASS, OPT_VERT_STR_CAUSAL, STRIPE_HEIGHT
-
-
Constructor Summary
Constructors Constructor Description PktDecoder(DecoderSpecs decSpec, HeaderDecoder hd, RandomAccessIO ehs, BitstreamReaderAgent src, boolean isTruncMode, int maxCB)
Creates an empty PktDecoder object associated with given decoder specifications and HeaderDecoder.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
getNumPrecinct(int c, int r)
Gets the number of precincts in a given component and resolution level.int
getPPX(int t, int c, int r)
Returns the precinct partition width for the specified component, resolution level and tile.int
getPPY(int t, int c, int rl)
Returns the precinct partition height for the specified component, resolution level and tile.PrecInfo
getPrecInfo(int c, int r, int p)
Get PrecInfo instance of the specified resolution level, component and precinct.void
readEPHMarker(jj2000.j2k.codestream.reader.PktHeaderBitReader bin)
Try to read an EPH marker.boolean
readPktBody(int l, int r, int c, int p, CBlkInfo[][][] cbI, int[] nb)
Reads specificied packet body in order to find offset of each code-block's piece of codeword.boolean
readPktHead(int l, int r, int c, int p, CBlkInfo[][][] cbI, int[] nb)
Read specified packet head and found length of each code-block's piece of codewords as well as number of skipped most significant bit-planes.boolean
readSOPMarker(int[] nBytes, int p, int c, int r)
Try to read a SOP marker and check that its sequence number if not out of sequence.CBlkInfo[][][][][]
restart(int nc, int[] mdl, int nl, CBlkInfo[][][][][] cbI, boolean pph, ByteArrayInputStream pphbais)
Re-initialize the PktDecoder instance at the beginning of a new tile.
-
-
-
Constructor Detail
-
PktDecoder
public PktDecoder(DecoderSpecs decSpec, HeaderDecoder hd, RandomAccessIO ehs, BitstreamReaderAgent src, boolean isTruncMode, int maxCB)
Creates an empty PktDecoder object associated with given decoder specifications and HeaderDecoder. This object must be initialized thanks to the restart method before being used.- Parameters:
decSpec
- The decoder specifications.hd
- The HeaderDecoder instance.ehs
- The stream where to read data from.src
- The bit stream reader agent.isTruncMode
- Whether or not truncation mode is required.maxCB
- The maximum number of code-blocks to read before ncbquit
-
-
Method Detail
-
restart
public CBlkInfo[][][][][] restart(int nc, int[] mdl, int nl, CBlkInfo[][][][][] cbI, boolean pph, ByteArrayInputStream pphbais)
Re-initialize the PktDecoder instance at the beginning of a new tile.- Parameters:
nc
- The number of components in this tilemdl
- The maximum number of decomposition level in each component of this tilenl
- The number of layers in this tilecbI
- The code-blocks arraypph
- Flag indicating whether packed packet headers was usedpphbais
- Stream containing the packed packet headers
-
getNumPrecinct
public int getNumPrecinct(int c, int r)
Gets the number of precincts in a given component and resolution level.- Parameters:
c
- Component indexr
- Resolution index
-
readPktHead
public boolean readPktHead(int l, int r, int c, int p, CBlkInfo[][][] cbI, int[] nb) throws IOException
Read specified packet head and found length of each code-block's piece of codewords as well as number of skipped most significant bit-planes.- Parameters:
l
- layer indexr
- Resolution level indexc
- Component indexp
- Precinct indexcbI
- CBlkInfo array of relevant component and resolution level.nb
- The number of bytes to read in each tile before reaching output rate (used by truncation mode)- Returns:
- True if specified output rate or EOF is reached.
- Throws:
IOException
-
readPktBody
public boolean readPktBody(int l, int r, int c, int p, CBlkInfo[][][] cbI, int[] nb) throws IOException
Reads specificied packet body in order to find offset of each code-block's piece of codeword. This use the list of found code-blocks in previous red packet head.- Parameters:
l
- layer indexr
- Resolution level indexc
- Component indexp
- Precinct indexcbI
- CBlkInfo array of relevant component and resolution level.nb
- The remainding number of bytes to read from the bit stream in each tile before reaching the decoding rate (in truncation mode)- Returns:
- True if decoding rate is reached
- Throws:
IOException
-
getPPX
public final int getPPX(int t, int c, int r)
Returns the precinct partition width for the specified component, resolution level and tile.- Parameters:
t
- the tile indexc
- The index of the component (between 0 and C-1)r
- The resolution level, from 0 to L.- Returns:
- the precinct partition width for the specified component, resolution level and tile.
-
getPPY
public final int getPPY(int t, int c, int rl)
Returns the precinct partition height for the specified component, resolution level and tile.- Parameters:
t
- the tile indexc
- The index of the component (between 0 and C-1)rl
- The resolution level, from 0 to L.- Returns:
- the precinct partition height in the specified component, for the specified resolution level, for the current tile.
-
readSOPMarker
public boolean readSOPMarker(int[] nBytes, int p, int c, int r) throws IOException
Try to read a SOP marker and check that its sequence number if not out of sequence. If so, an error is thrown.- Parameters:
nBytes
- The number of bytes left to read from each tilep
- Precinct indexr
- Resolution level indexc
- Component index- Throws:
IOException
-
readEPHMarker
public void readEPHMarker(jj2000.j2k.codestream.reader.PktHeaderBitReader bin) throws IOException
Try to read an EPH marker. If it is not possible then an Error is thrown.- Parameters:
bin
- The packet header reader to read the EPH marker from- Throws:
IOException
-
getPrecInfo
public PrecInfo getPrecInfo(int c, int r, int p)
Get PrecInfo instance of the specified resolution level, component and precinct.- Parameters:
c
- Component index.r
- Resolution level index.p
- Precinct index.
-
-