imagingmodules/jp2kcodec/Inc/JP2KImageInfo.h
changeset 0 469c91dae73b
child 4 3993b8f65362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingmodules/jp2kcodec/Inc/JP2KImageInfo.h	Thu Dec 17 09:22:31 2009 +0200
@@ -0,0 +1,463 @@
+/*
+* 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:  CJ2kImageInfo class used to collect image related
+*                information such as Main Header, SIZ marker and
+*                list of tiles.
+*
+*/
+
+
+#ifndef __JP2KIMAGEINFO_H__
+#define __JP2KIMAGEINFO_H__
+
+//  INCLUDES
+#include "JP2KMarker.h"
+#include "JP2KUtils.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CJ2kTileInfo;
+
+// CLASS DECLARATION
+/**
+ * CJ2kImageInfo class used to collect image related
+ * information such as Main Header, SIZ marker,
+ * List of tiles, and etc. It's also implement the
+ * MJ2kPacketHeaderReader interface for reading the
+ * packet header from PPM marker.
+ *
+ * JP2KCodec.dll
+ * @since 2.6
+ */
+class CJ2kImageInfo : public CBase, public MJ2kPacketHeaderReader
+{
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ default constructor.
+        */
+        CJ2kImageInfo();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CJ2kImageInfo();
+    
+    public: // New functions
+        
+        /**
+        * Verify and append COC to the main header
+        * @since 2.6
+        * @param aMarker: pointer to TCOCMarker.
+        */
+        void AppendCOCL( TCOCMarker *aMarker );
+
+        /**
+        * Verify and append QCC to the main header
+        * @since 2.6
+        * @param aMarker: pointer to TQCCMarker.
+        */
+        void AppendQCCL( TQCCMarker *aMarker );
+
+        /**
+        * Verify and append RGN to the main header
+        * @since 2.6
+        * @param aMarker: pointer to TRGNMarker.
+        */
+        void AppendRGNL( TRGNMarker *aMarker );
+
+        /**
+        * Verify and append POC to the main header
+        * @since 2.6
+        * @param aMarker: pointer to TPOCMarker.
+        */
+        void AppendPOCL( TPOCMarker *aMarker );
+
+        /**
+        * Verify and append CRG to the main header
+        * @since 2.6
+        * @param aMarker: pointer to TCRGMarker.
+        */
+        void AppendCRGL( TCRGMarker *aMarker );
+
+        /**
+        * Verify and append COM to the main header
+        * @since 2.6
+        * @param aMarker: pointer to TCOMMarker.
+        */
+        void AppendCOML( const TCOMMarker *aMarker );
+
+        /**
+        * Retrieve the right Coding Style Marker
+        * @since 2.6
+        * @param aCod: a reference to TCODMarker pointer.
+        * @param aCoc: a reference to TCOCMarker pointer.
+        * @param aTile: a reference to CJ2kTileInfo object.
+        * @param aComponentIndex: the index of component.
+        */
+        void GetCodingStyle( TCODMarker*& aCod, TCOCMarker*& aCoc,
+                             const CJ2kTileInfo& aTile, TUint16 aComponentIndex );
+
+        /**
+        * Retrieve the right Quantization Marker
+        * @since 2.6
+        * @param aQcd: a reference to TQCDMarker pointer.
+        * @param aQcc: a reference to TQCCMarker pointer.
+        * @param aTile: a reference to CJ2kTileInfo object.
+        * @param aComponentIndex: the index of component.
+        */
+        void GetQuantization( TQCDMarker*& aQcd, TQCCMarker*& aQcc,
+                              const CJ2kTileInfo& aTile, TUint16 aComponentIndex );
+
+        /**
+        * Retrieve the right Region of Interest Marker
+        * @since 2.6
+        * @param aRgn: a reference to TRGNMarker pointer.
+        * @param aTile: a reference to CJ2kTileInfo object.
+        * @param aComponentIndex: the index of component.
+        */
+        void GetRegion( TRGNMarker*& aRgn, const CJ2kTileInfo& aTile, TUint16 aComponentIndex ) const;
+
+        /**
+        * Retrieve the tile length field from TLM marker
+        * @since 2.6
+        * @param aSotMarker: a reference to TSotMarker.
+        */
+        void GetFromTLM( TSotMarker& aSotMarker ) const;
+
+        /**
+        * Set up to read the packet header from the PPM marker
+        * @since 2.6
+        * @param aTile: a reference to CJ2kTileInfo object.
+        */
+        void UsePPM( CJ2kTileInfo& aTile );
+
+        /**
+        * Re-arrange the PPM and PLM buffers
+        * @since 2.6
+        */
+        void DoCompactMainHeaderL();
+
+        /**
+        * Get total number of tiles in horizontal position
+        * @since 2.6
+        * @return TUint16: number of tiles in horizontal position.
+        */
+        TUint16 NumOfHorizTiles() const;
+
+        /**
+        * Get total number of tiles in vertical position
+        * @since 2.6
+        * @return TUint16: number of tiles in vertical position.
+        */
+        TUint16 NumOfVertTiles() const;
+
+        /**
+        * Get total number of components
+        * @since 2.6
+        * @return TUint16: number of components.
+        */
+        TUint16 NumOfComponents() const;
+
+        /**
+        * Get the bit depth of a component
+        * @since 2.6
+        * @param aIndex: the component index.
+        * @return TUint8: bit depth of a component.
+        */
+        TUint8 DepthOfComponent( TUint16 aIndex ) const;
+
+        /**
+        * Get the sign bit of a component
+        * @since 2.6
+        * @param aIndex: the component index.
+        * @return TUint8: sign bit of a component.
+        */
+        TUint8 SignOfComponent( TUint16 aIndex ) const;
+
+        /**
+        * Get the SIZ marker
+        * @since 2.6
+        * @return TSizMarker&: a reference to TSizMarker object.
+        */
+        const TSizMarker& SizMarker() const;
+
+        /**
+        * Get the Main Header marker
+        * @since 2.6
+        * @return TMainMarker&: a reference to TMainMarker object.
+        */
+        const TMainMarker& MainMarker() const;
+
+        /**
+        * Get the maximum block size
+        * @since 2.6
+        * @return TSize&: a reference to the maximum size.
+        */
+        const TSize& MaxBlockSize() const;
+
+        /**
+        * Get the cropped area
+        * @since 2.6
+        * @return TRect&: a reference to the cropped area.
+        */
+        const TRect& CropArea() const;
+        
+        /**
+        * Get the total number of tiles in the tile list
+        * @since 2.6
+        * @return TUint16: number of tiles in the tile list.
+        */
+        TUint16 TileCount() const;
+
+        /**
+        * Get the tile at specific location
+        * @since 2.6
+        * @param aIndex: the location.
+        * @return CJ2kTileInfo&: a reference to CJ2kTileInfo object.
+        */
+        const CJ2kTileInfo& TileAt( TUint16 aIndex ) const;
+
+        /**
+        * Append tile into the tile list
+        * @since 2.6
+        * @param aTile: the pointer to CJ2kTileInfo object.
+        */
+        void Append( CJ2kTileInfo *aTile );
+
+        /**
+        * Remove a tile at specific location
+        * @since 2.6
+        * @param aIndex: the location.
+        */
+        void Remove( TUint16 aIndex );
+
+        /**
+        * Get the mask of a tile at specific location
+        * @since 2.6
+        * @param aIndex: the location.
+        * @return TUint8: the mask of the tile.
+        */
+        TUint8 TileMaskAt( TUint16 aIndex ) const;
+
+        /**
+        * Set the mask of a tile at specific location
+        * @since 2.6
+        * @param aIndex: the location.
+        * @param aTileMask: the mask.
+        */
+        void SetTileMask( TUint16 aIndex, TUint8 aTileMask );
+
+        /**
+        * Set the resolution level to drop
+        * @since 2.6
+        * @param aDrop: the resolution level to drop.
+        */
+        void SetLevelDrop( TUint8 aDrop );
+
+        /**
+        * Set the extra resolution level to drop
+        * @since 2.6
+        * @param aDrop: the extra levels to drop.
+        */
+        void SetExtraLevelDrop( TUint8 aDrop );
+
+        /**
+        * Get the component to drop
+        * @since 2.6
+        * @return TUint8: the component to drop.
+        */
+        TUint8 ComponentDrop() const;
+
+        /**
+        * Get the resolution level to drop
+        * @since 2.6
+        * @return TUint8: the resolution level to drop.
+        */
+        TUint8 LevelDrop() const;
+
+        /**
+        * Get the extra resolution level to drop
+        * @since 2.6
+        * @return TUint8: the extra resolution level to drop.
+        */
+        TUint8 ExtraLevelDrop() const;
+
+        /**
+        * Get the crop
+        * @since 2.6
+        * @return TUint8: the crop flag.
+        */
+        TUint8 Crop() const;
+
+        /**
+        * Set the last tile part processed
+        * @since 2.6
+        * @param aLastTilePart: the last tile part processed.
+        */
+        void SetLastTilePartProcessed( TUint16 aLastTilePart );
+
+        /**
+        * Increment the counter for tracking the last tile part processed
+        * @since 2.6
+        */
+        void IncrementLastTilePartProcessed();
+
+        /**
+        * Is packet header should be read from PPM marker
+        * @since 2.6
+        * @return TUint8: true if PPM marker exists.
+        */
+        TUint8 IsPPM() const;
+
+        /**
+        * Reset packet header pointer to the end of the PPM marker
+        * @since 2.6
+        */
+        void ResetPPM();
+
+    public: // Functions from base classes
+
+        /**
+        * 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();
+               
+    protected:  // New functions
+        
+    protected:  // Functions from base classes
+        
+    private:
+
+    public:     // Data
+    
+    protected:  // Data
+        
+        // Structure to hold the information on reading packet header
+        struct TPPMStream
+            {
+            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
+
+        // SIZ marker
+        TSizMarker iSizMarker;           
+
+        // Main Header
+        TMainMarker iMainMarker;     
+        
+        // Current tile in progress
+        CJ2kTileInfo *iTile;                
+
+        // Current tile mask
+        TUint8 iTileMask;            
+    
+        // Max block size
+        TSize iMaxBlockSize;          
+
+        // Cropped area
+        TRect iCropArea;     
+        
+        // Component to drop
+        TUint8 iComponentDrop;         
+
+        // Resolution level to drop
+        TUint8 iLevelDrop;             
+
+        // Resolution drop  
+        TUint8 iExtraLevelDrop;
+
+        // Is cropped
+        TUint8 iCrop;                  
+
+        // Last tile part processed
+        TInt16 iLastTilePartProcessed; 
+
+        // Control the reading of packet header
+        TPPMStream *iPpm;               
+
+        // Pointer to PPM in Main Header
+        HBufC8 *iPpmBuffer;         
+
+    public:     // Friend classes
+      
+    protected:  // Friend classes
+        
+    private:    // Friend classes        
+    };
+
+// For inliners.
+#include "JP2KImageInfo.inl"
+
+#endif // __JP2KIMAGEINFO_H__
+