CSJ2K.j2k.codestream.writer.HeaderEncoder.encodeTilePartHeader C# (CSharp) Method

encodeTilePartHeader() public method

Writes tile-part header. JJ2000 tile-part header corresponds to the following sequence of marker segments:
  1. SOT
  2. COD (if needed)
  3. COC (if needed)
  4. QCD (if needed)
  5. QCC (if needed)
  6. RGN (if needed)
  7. POC (if needed)
  8. SOD
public encodeTilePartHeader ( int tileLength, int tileIdx ) : void
tileLength int
tileIdx int Index of the tile to write /// ///
return void
        public virtual void encodeTilePartHeader(int tileLength, int tileIdx)
        {
            int tmp;
            Coord numTiles = ralloc.getNumTiles(null);
            ralloc.setTile(tileIdx % numTiles.x, tileIdx / numTiles.x);

            // +--------------------------+
            // |    SOT maker segment     |
            // +--------------------------+
            // SOT marker
            hbuf.Write((System.Byte) SupportClass.URShift(CSJ2K.j2k.codestream.Markers.SOT, 8));
            hbuf.Write((System.Byte) (CSJ2K.j2k.codestream.Markers.SOT & 0x00FF));

            // Lsot (10 bytes)
            hbuf.Write((System.Byte) 0);
            hbuf.Write((System.Byte) 10);

            // Isot
            if (tileIdx > 65534)
            {
                throw new System.ArgumentException("Trying to write a tile-part " + "header whose tile index is " + "too high");
            }
            hbuf.Write((System.Byte) (tileIdx >> 8));
            hbuf.Write((System.Byte) tileIdx);

            // Psot
            tmp = tileLength;
            hbuf.Write((System.Byte) (tmp >> 24));
            hbuf.Write((System.Byte) (tmp >> 16));
            hbuf.Write((System.Byte) (tmp >> 8));
            hbuf.Write((System.Byte) tmp);

            // TPsot
            hbuf.Write((System.Byte) 0); // Only one tile-part currently supported !

            // TNsot
            hbuf.Write((System.Byte) 1); // Only one tile-part currently supported !

            // +--------------------------+
            // |    COD maker segment     |
            // +--------------------------+
            bool isEresUsed = ((System.String) encSpec.tts.getDefault()).Equals("predict");
            bool isEresUsedInTile = ((System.String) encSpec.tts.getTileDef(tileIdx)).Equals("predict");
            bool tileCODwritten = false;
            if (encSpec.wfs.isTileSpecified(tileIdx) || encSpec.cts.isTileSpecified(tileIdx) || encSpec.dls.isTileSpecified(tileIdx) || encSpec.bms.isTileSpecified(tileIdx) || encSpec.mqrs.isTileSpecified(tileIdx) || encSpec.rts.isTileSpecified(tileIdx) || encSpec.css.isTileSpecified(tileIdx) || encSpec.pss.isTileSpecified(tileIdx) || encSpec.sops.isTileSpecified(tileIdx) || encSpec.sss.isTileSpecified(tileIdx) || encSpec.pocs.isTileSpecified(tileIdx) || encSpec.ephs.isTileSpecified(tileIdx) || encSpec.cblks.isTileSpecified(tileIdx) || (isEresUsed != isEresUsedInTile))
            {
                writeCOD(false, tileIdx);
                tileCODwritten = true;
            }

            // +--------------------------+
            // |    COC maker segment     |
            // +--------------------------+
            for (int c = 0; c < nComp; c++)
            {
                bool isEresUsedInTileComp = ((System.String) encSpec.tts.getTileCompVal(tileIdx, c)).Equals("predict");

                if (encSpec.wfs.isTileCompSpecified(tileIdx, c) || encSpec.dls.isTileCompSpecified(tileIdx, c) || encSpec.bms.isTileCompSpecified(tileIdx, c) || encSpec.mqrs.isTileCompSpecified(tileIdx, c) || encSpec.rts.isTileCompSpecified(tileIdx, c) || encSpec.css.isTileCompSpecified(tileIdx, c) || encSpec.pss.isTileCompSpecified(tileIdx, c) || encSpec.sss.isTileCompSpecified(tileIdx, c) || encSpec.cblks.isTileCompSpecified(tileIdx, c) || (isEresUsedInTileComp != isEresUsed))
                {
                    writeCOC(false, tileIdx, c);
                }
                else if (tileCODwritten)
                {
                    if (encSpec.wfs.isCompSpecified(c) || encSpec.dls.isCompSpecified(c) || encSpec.bms.isCompSpecified(c) || encSpec.mqrs.isCompSpecified(c) || encSpec.rts.isCompSpecified(c) || encSpec.sss.isCompSpecified(c) || encSpec.css.isCompSpecified(c) || encSpec.pss.isCompSpecified(c) || encSpec.cblks.isCompSpecified(c) || (encSpec.tts.isCompSpecified(c) && ((System.String) encSpec.tts.getCompDef(c)).Equals("predict")))
                    {
                        writeCOC(false, tileIdx, c);
                    }
                }
            }

            // +--------------------------+
            // |    QCD maker segment     |
            // +--------------------------+
            bool tileQCDwritten = false;
            if (encSpec.qts.isTileSpecified(tileIdx) || encSpec.qsss.isTileSpecified(tileIdx) || encSpec.dls.isTileSpecified(tileIdx) || encSpec.gbs.isTileSpecified(tileIdx))
            {
                writeTileQCD(tileIdx);
                tileQCDwritten = true;
            }
            else
            {
                deftilenr = defimgn;
            }

            // +--------------------------+
            // |    QCC maker segment     |
            // +--------------------------+
            for (int c = 0; c < nComp; c++)
            {
                if (dwt.getNomRangeBits(c) != deftilenr || encSpec.qts.isTileCompSpecified(tileIdx, c) || encSpec.qsss.isTileCompSpecified(tileIdx, c) || encSpec.dls.isTileCompSpecified(tileIdx, c) || encSpec.gbs.isTileCompSpecified(tileIdx, c))
                {
                    writeTileQCC(tileIdx, c);
                }
                else if (tileQCDwritten)
                {
                    if (encSpec.qts.isCompSpecified(c) || encSpec.qsss.isCompSpecified(c) || encSpec.dls.isCompSpecified(c) || encSpec.gbs.isCompSpecified(c))
                    {
                        writeTileQCC(tileIdx, c);
                    }
                }
            }

            // +--------------------------+
            // |    RGN maker segment     |
            // +--------------------------+
            if (roiSc.useRoi() && (!roiSc.BlockAligned))
                writeRGN(tileIdx);

            // +--------------------------+
            // |    POC maker segment     |
            // +--------------------------+
            Progression[] prog;
            if (encSpec.pocs.isTileSpecified(tileIdx))
            {
                prog = (Progression[]) (encSpec.pocs.getTileDef(tileIdx));
                if (prog.Length > 1)
                    writePOC(false, tileIdx);
            }

            // +--------------------------+
            // |         SOD maker        |
            // +--------------------------+
            hbuf.Write((System.Byte) SupportClass.URShift(CSJ2K.j2k.codestream.Markers.SOD, 8));
            hbuf.Write((System.Byte) (CSJ2K.j2k.codestream.Markers.SOD & 0x00FF));
        }