jj2000.j2k.codestream.reader
Class HeaderDecoder

java.lang.Object
  |
  +--jj2000.j2k.codestream.reader.HeaderDecoder
All Implemented Interfaces:
Markers, ProgressionType, StdEntropyCoderOptions

public class HeaderDecoder
extends java.lang.Object
implements ProgressionType, Markers, StdEntropyCoderOptions

This class reads main and tile-part headers from the codestream given a RandomAccessIO instance located at the beginning of the codestream (i.e just before the SOC marker) or at the beginning of a tile-part (i.e. just before a SOT marker segment) respectively.

A marker segment includes a marker and eventually marker segment parameters. It is designed by the three letters code of the marker associated with the marker segment. JPEG 2000 part 1 defines 6 types of markers segments:

The main header is read when the constructor is called whereas tile-part headers are read when the FileBitstreamReaderAgent instance is created. The reading is done in 2 passes:

  1. All marker segments are buffered and their corresponding flag is activated (extractMainMarkSeg and extractTilePartMarkSeg methods).
  2. Buffered marker segment are analyzed in a logical way and specifications are stored in appropriate member of DecoderSpecs instance (readFoundMainMarkSeg and readFoundTilePartMarkSeg methods).

Whenever a marker segment is not recognized a warning message is displayed and its length parameter is used to skip it.

The information found in this header is stored in HeaderInfo and DecoderSpecs instances.

See Also:
DecoderSpecs, HeaderInfo, Decoder, FileBitstreamReaderAgent

Field Summary
private  int cb0x
          The horizontal code-block partition origin
private  int cb0y
          The vertical code-block partition origin
private static int COC_FOUND
          Flag bit for COC marker segment found
private static int COD_FOUND
          Flag bit for COD marker segment found
private static int COM_FOUND
          Flag bit for COM marker segment found
static int CRG_FOUND
          Flag bit for CRG marker segment found
private  DecoderSpecs decSpec
          The decoder specifications
private  java.lang.String hdStr
          Current header information in a string
private  HeaderInfo hi
          The reference to the HeaderInfo instance holding the information found in headers
private  java.util.Hashtable ht
          HashTable used to store temporary marker segment byte buffers
 int mainHeadOff
          The offset of the main header in the input stream
private  int nCOCMarkSeg
          Counts number of COC markers found in the header
private  int nCOMMarkSeg
          Counts number of COM markers found in the header
private  int nComp
          The number of components in the image
private  int nfMarkSeg
          Used to store which markers have been already read, by using flag bits.
private  int nPPMMarkSeg
          Counts number of PPM markers found in the header
private  int[][] nPPTMarkSeg
          Counts number of PPT markers found in the header
private  int nQCCMarkSeg
          Counts number of QCC markers found in the header
private  int nRGNMarkSeg
          Counts number of RGN markers found in the header
 int[] nTileParts
          The number of tile parts in each tile
private  int nTiles
          The number of tiles within the image
static char OPT_PREFIX
          The prefix for header decoder options: 'H'
private static java.lang.String[][] pinfo
          The list of parameters that is accepted for quantization.
private  java.io.ByteArrayOutputStream[] pkdPktHeaders
          The packed packet headers if the PPM or PPT markers are used
private static int PLM_FOUND
          Flag bit for PLM marker segment found
private static int PLT_FOUND
          Flag bit for PLT marker segment found
private static int POC_FOUND
          Flag bit for POC marker segment found
static int PPM_FOUND
          Flag bit for SOD marker segment found
private  byte[][] pPMMarkerData
          Array containing the Nppm and Ippm fields of the PPM marker segments
static int PPT_FOUND
          Flag bit for SOD marker segment found
(package private)  boolean precinctPartitionIsUsed
          Is the precinct partition used
private static int QCC_FOUND
          Flag bit for QCC marker segment found
private static int QCD_FOUND
          Flag bit for QCD marker segment found
private static int RGN_FOUND
          Flag bit for RGN marker segment found
private static int SIZ_FOUND
          Flag bit for SIZ marker segment found
static int SOD_FOUND
          Flag bit for SOD marker segment found
private static int SOT_FOUND
          Flag bit for SOT marker segment found
private static int TILE_RESET
          The reset mask for new tiles
 java.util.Vector tileOfTileParts
          Vector containing info as to which tile each tilepart belong
private  byte[][][][] tilePartPkdPktHeaders
          Array containing the Ippm fields of the PPT marker segments
private static int TLM_FOUND
          Flag bit for TLM marker segment found
private  boolean verbose
          Whether or not to display general information
 
Fields inherited from interface jj2000.j2k.codestream.ProgressionType
COMP_POS_RES_LY_PROG, LY_RES_COMP_POS_PROG, POS_COMP_RES_LY_PROG, RES_LY_COMP_POS_PROG, RES_POS_COMP_LY_PROG
 
Fields inherited from interface jj2000.j2k.codestream.Markers
COC, COD, COM, CRG, EOC, EPH, EPH_LENGTH, ERS_SEG_SYMBOLS, ERS_SOP, MAX_COMP_BITDEPTH, MAX_LPPM, MAX_LPPT, PLM, PLT, POC, PPM, PPT, PRECINCT_PARTITION_DEF_SIZE, QCC, QCD, RCOM_GEN_USE, RGN, RSIZ_BASELINE, RSIZ_ER_FLAG, RSIZ_ROI, SCOX_HOR_CB_PART, SCOX_PRECINCT_PARTITION, SCOX_USE_EPH, SCOX_USE_SOP, SCOX_VER_CB_PART, SIZ, SOC, SOD, SOP, SOP_LENGTH, SOT, SQCX_EXP_MASK, SQCX_EXP_SHIFT, SQCX_GB_MSK, SQCX_GB_SHIFT, SQCX_NO_QUANTIZATION, SQCX_SCALAR_DERIVED, SQCX_SCALAR_EXPOUNDED, SRGN_IMPLICIT, SSIZ_DEPTH_BITS, TLM
 
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
HeaderDecoder(RandomAccessIO ehs, ParameterList pl, HeaderInfo hi)
          Creates a HeaderDecoder instance and read in two passes the main header of the codestream.
 
Method Summary
 void checkMarkerLength(java.io.DataInputStream ehs, java.lang.String str)
          Checks that the marker segment length is correct.
 BlkImgDataSrc createChannelDefinitionMapper(BlkImgDataSrc src, ColorSpace csMap)
          Creates and returns the ChannelDefinitonMapper which maps the input channels to the channel definition for the appropriate colorspace.
 BlkImgDataSrc createColorSpaceMapper(BlkImgDataSrc src, ColorSpace csMap)
          Creates and returns the EnumeratedColorSpaceMapper corresponding to the information read from the JP2 image file via the ColorSpace parameter.
 Dequantizer createDequantizer(CBlkQuantDataSrcDec src, int[] rb, DecoderSpecs decSpec2)
          Returns the dequantizer parameters.
 EntropyDecoder createEntropyDecoder(CodedCBlkDataSrcDec src, ParameterList pl)
          Creates and returns the entropy decoder corresponding to the information read from the codestream header and with the special additional parameters from the parameter list.
 BlkImgDataSrc createPalettizedColorSpaceMapper(BlkImgDataSrc src, ColorSpace csMap)
          Creates and returns the PalettizedColorSpaceMapper which uses the input samples as indicies into a sample palette to construct the output.
 BlkImgDataSrc createResampler(BlkImgDataSrc src, ColorSpace csMap)
          Creates and returns the Resampler which converts the input source to one in which all channels have the same number of samples.
 ROIDeScaler createROIDeScaler(CBlkQuantDataSrcDec src, ParameterList pl, DecoderSpecs decSpec2)
          Creates and returns the ROIDeScaler corresponding to the information read from the codestream header and with the special additional parameters from the parameter list.
private  void extractMainMarkSeg(short marker, RandomAccessIO ehs)
          This method extract a marker segment from the main header and stores it into a byte buffer for the second pass.
 void extractTilePartMarkSeg(short marker, RandomAccessIO ehs, int tileIdx, int tilePartIdx)
          This method extracts a marker segment in a tile-part header and stores it into a byte buffer for the second pass.
 int getCbULX()
          Returns the horizontal code-block partition origin.Allowable values are 0 and 1, nothing else.
 int getCbULY()
          Returns the vertical code-block partition origin.
 int getCompSubsX(int c)
          Returns the component sub-sampling factor, with respect to the reference grid, along the horizontal direction for the specified component.
 int getCompSubsY(int c)
          Returns the component sub-sampling factor, with respect to the reference grid, along the vertical direction for the specified component.
 DecoderSpecs getDecoderSpecs()
          Return the DecoderSpecs instance filled when reading the headers
 int getImgHeight()
          Returns the image height in the reference grid.
 int getImgULX()
          Return the horizontal upper-left coordinate of the image in the reference grid.
 int getImgULY()
          Return the vertical upper-left coordinate of the image in the reference grid.
 int getImgWidth()
          Returns the image width in the reference grid.
 int getMaxCompImgHeight()
          Return the maximum height among all components
 int getMaxCompImgWidth()
          Return the maximum width among all components
 int getNomTileHeight()
          Returns the nominal width of the tiles in the reference grid.
 int getNomTileWidth()
          Returns the nominal width of the tiles in the reference grid.
 int getNumComps()
          Returns the number of components in the image.
 int getNumFoundMarkSeg()
          Returns the number of found marker segments in the current header.
 int getNumTiles()
          Return the number of tiles in the image
 int getOriginalBitDepth(int c)
          Returns the original bitdepth of the specified component.
 java.io.ByteArrayInputStream getPackedPktHead(int tile)
          Return the packed packet headers for a given tile.
static java.lang.String[][] getParameterInfo()
          Returns the parameters that are used in this class.
 int getPPX(int t, int c, int rl)
          Returns the precinct partition width for the specified tile-component and resolution level.
 int getPPY(int t, int c, int rl)
          Returns the precinct partition height for the specified tile-component and resolution level.
 Coord getTilingOrigin(Coord co)
          Returns the tiling origin, referred to as '(Px,Py)' in the 'ImgData' interface.
 boolean isOriginalSigned(int c)
          Returns true if the original data of the specified component was signed.
 boolean precinctPartitionUsed()
          Returns the boolean used to know if the precinct partition is used
private  void readCOC(java.io.DataInputStream ehs, boolean mainh, int tileIdx, int tpIdx)
          Reads the COC marker segment and realigns the codestream where the next marker should be found.
private  void readCOD(java.io.DataInputStream ehs, boolean mainh, int tileIdx, int tpIdx)
          Reads a COD marker segment and realigns the codestream where the next marker should be found.
private  void readCOM(java.io.DataInputStream ehs, boolean mainh, int tileIdx, int comIdx)
          Reads a COM marker segments and realigns the bit stream at the point where the next marker segment should be found.
private  void readCRG(java.io.DataInputStream ehs)
          Reads a CRG marker segment and checks its length.
private  SynWTFilter readFilter(java.io.DataInputStream ehs, int[] filtIdx)
          Reads a wavelet filter from the codestream and returns the filter object that implements it.
private  void readFoundMainMarkSeg()
          Retrieves and reads all marker segments found in the main header during the first pass.
 void readFoundTilePartMarkSeg(int tileIdx, int tpIdx)
          Retrieves and reads all marker segments previously found in the tile-part header.
private  void readPLM(java.io.DataInputStream ehs)
          Reads PLM marker segment and realigns the codestream where the next marker should be found.
private  void readPLTFields(java.io.DataInputStream ehs)
          Reads the PLT fields and realigns the codestream where the next marker should be found.
private  void readPOC(java.io.DataInputStream ehs, boolean mainh, int t, int tpIdx)
          Reads the POC marker segment and realigns the codestream where the next marker should be found.
private  void readPPM(java.io.DataInputStream ehs)
          Reads the PPM marker segment of the main header.
private  void readPPT(java.io.DataInputStream ehs, int tile, int tpIdx)
          Reads the PPT marker segment of the main header.
private  void readQCC(java.io.DataInputStream ehs, boolean mainh, int tileIdx, int tpIdx)
          Reads a QCC marker segment and realigns the codestream at the point where the next marker should be found.
private  void readQCD(java.io.DataInputStream ehs, boolean mainh, int tileIdx, int tpIdx)
          Reads a QCD marker segment and realigns the codestream at the point where the next marker should be found.
private  void readRGN(java.io.DataInputStream ehs, boolean mainh, int tileIdx, int tpIdx)
          Reads the RGN marker segment of the codestream header.
private  void readSIZ(java.io.DataInputStream ehs)
          Reads the SIZ marker segment and realigns the codestream at the point where the next marker segment should be found.
private  void readTLM(java.io.DataInputStream ehs)
          Reads TLM marker segment and realigns the codestream where the next marker should be found.
 void resetHeaderMarkers()
          Method that resets members indicating which markers have already been found
 void setTileOfTileParts(int tile)
          Sets the tile of each tile part in order.
 java.lang.String toString()
          Print information about the current header.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

OPT_PREFIX

public static final char OPT_PREFIX
The prefix for header decoder options: 'H'

See Also:
Constant Field Values

pinfo

private static final java.lang.String[][] pinfo
The list of parameters that is accepted for quantization. Options for quantization start with 'Q'.


hi

private HeaderInfo hi
The reference to the HeaderInfo instance holding the information found in headers


verbose

private boolean verbose
Whether or not to display general information


hdStr

private java.lang.String hdStr
Current header information in a string


nTiles

private int nTiles
The number of tiles within the image


nTileParts

public int[] nTileParts
The number of tile parts in each tile


nfMarkSeg

private int nfMarkSeg
Used to store which markers have been already read, by using flag bits. The different markers are marked with XXX_FOUND flags, such as SIZ_FOUND


nCOCMarkSeg

private int nCOCMarkSeg
Counts number of COC markers found in the header


nQCCMarkSeg

private int nQCCMarkSeg
Counts number of QCC markers found in the header


nCOMMarkSeg

private int nCOMMarkSeg
Counts number of COM markers found in the header


nRGNMarkSeg

private int nRGNMarkSeg
Counts number of RGN markers found in the header


nPPMMarkSeg

private int nPPMMarkSeg
Counts number of PPM markers found in the header


nPPTMarkSeg

private int[][] nPPTMarkSeg
Counts number of PPT markers found in the header


SIZ_FOUND

private static final int SIZ_FOUND
Flag bit for SIZ marker segment found

See Also:
Constant Field Values

COD_FOUND

private static final int COD_FOUND
Flag bit for COD marker segment found

See Also:
Constant Field Values

COC_FOUND

private static final int COC_FOUND
Flag bit for COC marker segment found

See Also:
Constant Field Values

QCD_FOUND

private static final int QCD_FOUND
Flag bit for QCD marker segment found

See Also:
Constant Field Values

TLM_FOUND

private static final int TLM_FOUND
Flag bit for TLM marker segment found

See Also:
Constant Field Values

PLM_FOUND

private static final int PLM_FOUND
Flag bit for PLM marker segment found

See Also:
Constant Field Values

SOT_FOUND

private static final int SOT_FOUND
Flag bit for SOT marker segment found

See Also:
Constant Field Values

PLT_FOUND

private static final int PLT_FOUND
Flag bit for PLT marker segment found

See Also:
Constant Field Values

QCC_FOUND

private static final int QCC_FOUND
Flag bit for QCC marker segment found

See Also:
Constant Field Values

RGN_FOUND

private static final int RGN_FOUND
Flag bit for RGN marker segment found

See Also:
Constant Field Values

POC_FOUND

private static final int POC_FOUND
Flag bit for POC marker segment found

See Also:
Constant Field Values

COM_FOUND

private static final int COM_FOUND
Flag bit for COM marker segment found

See Also:
Constant Field Values

SOD_FOUND

public static final int SOD_FOUND
Flag bit for SOD marker segment found

See Also:
Constant Field Values

PPM_FOUND

public static final int PPM_FOUND
Flag bit for SOD marker segment found

See Also:
Constant Field Values

PPT_FOUND

public static final int PPT_FOUND
Flag bit for SOD marker segment found

See Also:
Constant Field Values

CRG_FOUND

public static final int CRG_FOUND
Flag bit for CRG marker segment found

See Also:
Constant Field Values

TILE_RESET

private static final int TILE_RESET
The reset mask for new tiles

See Also:
Constant Field Values

ht

private java.util.Hashtable ht
HashTable used to store temporary marker segment byte buffers


nComp

private int nComp
The number of components in the image


cb0x

private int cb0x
The horizontal code-block partition origin


cb0y

private int cb0y
The vertical code-block partition origin


decSpec

private DecoderSpecs decSpec
The decoder specifications


precinctPartitionIsUsed

boolean precinctPartitionIsUsed
Is the precinct partition used


mainHeadOff

public int mainHeadOff
The offset of the main header in the input stream


tileOfTileParts

public java.util.Vector tileOfTileParts
Vector containing info as to which tile each tilepart belong


pPMMarkerData

private byte[][] pPMMarkerData
Array containing the Nppm and Ippm fields of the PPM marker segments


tilePartPkdPktHeaders

private byte[][][][] tilePartPkdPktHeaders
Array containing the Ippm fields of the PPT marker segments


pkdPktHeaders

private java.io.ByteArrayOutputStream[] pkdPktHeaders
The packed packet headers if the PPM or PPT markers are used

Constructor Detail

HeaderDecoder

public HeaderDecoder(RandomAccessIO ehs,
                     ParameterList pl,
                     HeaderInfo hi)
              throws java.io.IOException
Creates a HeaderDecoder instance and read in two passes the main header of the codestream. The first and last marker segments shall be respectively SOC and SOT.

Parameters:
ehs - The encoded header stream where marker segments are extracted.
pl - The ParameterList object of the decoder
hi - The HeaderInfo holding information found in marker segments
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoded header stream.
java.io.EOFException - If the end of the encoded header stream is reached before getting all the data.
CorruptedCodestreamException - If invalid data is found in the codestream main header.
Method Detail

getMaxCompImgHeight

public int getMaxCompImgHeight()
Return the maximum height among all components

Returns:
Maximum component height

getMaxCompImgWidth

public int getMaxCompImgWidth()
Return the maximum width among all components

Returns:
Maximum component width

getImgWidth

public final int getImgWidth()
Returns the image width in the reference grid.

Returns:
The image width in the reference grid

getImgHeight

public final int getImgHeight()
Returns the image height in the reference grid.

Returns:
The image height in the reference grid

getImgULX

public final int getImgULX()
Return the horizontal upper-left coordinate of the image in the reference grid.

Returns:
The horizontal coordinate of the image origin.

getImgULY

public final int getImgULY()
Return the vertical upper-left coordinate of the image in the reference grid.

Returns:
The vertical coordinate of the image origin.

getNomTileWidth

public final int getNomTileWidth()
Returns the nominal width of the tiles in the reference grid.

Returns:
The nominal tile width, in the reference grid.

getNomTileHeight

public final int getNomTileHeight()
Returns the nominal width of the tiles in the reference grid.

Returns:
The nominal tile width, in the reference grid.

getTilingOrigin

public final Coord getTilingOrigin(Coord co)
Returns the tiling origin, referred to as '(Px,Py)' in the 'ImgData' interface.

Parameters:
co - If not null this object is used to return the information. If null a new one is created and returned.
Returns:
The coordinate of the tiling origin, in the canvas system, on the reference grid.
See Also:
ImgData

isOriginalSigned

public final boolean isOriginalSigned(int c)
Returns true if the original data of the specified component was signed. If the data was not signed a level shift has to be applied at the end of the decompression chain.

Parameters:
c - The index of the component
Returns:
True if the original image component was signed.

getOriginalBitDepth

public final int getOriginalBitDepth(int c)
Returns the original bitdepth of the specified component.

Parameters:
c - The index of the component
Returns:
The bitdepth of the component

getNumComps

public final int getNumComps()
Returns the number of components in the image.

Returns:
The number of components in the image.

getCompSubsX

public final int getCompSubsX(int c)
Returns the component sub-sampling factor, with respect to the reference grid, along the horizontal direction for the specified component.

Parameters:
c - The index of the component
Returns:
The component sub-sampling factor X-wise.

getCompSubsY

public final int getCompSubsY(int c)
Returns the component sub-sampling factor, with respect to the reference grid, along the vertical direction for the specified component.

Parameters:
c - The index of the component
Returns:
The component sub-sampling factor Y-wise.

createDequantizer

public final Dequantizer createDequantizer(CBlkQuantDataSrcDec src,
                                           int[] rb,
                                           DecoderSpecs decSpec2)
Returns the dequantizer parameters. Dequantizer parameters normally are the quantization step sizes, see DequantizerParams.

Parameters:
src - The source of data for the dequantizer.
rb - The number of range bits for each component. Must be the number of range bits of the mixed components.
decSpec2 - The DecoderSpecs instance after any image manipulation.
Returns:
The dequantizer

getCbULX

public final int getCbULX()
Returns the horizontal code-block partition origin.Allowable values are 0 and 1, nothing else.


getCbULY

public final int getCbULY()
Returns the vertical code-block partition origin. Allowable values are 0 and 1, nothing else.


getPPX

public final int getPPX(int t,
                        int c,
                        int rl)
Returns the precinct partition width for the specified tile-component and resolution level.

Parameters:
c - the component index
t - the tile index
rl - the resolution level
Returns:
The precinct partition width for the specified tile-component and resolution level

getPPY

public final int getPPY(int t,
                        int c,
                        int rl)
Returns the precinct partition height for the specified tile-component and resolution level.

Parameters:
c - the component index
t - the tile index
rl - the resolution level
Returns:
The precinct partition height for the specified tile-component and resolution level

precinctPartitionUsed

public final boolean precinctPartitionUsed()
Returns the boolean used to know if the precinct partition is used


readFilter

private SynWTFilter readFilter(java.io.DataInputStream ehs,
                               int[] filtIdx)
                        throws java.io.IOException
Reads a wavelet filter from the codestream and returns the filter object that implements it.

Parameters:
ehs - The encoded header stream from where to read the info
filtIdx - Int array of one element to return the type of the wavelet filter.
java.io.IOException

checkMarkerLength

public void checkMarkerLength(java.io.DataInputStream ehs,
                              java.lang.String str)
                       throws java.io.IOException
Checks that the marker segment length is correct.

Parameters:
ehs - The encoded header stream
str - The string identifying the marker, such as "SIZ marker"
Throws:
java.io.IOException - If an I/O error occurs

readSIZ

private void readSIZ(java.io.DataInputStream ehs)
              throws java.io.IOException
Reads the SIZ marker segment and realigns the codestream at the point where the next marker segment should be found.

SIZ is a fixed information marker segment containing informations about image and tile sizes. It is required in the main header immediately after SOC.

Parameters:
ehs - The encoded header stream
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoded header stream

readCRG

private void readCRG(java.io.DataInputStream ehs)
              throws java.io.IOException
Reads a CRG marker segment and checks its length. CRG is an informational marker segment that allows specific registration of components with respect to each other.

Parameters:
ehs - The encoded header stream
java.io.IOException

readCOM

private void readCOM(java.io.DataInputStream ehs,
                     boolean mainh,
                     int tileIdx,
                     int comIdx)
              throws java.io.IOException
Reads a COM marker segments and realigns the bit stream at the point where the next marker segment should be found. COM is an informational marker segment that allows to include unstructured data in the main and tile-part headers.

Parameters:
ehs - The encoded header stream
mainh - Flag indicating whether or not this marker segment is read from the main header.
tileIdx - The index of the current tile
comIdx - Occurence of this COM marker in eith main or tile-part header
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoded header stream

readQCD

private void readQCD(java.io.DataInputStream ehs,
                     boolean mainh,
                     int tileIdx,
                     int tpIdx)
              throws java.io.IOException
Reads a QCD marker segment and realigns the codestream at the point where the next marker should be found. QCD is a functional marker segment that describes the quantization default.

Parameters:
ehs - The encoded stream.
mainh - Flag indicating whether or not this marker segment is read from the main header.
tileIdx - The index of the current tile
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoded header stream.

readQCC

private void readQCC(java.io.DataInputStream ehs,
                     boolean mainh,
                     int tileIdx,
                     int tpIdx)
              throws java.io.IOException
Reads a QCC marker segment and realigns the codestream at the point where the next marker should be found. QCC is a functional marker segment that describes the quantization of one component.

Parameters:
ehs - The encoded stream.
mainh - Flag indicating whether or not this marker segment is read from the main header.
tileIdx - The index of the current tile
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoded header stream.

readCOD

private void readCOD(java.io.DataInputStream ehs,
                     boolean mainh,
                     int tileIdx,
                     int tpIdx)
              throws java.io.IOException
Reads a COD marker segment and realigns the codestream where the next marker should be found.

Parameters:
ehs - The encoder header stream.
mainh - Flag indicating whether or not this marker segment is read from the main header.
tileIdx - The index of the current tile
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readCOC

private void readCOC(java.io.DataInputStream ehs,
                     boolean mainh,
                     int tileIdx,
                     int tpIdx)
              throws java.io.IOException
Reads the COC marker segment and realigns the codestream where the next marker should be found.

Parameters:
ehs - The encoder header stream.
mainh - Flag indicating whether or not this marker segment is read from the main header.
tileIdx - The index of the current tile
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readPOC

private void readPOC(java.io.DataInputStream ehs,
                     boolean mainh,
                     int t,
                     int tpIdx)
              throws java.io.IOException
Reads the POC marker segment and realigns the codestream where the next marker should be found.

Parameters:
ehs - The encoder header stream.
mainh - Flag indicating whether or not this marker segment is read from the main header.
t - The index of the current tile
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readTLM

private void readTLM(java.io.DataInputStream ehs)
              throws java.io.IOException
Reads TLM marker segment and realigns the codestream where the next marker should be found. Informations stored in these fields are currently NOT taken into account.

Parameters:
ehs - The encoder header stream.
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readPLM

private void readPLM(java.io.DataInputStream ehs)
              throws java.io.IOException
Reads PLM marker segment and realigns the codestream where the next marker should be found. Informations stored in these fields are currently not taken into account.

Parameters:
ehs - The encoder header stream.
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readPLTFields

private void readPLTFields(java.io.DataInputStream ehs)
                    throws java.io.IOException
Reads the PLT fields and realigns the codestream where the next marker should be found. Informations stored in these fields are currently NOT taken into account.

Parameters:
ehs - The encoder header stream.
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readRGN

private void readRGN(java.io.DataInputStream ehs,
                     boolean mainh,
                     int tileIdx,
                     int tpIdx)
              throws java.io.IOException
Reads the RGN marker segment of the codestream header.

May be used in tile or main header. If used in main header, it refers to the maxshift value of a component in all tiles. When used in tile header, only the particular tile-component is affected.

Parameters:
ehs - The encoder header stream.
mainh - Flag indicating whether or not this marker segment is read from the main header.
tileIdx - The index of the current tile
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readPPM

private void readPPM(java.io.DataInputStream ehs)
              throws java.io.IOException
Reads the PPM marker segment of the main header.

Parameters:
ehs - The encoder header stream.
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

readPPT

private void readPPT(java.io.DataInputStream ehs,
                     int tile,
                     int tpIdx)
              throws java.io.IOException
Reads the PPT marker segment of the main header.

Parameters:
ehs - The encoder header stream.
tile - The tile to which the current tile part belongs
tpIdx - Tile-part index
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

extractMainMarkSeg

private void extractMainMarkSeg(short marker,
                                RandomAccessIO ehs)
                         throws java.io.IOException
This method extract a marker segment from the main header and stores it into a byte buffer for the second pass. The marker segment is first identified. Then its flag is activated. Finally, its content is buffered into a byte array stored in an hashTable.

If the marker is not recognized, it prints a warning and skips it according to its length.

SIZ marker segment shall be the first encountered marker segment.

Parameters:
marker - The marker segment to process
ehs - The encoded header stream
java.io.IOException

extractTilePartMarkSeg

public void extractTilePartMarkSeg(short marker,
                                   RandomAccessIO ehs,
                                   int tileIdx,
                                   int tilePartIdx)
                            throws java.io.IOException
This method extracts a marker segment in a tile-part header and stores it into a byte buffer for the second pass. The marker is first recognized, then its flag is activated and, finally, its content is buffered in an element of byte arrays accessible thanks to a hashTable. If a marker segment is not recognized, it prints a warning and skip it according to its length.

Parameters:
marker - The marker to process
ehs - The encoded header stream
tileIdx - The index of the current tile
tilePartIdx - The index of the current tile part
java.io.IOException

readFoundMainMarkSeg

private void readFoundMainMarkSeg()
                           throws java.io.IOException
Retrieves and reads all marker segments found in the main header during the first pass.

java.io.IOException

readFoundTilePartMarkSeg

public void readFoundTilePartMarkSeg(int tileIdx,
                                     int tpIdx)
                              throws java.io.IOException
Retrieves and reads all marker segments previously found in the tile-part header.

Parameters:
tileIdx - The index of the current tile
tpIdx - Index of the current tile-part
java.io.IOException

getDecoderSpecs

public DecoderSpecs getDecoderSpecs()
Return the DecoderSpecs instance filled when reading the headers

Returns:
The DecoderSpecs of the decoder

createEntropyDecoder

public EntropyDecoder createEntropyDecoder(CodedCBlkDataSrcDec src,
                                           ParameterList pl)
Creates and returns the entropy decoder corresponding to the information read from the codestream header and with the special additional parameters from the parameter list.

Parameters:
src - The bit stream reader agent where to get code-block data from.
pl - The parameter list containing parameters applicable to the entropy decoder (other parameters can also be present).
Returns:
The entropy decoder

createColorSpaceMapper

public BlkImgDataSrc createColorSpaceMapper(BlkImgDataSrc src,
                                            ColorSpace csMap)
                                     throws java.io.IOException,
                                            ICCProfileException,
                                            ColorSpaceException
Creates and returns the EnumeratedColorSpaceMapper corresponding to the information read from the JP2 image file via the ColorSpace parameter.

Parameters:
src - The bit stream reader agent where to get code-block data from.
csMap - provides color space information from the image file
Returns:
The color space mapping object
Throws:
java.io.IOException - image access exception
ICCProfileException - if image contains a bad icc profile
ColorSpaceException - if image contains a bad colorspace box

createChannelDefinitionMapper

public BlkImgDataSrc createChannelDefinitionMapper(BlkImgDataSrc src,
                                                   ColorSpace csMap)
                                            throws java.io.IOException,
                                                   ColorSpaceException
Creates and returns the ChannelDefinitonMapper which maps the input channels to the channel definition for the appropriate colorspace.

Parameters:
src - The bit stream reader agent where to get code-block data from.
csMap - provides color space information from the image file
Returns:
The channel definition mapping object
Throws:
java.io.IOException - image access exception
ColorSpaceException - if image contains a bad colorspace box

createPalettizedColorSpaceMapper

public BlkImgDataSrc createPalettizedColorSpaceMapper(BlkImgDataSrc src,
                                                      ColorSpace csMap)
                                               throws java.io.IOException,
                                                      ColorSpaceException
Creates and returns the PalettizedColorSpaceMapper which uses the input samples as indicies into a sample palette to construct the output.

Parameters:
src - The bit stream reader agent where to get code-block data from.
csMap - provides color space information from the image file
Returns:
a PalettizedColorSpaceMapper instance
Throws:
java.io.IOException - image access exception
ColorSpaceException - if image contains a bad colorspace box

createResampler

public BlkImgDataSrc createResampler(BlkImgDataSrc src,
                                     ColorSpace csMap)
                              throws java.io.IOException,
                                     ColorSpaceException
Creates and returns the Resampler which converts the input source to one in which all channels have the same number of samples. This is required for colorspace conversions.

Parameters:
src - The bit stream reader agent where to get code-block data from.
csMap - provides color space information from the image file
Returns:
The resampled BlkImgDataSrc
Throws:
java.io.IOException - image access exception
ColorSpaceException - if image contains a bad colorspace box

createROIDeScaler

public ROIDeScaler createROIDeScaler(CBlkQuantDataSrcDec src,
                                     ParameterList pl,
                                     DecoderSpecs decSpec2)
Creates and returns the ROIDeScaler corresponding to the information read from the codestream header and with the special additional parameters from the parameter list.

Parameters:
src - The bit stream reader agent where to get code-block data from.
pl - The parameter list containing parameters applicable to the entropy decoder (other parameters can also be present).
decSpec2 - The DecoderSpecs instance after any image manipulation.
Returns:
The ROI descaler.

resetHeaderMarkers

public void resetHeaderMarkers()
Method that resets members indicating which markers have already been found


toString

public java.lang.String toString()
Print information about the current header.

Overrides:
toString in class java.lang.Object
Returns:
Information in a String

getParameterInfo

public static java.lang.String[][] getParameterInfo()
Returns the parameters that are used in this class. It returns a 2D String array. Each of the 1D arrays is for a different option, and they have 3 elements. The first element is the option name, the second one is the synopsis and the third one is a long description of what the parameter is. The synopsis or description may be 'null', in which case it is assumed that there is no synopsis or description of the option, respectively.

Returns:
the options name, their synopsis and their explanation.

getNumTiles

public int getNumTiles()
Return the number of tiles in the image

Returns:
The number of tiles

getPackedPktHead

public java.io.ByteArrayInputStream getPackedPktHead(int tile)
                                              throws java.io.IOException
Return the packed packet headers for a given tile.

Returns:
An input stream containing the packed packet headers for a particular tile
Throws:
java.io.IOException - If an I/O error occurs while reading from the encoder header stream

setTileOfTileParts

public void setTileOfTileParts(int tile)
Sets the tile of each tile part in order. This information is needed for identifying which packet header belongs to which tile when using the PPM marker.

Parameters:
tile - The tile number that the present tile part belongs to.

getNumFoundMarkSeg

public int getNumFoundMarkSeg()
Returns the number of found marker segments in the current header.

Returns:
The number of marker segments found in the current header.