Package jj2000.j2k.codestream.writer
Class HeaderEncoder
- java.lang.Object
-
- jj2000.j2k.codestream.writer.HeaderEncoder
-
- All Implemented Interfaces:
Markers
,StdEntropyCoderOptions
public class HeaderEncoder extends Object implements Markers, StdEntropyCoderOptions
This class writes almost of the markers and marker segments in main header and in tile-part headers. It is created by the run() method of the Encoder instance.A marker segment includes a marker and eventually marker segment parameters. It is designed by the three letter code of the marker associated with the marker segment. JPEG 2000 part I defines 6 types of markers:
- Delimiting : SOC,SOT,SOD,EOC (written in FileCodestreamWriter).
- Fixed information: SIZ.
- Functional: COD,COC,RGN,QCD,QCC,POC.
- In bit-stream: SOP,EPH.
- Pointer: TLM,PLM,PLT,PPM,PPT.
- Informational: CRG,COM.
Main Header is written when Encoder instance calls encodeMainHeader whereas tile-part headers are written when the EBCOTRateAllocator instance calls encodeTilePartHeader.
- See Also:
Markers
,EBCOTRateAllocator
-
-
Field Summary
Fields Modifier and Type Field Description protected ByteArrayOutputStream
baos
The ByteArrayOutputStream to store header data.protected ForwardWT
dwt
Reference to the DWT moduleprotected DataOutputStream
hbuf
The DataOutputStream to store header data.protected boolean[]
isOrigSig
An array specifying, for each component,if the data was signed or notprotected int
nComp
The number of components in the imageprotected ImgData
origSrc
The image data reader.protected PostCompRateAllocator
ralloc
Reference to the rate allocatorprotected ROIScaler
roiSc
Reference to the ROI moduleprotected Tiler
tiler
Reference to the tiler moduleprotected J2KImageWriteParamJava
wp
The encoder specifications-
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
Constructors Constructor Description HeaderEncoder(ImgData origsrc, boolean[] isorigsig, ForwardWT dwt, Tiler tiler, J2KImageWriteParamJava wp, ROIScaler roiSc, PostCompRateAllocator ralloc)
Initializes the header writer with the references to the coding chain.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
encodeMainHeader()
Write main header.void
encodeTilePartHeader(int tileLength, int tileIdx)
Writes tile-part header.protected byte[]
getBuffer()
Returns the byte-buffer used to store the codestream header.protected int
getBufferLength()
Returns the number of bytes used in the codestream header's buffer.int
getLength()
Returns the length of the header.void
reset()
Resets the contents of this HeaderEncoder to its initial state.protected void
writeCOC(boolean mh, int tileIdx, int compIdx)
Writes COC marker segment .protected void
writeCOD(boolean mh, int tileIdx)
Writes COD marker segment.protected void
writeMainQCC(int compIdx)
Writes QCC marker segment in main header.protected void
writeMainQCD()
Writes QCD marker segment in main header.protected void
writePOC(boolean mh, int tileIdx)
Writes POC marker segment.protected void
writeTileQCC(int t, int compIdx)
Writes QCC marker segment in tile header.protected void
writeTileQCD(int tIdx)
Writes QCD marker segment in tile header.void
writeTo(OutputStream out)
Writes the header to the specified OutputStream.void
writeTo(BinaryDataOutput out)
Writes the header to the specified BinaryDataOutput.
-
-
-
Field Detail
-
nComp
protected int nComp
The number of components in the image
-
baos
protected ByteArrayOutputStream baos
The ByteArrayOutputStream to store header data. This handler is kept in order to use methods not accessible from a general DataOutputStream. For the other methods, it's better to use variable hbuf.- See Also:
hbuf
-
hbuf
protected DataOutputStream hbuf
The DataOutputStream to store header data. This kind of object is useful to write short, int, .... It's constructor takes baos as parameter.- See Also:
baos
-
origSrc
protected ImgData origSrc
The image data reader. Source of original data info
-
isOrigSig
protected boolean[] isOrigSig
An array specifying, for each component,if the data was signed or not
-
ralloc
protected PostCompRateAllocator ralloc
Reference to the rate allocator
-
dwt
protected ForwardWT dwt
Reference to the DWT module
-
tiler
protected Tiler tiler
Reference to the tiler module
-
roiSc
protected ROIScaler roiSc
Reference to the ROI module
-
wp
protected J2KImageWriteParamJava wp
The encoder specifications
-
-
Constructor Detail
-
HeaderEncoder
public HeaderEncoder(ImgData origsrc, boolean[] isorigsig, ForwardWT dwt, Tiler tiler, J2KImageWriteParamJava wp, ROIScaler roiSc, PostCompRateAllocator ralloc)
Initializes the header writer with the references to the coding chain.- Parameters:
origsrc
- The original image data (before any component mixing, tiling, etc.)isorigsig
- An array specifying for each component if it was originally signed or not.dwt
- The discrete wavelet transform module.tiler
- The tiler module.wp
- The encoder specificationsroiSc
- The ROI scaler module.ralloc
- The post compression rate allocator.
-
-
Method Detail
-
reset
public void reset()
Resets the contents of this HeaderEncoder to its initial state. It erases all the data in the header buffer and reactualizes the headerLength field of the bit stream writer.
-
getBuffer
protected byte[] getBuffer()
Returns the byte-buffer used to store the codestream header.- Returns:
- A byte array countaining codestream header
-
getLength
public int getLength()
Returns the length of the header.- Returns:
- The length of the header in bytes
-
writeTo
public void writeTo(BinaryDataOutput out) throws IOException
Writes the header to the specified BinaryDataOutput.- Parameters:
out
- Where to write the header.- Throws:
IOException
-
getBufferLength
protected int getBufferLength()
Returns the number of bytes used in the codestream header's buffer.- Returns:
- Header length in buffer (without any header overhead)
-
writeTo
public void writeTo(OutputStream out) throws IOException
Writes the header to the specified OutputStream.- Parameters:
out
- Where to write the header.- Throws:
IOException
-
writeCOD
protected void writeCOD(boolean mh, int tileIdx) throws IOException
Writes COD marker segment. COD is a functional marker segment containing the code style default (coding style, decomposition, layering) used for compressing all the components in an image.The values can be overriden for an individual component by a COC marker in either the main or the tile header.
- Parameters:
mh
- Flag indicating whether this marker belongs to the main headertileIdx
- Tile index if the marker belongs to a tile-part header- Throws:
IOException
- See Also:
writeCOC(boolean, int, int)
-
writeCOC
protected void writeCOC(boolean mh, int tileIdx, int compIdx) throws IOException
Writes COC marker segment . It is a functional marker containing the coding style for one component (coding style, decomposition, layering).Its values overrides any value previously set in COD in the main header or in the tile header.
- Parameters:
mh
- Flag indicating whether the main header is to be writtentileIdx
- Tile indexcompIdx
- index of the component which need use of the COC marker segment.- Throws:
IOException
- See Also:
writeCOD(boolean, int)
-
writeMainQCD
protected void writeMainQCD() throws IOException
Writes QCD marker segment in main header. QCD is a functional marker segment countaining the quantization default used for compressing all the components in an image. The values can be overriden for an individual component by a QCC marker in either the main or the tile header.- Throws:
IOException
-
writeMainQCC
protected void writeMainQCC(int compIdx) throws IOException
Writes QCC marker segment in main header. It is a functional marker segment countaining the quantization used for compressing the specified component in an image. The values override for the specified component what was defined by a QCC marker in either the main or the tile header.- Parameters:
compIdx
- Index of the component which needs QCC marker segment.- Throws:
IOException
-
writeTileQCD
protected void writeTileQCD(int tIdx) throws IOException
Writes QCD marker segment in tile header. QCD is a functional marker segment countaining the quantization default used for compressing all the components in an image. The values can be overriden for an individual component by a QCC marker in either the main or the tile header.- Parameters:
tIdx
- Tile index- Throws:
IOException
-
writeTileQCC
protected void writeTileQCC(int t, int compIdx) throws IOException
Writes QCC marker segment in tile header. It is a functional marker segment countaining the quantization used for compressing the specified component in an image. The values override for the specified component what was defined by a QCC marker in either the main or the tile header.- Parameters:
t
- Tile indexcompIdx
- Index of the component which needs QCC marker segment.- Throws:
IOException
-
writePOC
protected void writePOC(boolean mh, int tileIdx) throws IOException
Writes POC marker segment. POC is a functional marker segment containing the bounds and progression order for any progression order other than default in the codestream.- Parameters:
mh
- Flag indicating whether the main header is to be writtentileIdx
- Tile index- Throws:
IOException
-
encodeMainHeader
public void encodeMainHeader() throws IOException
Write main header. JJ2000 main header corresponds to the following sequence of marker segments:- SOC
- SIZ
- COD
- COC (if needed)
- QCD
- QCC (if needed)
- POC (if needed)
- Throws:
IOException
-
encodeTilePartHeader
public void encodeTilePartHeader(int tileLength, int tileIdx) throws IOException
Writes tile-part header. JJ2000 tile-part header corresponds to the following sequence of marker segments:- SOT
- COD (if needed)
- COC (if needed)
- QCD (if needed)
- QCC (if needed)
- RGN (if needed)
- POC (if needed)
- SOD
- Parameters:
tileLength
- The length of the current tile-part.tileIdx
- Index of the tile to write- Throws:
IOException
-
-