diff -r 000000000000 -r 469c91dae73b imagingmodules/jp2kcodec/Inc/JP2KImageInfo.h --- /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__ +