--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingmodules/jp2kcodec/Inc/JP2KTileInfo.h Thu Dec 17 09:22:31 2009 +0200
@@ -0,0 +1,608 @@
+/*
+* Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CJ2kTileInfo class used to collect tile related
+* information such as Tile Part Header, SOT marker and
+* list of components.
+*
+*/
+
+
+#ifndef __JP2KTILEINFO_H__
+#define __JP2KTILEINFO_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include "JP2KMarker.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+struct TPOCMarker;
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CJ2kImageInfo;
+class TJ2kStreamReader;
+class CJ2kComponentInfo;
+
+// CLASS DECLARATION
+
+/**
+* CJ2kTileInfo class used to collect tile related
+* information such as Tile Part Header, SOT marker,
+* List of components, and etc. It's also implement the
+* MJ2kPacketHeaderReader interface for reading the
+* packet header from PPT marker. It contains the data
+* to control where to resume the parsing of the bitstream.
+*
+* JP2KCodec.dll
+* @since 2.6
+*/
+class CJ2kTileInfo : public CBase, public MJ2kPacketHeaderReader
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CJ2kTileInfo* NewLC( CJ2kImageInfo& aImageInfo, TJ2kStreamReader& aReader );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CJ2kTileInfo();
+
+ public: // New functions
+
+ /**
+ * Initialize the components in the tile
+ * @since 2.6
+ */
+ void InitializeL();
+
+ /**
+ * Verify and append COD to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TCODMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendCOD( TCODMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append COC to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TCOCMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendCOCL( TCOCMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append QCD to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TQCDMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendQCD( TQCDMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append QCC to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TQCCMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendQCCL( TQCCMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append RGN to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TRGNMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendRGNL( TRGNMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append POC to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TPOCMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendPOCL( TPOCMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append COM to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TCOMMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendCOML( TCOMMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append PPT to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TPPTMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendPPTL( TPPTMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Verify and append PLT to the tile part header
+ * @since 2.6
+ * @param aMarker: pointer to TPLTMarker.
+ * @param aLength: the marker length.
+ */
+ void AppendPLTL( TPLTMarker *aMarker, TUint32 aLength );
+
+ /**
+ * Parsing the bitstream data based on progression order
+ * @since 2.6
+ * @param aBool: to check next SOT/EOC marker if true.
+ */
+ void ReadBitStreamL( TUint8 aBool = EFalse );
+
+ /**
+ * Get the color transformation
+ * @since 2.6
+ * @return TUint8: color transformation from tile COD or main COD.
+ */
+ TUint8 ColorTransformation() const;
+
+ /**
+ * Get the progression order
+ * @since 2.6
+ * @return TUint8: progression order from tile COD or main COD.
+ */
+ TUint8 ProgressionOrder() const;
+
+ /**
+ * Get the number of layers
+ * @since 2.6
+ * @return TUint16: number of layers from tile COD or main COD.
+ */
+ TUint16 NumOfLayers() const;
+
+ /**
+ * Get the number of resolution level
+ * @since 2.6
+ * @return TUint8: max number of resolution level from each component.
+ */
+ TUint8 NumOfLevels() const;
+
+ /**
+ * Get the minimum grid among the components in the tile
+ * @since 2.6
+ * @param aGrid: get the minimum grid size.
+ */
+ void GetMinGrid( TSize &aGrid ) const;
+
+ /**
+ * Set up to read the packet header from the PPT marker
+ * @since 2.6
+ */
+ void UsePPTL();
+
+ /**
+ * From MJ2kPacketHeaderReader
+ * Try to consume the EPH marker if there is one
+ * @since 2.6
+ * @return TUint8: true if end of buffer.
+ */
+ TUint8 ReadEPHMarker();
+
+ /**
+ * From MJ2kPacketHeaderReader
+ * Read a bit from the packet header stream
+ * @since 2.6
+ * @param aBit: get a bit from the packet header bitstream.
+ * @return TUint8: true if end of buffer.
+ */
+ TUint8 ReadBit( TUint8& aBit );
+
+ /**
+ * From MJ2kPacketHeaderReader
+ * Read some bits from the packet header stream
+ * @since 2.6
+ * @param aBit: get some bits from the packet header bitstream.
+ * @param aBitLen: how many bits to read.
+ * @return TUint8: true if end of buffer.
+ */
+ TUint8 ReadBits( TUint8& aBit, TUint8 aBitLen );
+
+ /**
+ * From MJ2kPacketHeaderReader
+ * Read some bits from the packet header stream
+ * @since 2.6
+ * @param aBit: get some bits from the packet header bitstream.
+ * @param aBitLen: how many bits to read.
+ * @return TUint8: true if end of buffer.
+ */
+ TUint8 ReadBits( TUint32& aBit, TUint8 aBitLen );
+
+ /**
+ * From MJ2kPacketHeaderReader
+ * Start reading from packet header stream
+ * @since 2.6
+ * @return TUint8: true if end of buffer.
+ */
+ TUint8 StartReadBit();
+
+ /**
+ * From MJ2kPacketHeaderReader
+ * Align the stream to the next byte boundary if necessary
+ * @since 2.6
+ */
+ void AlignReader();
+
+ /**
+ * Release unused markers in tile part header
+ * @since 2.6
+ */
+ void DoReleaseUnusedMarkers();
+
+ /**
+ * Set the tile length
+ * @since 2.6
+ * @param aLength: the tile length to set.
+ */
+ void SetTileLength( TUint32 aLength );
+
+ /**
+ * Get the tile length
+ * @since 2.6
+ * @return TUint32&: reference to the tile length.
+ */
+ TUint32& TileLength();
+
+ /**
+ * Get the tile canvas
+ * @since 2.6
+ * @return TRect&: reference to the canvas of the tile.
+ */
+ const TRect& TileCanvas() const;
+
+ /**
+ * Get the number of components
+ * @since 2.6
+ * @return TUint16: the number of components.
+ */
+ TUint16 NumOfComponents() const;
+
+ /**
+ * Get the end of layer to process
+ * @since 2.6
+ * @return TUint16: the last layer to process.
+ */
+ TUint16 NumOfLayersPOC() const;
+
+ /**
+ * Get the end of level to process
+ * @since 2.6
+ * @return TUint8: the last level to process.
+ */
+ TUint8 NumOfLevelsPOC() const;
+
+ /**
+ * Get the component at specific location
+ * @since 2.6
+ * @param aIndex: component index.
+ * @return CJ2kComponentInfo&: a specific component.
+ */
+ const CJ2kComponentInfo& ComponentAt( TUint16 aIndex ) const;
+
+ /**
+ * Get the last layer processed
+ * @since 2.6
+ * @return TUint16: the last layer processed.
+ */
+ TUint16 LastLayerProcessed() const;
+
+ /**
+ * Get the last resolution level processed
+ * @since 2.6
+ * @return TUint8: the last resolution level processed.
+ */
+ TUint8 LastLevelProcessed() const;
+
+ /**
+ * Get the last component processed
+ * @since 2.6
+ * @return TUint16: the last component processed.
+ */
+ TUint16 LastComponentProcessed() const;
+
+ /**
+ * Get the last position processed in vertical direction
+ * @since 2.6
+ * @return TInt: the last vertical position processed.
+ */
+ TInt LastN1Processed() const;
+
+ /**
+ * Get the last position processed in horizontal direction
+ * @since 2.6
+ * @return TInt: the last horizontal position processed.
+ */
+ TInt LastN2Processed() const;
+
+ /**
+ * Increment the last layer processed
+ * @since 2.6
+ */
+ void IncrementLastLayerProcessed();
+
+ /**
+ * Reset the last layer processed to 0
+ * @since 2.6
+ */
+ void ResetLastLayerProcessed();
+
+ /**
+ *
+ * @since 2.6Get the reference to the image info
+ * @return CJ2kImageInfo&: a reference to CJ2kImageInfo object.
+ */
+ const CJ2kImageInfo& ImageInfo() const;
+
+ /**
+ * Get the reference to the stream reader
+ * @since 2.6
+ * @return TJ2kStreamReader&: a reference to TJ2kStreamReader object.
+ */
+ const TJ2kStreamReader& StreamReader() const;
+
+ /**
+ * Set the SOT marker
+ * @since 2.6
+ * @param aSotMarker: the TSotMarker to set.
+ */
+ void SetSotMarker( const TSotMarker &aSotMarker );
+
+ /**
+ * Get the SOT marker
+ * @since 2.6
+ * @return TSotMarker&: a reference to TSotMarker object.
+ */
+ const TSotMarker& SotMarker() const;
+
+ /**
+ * Get the Tile Part Header
+ * @since 2.6
+ * @return TTileMarker&: a reference to TTileMarker object.
+ */
+ const TTileMarker& TileMarker() const;
+
+ /**
+ * Set the SOT/EOC check indicator
+ * @since 2.6
+ * @param aCheckMarker: true if SOT/EOC need to be checked.
+ */
+ void SetCheckMarker( TUint8 aCheckMarker );
+
+ /**
+ * Get the packet header reader
+ * @since 2.6
+ * @return MJ2kPacketHeaderReader&: a reference to MJ2kPacketHeaderReader object.
+ */
+ MJ2kPacketHeaderReader& PacketHeaderReader();
+
+ /**
+ * Set the packet header reader
+ * @since 2.6
+ * @param aReader: set the packet header reader to aReader.
+ */
+ void SetPacketHeaderReader( MJ2kPacketHeaderReader* aReader );
+
+ /**
+ * Is this the first tile part
+ * @since 2.6
+ * @return TUint8: true if this is the first tile part.
+ */
+ TUint8 IsFirstTilePart() const;
+
+ /**
+ * Is packet header should be read from PPT marker
+ * @since 2.6
+ * @return TUint8: true if tile contains PPT.
+ */
+ TUint8 IsPPT() const;
+
+ /**
+ * Is POC marker should be used for progression order
+ * @since 2.6
+ * @return TUint8: true if tile contains POC.
+ */
+ TUint8 IsPOC() const;
+
+ /**
+ * Is this the last tile part
+ * @since 2.6
+ * @return TUint8: true if this is the last tile part.
+ */
+ TUint8 IsLastTilePart() const;
+
+ /**
+ * Is SOT/EOC marker should be checked during progression
+ * @since 2.6
+ * @return TUint8: true if SOT/EOC should be checked.
+ */
+ TUint8 IsCheckMarker() const;
+
+ /**
+ * Is RLCP/RPCL progression order used
+ * @since 2.6
+ * @return TUint8: true if RLCP/RPCL progression order used.
+ */
+ TUint8 IsSpeedup() const;
+
+ public: // Functions from base classes
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CJ2kTileInfo( CJ2kImageInfo& aImageInfo, TJ2kStreamReader& aReader );
+
+ /**
+ * Parse the bitstream with LRCP progression order
+ * @since 2.6
+ * @return TUint8: true if next SOT or EOC marker is found.
+ */
+ TUint8 LRCPProgressionL();
+
+ /**
+ * Parse the bitstream with RLCP progression order
+ * @since 2.6
+ * @return TUint8: true if next SOT or EOC marker is found.
+ */
+ TUint8 RLCPProgressionL();
+
+ /**
+ * Parse the bitstream with RPCL progression order
+ * @since 2.6
+ * @return TUint8: true if next SOT or EOC marker is found.
+ */
+ TUint8 RPCLProgressionL();
+
+ /**
+ * Parse the bitstream with PCRL progression order
+ * @since 2.6
+ * @return TUint8: true if next SOT or EOC marker is found.
+ */
+ TUint8 PCRLProgressionL();
+
+ /**
+ * Parse the bitstream with CPRL progression order
+ * @since 2.6
+ * @return TUint8: true if next SOT or EOC marker is found.
+ */
+ TUint8 CPRLProgressionL();
+
+ public: // Data
+
+ protected: // Data
+
+ // Progression order
+ enum TProgression
+ {
+ EProgression_L_R_C_P = 0,
+ EProgression_R_L_C_P = 1,
+ EProgression_R_P_C_L = 2,
+ EProgression_P_C_R_L = 3,
+ EProgression_C_P_R_L = 4
+ };
+
+ // Structure to hold the information on reading packet header
+ struct TPPTStream
+ {
+ TUint32 iPtr; // Current byte position in buffer
+ TUint32 iPtrEnd; // End of byte position in buffer
+ TUint8 iData; // Current data in 8 bits
+ TUint8 iPos; // Current bit position
+ TUint8 iNextPos; // Bit position of next byte
+ };
+
+ private: // Data
+
+ // SOT marker
+ TSotMarker iSot;
+
+ // Tile Part Header
+ TTileMarker iTileMarker;
+
+ // List of components
+ RPointerArray<CJ2kComponentInfo> iComponentList;
+
+ // Canvas of the tile
+ TRect iTileCanvas;
+
+ // Remaining tile length
+ TUint32 iTileLength;
+
+ // Last layer processed
+ TUint16 iLastLayer;
+
+ // Last component processed
+ TUint16 iLastComponent;
+
+ // Original starting component
+ TUint16 iLastComponentOrig;
+
+ // End of layer to process
+ TUint16 iNumOfLayersPOC;
+
+ // End of component to process
+ TUint16 iNumOfComponentsPOC;
+
+ // Last resolution level processed
+ TUint8 iLastLevel;
+
+ // Original starting resolution level
+ TUint8 iLastLevelOrig;
+
+ // End of resolution level to process
+ TUint8 iNumOfLevelsPOC;
+
+ // Last POC processed
+ TUint8 iLastPOC;
+
+ // To indicate not to load from iPOC
+ TUint8 iDoLoadPOC;
+
+ // To indicate whether to check SOT/EOC marker
+ TUint8 iCheckMarker;
+
+ // Pointer to the POC in Tile Part Header or Main Header
+ TPOCMarker *iPOC;
+
+ // Last position processed in vertical direction
+ TInt iLastN1;
+
+ // Last position processed in horizontal direction
+ TInt iLastN2;
+
+ // Reference to the image info
+ CJ2kImageInfo &iImageInfo;
+
+ // Reference to the stream reader (buffer provided by ICL framework)
+ TJ2kStreamReader &iReader;
+
+ // Control the reading of packet header
+ TPPTStream *iPpt;
+
+ // Pointed to PPT in Tile Part Header
+ HBufC8 *iPptBuffer;
+
+ // Packet header reader
+ MJ2kPacketHeaderReader *iPacketHeaderReader;
+
+ public: // Friend classes
+
+ protected: // Friend classes
+
+ private: // Friend classes
+
+ };
+
+// For inliners.
+#include "JP2KTileInfo.inl"
+
+#endif // __JP2KTILEINFO_H__