diff -r 000000000000 -r 469c91dae73b imagingmodules/jp2kcodec/Inc/JP2KCodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagingmodules/jp2kcodec/Inc/JP2KCodec.h Thu Dec 17 09:22:31 2009 +0200 @@ -0,0 +1,427 @@ +/* +* 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: CJp2kReadCodec class implements the ICL read codec interface. +* +*/ + + +#ifndef __JP2KCODEC_H__ +#define __JP2KCODEC_H__ + +// INCLUDES +#include +#include +#include + +// CONSTANTS + +// Delimiting marker segments +const TUint16 KSOC = 0xFF4F; // Start of codestream +const TUint16 KSOT = 0xFF90; // Start of tile-part +const TUint16 KSOD = 0xFF93; // Start of data +const TUint16 KEOC = 0xFFD9; // End of codestream + +// Fixed information marker segments +const TUint16 KSIZ = 0xFF51; // Image and tile size + +// Functional marker segments +const TUint16 KCOD = 0xFF52; // Coding style default +const TUint16 KCOC = 0xFF53; // Coding style component +const TUint16 KRGN = 0xFF5E; // Region of interest +const TUint16 KQCD = 0xFF5C; // Quantization default +const TUint16 KQCC = 0xFF5D; // Quantization component +const TUint16 KPOC = 0xFF5F; // Progression order default + +// Pointer marker segments +const TUint16 KTLM = 0xFF55; // Tile-part lengths, main header +const TUint16 KPLM = 0xFF57; // Packet length, main header +const TUint16 KPLT = 0xFF58; // Packet length, tile-part header +const TUint16 KPPM = 0xFF60; // Packed packet headers, main header +const TUint16 KPPT = 0xFF61; // Packed packet headers, tile-part header + +// Informational marker segments +const TUint16 KCME = 0xFF64; // Comment and extension +const TUint16 KCRG = 0xFF63; // Component registration + +// Packet information +const TUint16 KSOP = 0xFF91; // Start of packet +const TUint16 KEPH = 0xFF92; // End of packet header +const TUint16 KSOP_LEN = 0x04; // Length of the SOP + +// Extensions marker segments +const TUint16 KEXTS = 0xFF30; // Start of extensions +const TUint16 KEXTE = 0xFF3F; // End Of extensions + +const TUint16 KMarkerSize = 2; // Size of a marker - 2 bytes +const TUint16 KMarkerLength = 2; // Size of a length - 2 bytes +const TUint16 KMarkerMinLength = KMarkerSize + KMarkerLength; + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class TJ2kInfo; +class CJ2kImageInfo; +class TJ2kStreamReader; +class CJ2kEntropyDecoder; +class CJ2kImageWriter; +class CJ2kSynthesis; +class CJ2kTileInfo; + +// CLASS DECLARATION + +/** + * CJp2kReadCodec JPEG2000 image read codec class. + * Implement the ICL read codec interface. + * + * JP2KCodec.dll + * @since 2.6 + */ +class CJp2kReadCodec : public CImageProcessorReadCodec //lint !e768 Will be referenced by framework. +{ + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CJp2kReadCodec* NewL( const TJ2kInfo& aJ2kInfo ); + + /** + * Destructor. + */ + virtual ~CJp2kReadCodec(); + + public: // New functions + + /** + * Decoding the current tile-part. + * @since 2.6 + * @return TFrameState: frame state after decoding the current tile-part. + */ + TFrameState DecodeTileL(); + + /** + * Is codec in the decoding state. + * @since 2.6 + * @return TBool: false if codec in the parsing state. + */ + TBool IsDecodeTile() const; + + public: // Functions from base classes + + /** + * From CImageReadCodec + * @since 2.6 + * @param aFrameInfo: Frame information. + * @param aFrameData: Frame data. + */ + void InitFrameHeader( TFrameInfo& aFrameInfo, CFrameImageData& aFrameData ); + + /** + * From CImageReadCodec + * @since 2.6 + * @param aData: Data to be processed. + */ + TFrameState ProcessFrameHeaderL( TBufPtr8& aData ); + + /** + * From CImageReadCodec + * @since 2.6 + * @param aFrameInfo: Frame information. + * @param aFrameData: Frame data. + * @param aDisableErrorDiffusion: Use error diffusion or not. + * @param aDestination: Destination bitmap. + * @param aDestinationMask: Destination bitmap mask. + */ + void InitFrameL( TFrameInfo& aFrameInfo, CFrameImageData& aFrameData, + TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, + CFbsBitmap *aDestinationMask ); + + /** + * From CImageReadCodec + * @since 2.6 + * @param aSrc: Source data. + */ + TFrameState ProcessFrameL( TBufPtr8& aSrc ); + + /** + * From CImageReadCodec + * @since 2.6 + * @param aPosition: New position in data. + * @param aLength: Number of bytes to read. + */ + void GetNewDataPosition(TInt& aPosition, TInt& aLength); + + protected: // New functions + + protected: // Functions from base classes + + private: + + /** + * C++ default constructor. + */ + CJp2kReadCodec( const TJ2kInfo& aJ2kInfo ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Verify and process Start of Codestream (SOC marker) + * @since 2.6 + */ + TFrameState ReadSOCL(); + + /** + * Verify and process Image and Tile Size (SIZ marker) + * @since 2.6 + */ + TFrameState ReadSIZL(); + + /** + * Verify and process Coding Style Default (COD marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadCODL( TBool aMain = ETrue ); + + /** + * Verify and process Coding Style Component (COC marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadCOCL( TBool aMain = ETrue ); + + /** + * Verify and process Quantization Default (QCD marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadQCDL( TBool aMain = ETrue ); + + /** + * Verify and process Quantization Component (QCC marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadQCCL( TBool aMain = ETrue ); + + /** + * Verify and process Region of Interest (RGN marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadRGNL( TBool aMain = ETrue ); + + /** + * Verify and process Progression Order Change (POC marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadPOCL( TBool aMain = ETrue ); + + /** + * Verify and process Packed Packet Headers, Main Header (PPM marker) + * @since 2.6 + */ + TFrameState ReadPPML(); + + /** + * Verify and process Tile Part Lengths, Main Header (TLM marker) + * @since 2.6 + */ + TFrameState ReadTLML(); + + /** + * Verify and process Packet Length, Main Header (PLM marker) + * @since 2.6 + */ + TFrameState ReadPLML(); + + /** + * Verify and process Component Registration, Main Header (CRG marker) + * @since 2.6 + */ + TFrameState ReadCRGL(); + + /** + * Verify and process Comment (COM marker) + * @since 2.6 + * @param aMain: true for Main Header, false for Tile Part Header. + */ + TFrameState ReadCOML( TBool aMain = ETrue ); + + /** + * Verify and process Start of Tile Part (SOT marker) + * @since 2.6 + */ + TFrameState ReadSOTL(); + + /** + * Verify and process Start of Data (SOD marker) + * @since 2.6 + */ + TFrameState ReadSODL(); + + /** + * Verify and process BitStream Data + * @since 2.6 + */ + TFrameState ReadBitStreamL(); + + /** + * Verify and process Packed Packet Headers, Tile Part Header (PPT marker) + * @since 2.6 + */ + TFrameState ReadPPTL(); + + /** + * Verify and process Packet Length, Tile Part Header (PLT marker) + * @since 2.6 + */ + TFrameState ReadPLTL(); + + /** + * Ignore the content and advance the iterator to the next marker + * @since 2.6 + */ + TFrameState ReadSkipTileL(); + + /** + * Update the current state according to the marker type + * @since 2.6 + */ + TFrameState UpdateStateFromMarkerL(); + + /** + * Decode the tile and delete it after decoding + * @since 2.6 + * @param aTile: a reference to the tile to decode. + */ + void DecodeAndDeleteTileL( CJ2kTileInfo& aTile ); + + /** + * Convert metadata from file format to TImageDataBlock derived objects + * @since 2.6 + */ + void ConvertImageDataL(); + + public: // Data + + // State machine represent the state when parsing of the JP2 codestream. + enum TFrameHeaderState + { + EStateInSOC, + EStateInSIZ, + EStateInCOD, + EStateInCOC, + EStateInQCD, + EStateInQCC, + EStateInRGN, + EStateInPOC, + EStateInPPM, + EStateInTLM, + EStateInPLM, + EStateInCRG, + EStateInCOM, + EStateInSOT, + EStateInPPT, + EStateInPLT, + EStateInSOD, + EStateInBITSTREAM, + EStateInEOC, + EStateInSkipTile, + EStateInUnknown + }; + + protected: // Data + + private: // Data + + // Decoding style. + enum TDecoderStyle + { + ETileBasedDecoder, // Tile-based decoding + EBlockBasedDecoder, // Block-based wavelet + EUnknownDecoder // Use some logic to choose the style to use + }; + + // JP2 file format information + const TJ2kInfo& iJ2kInfo; + + // Frame information + TFrameInfo *iFrame; + + // Frame data, owned by framework + CFrameImageData *iFrameData; + + // Index of last tile processed + TUint16 iLastTileIndex; + + // Current state + TFrameHeaderState iFHState; + + // Indicate new tile to be processed + TUint8 iUseNewTile; + + // Indicate next tile to be processed + TUint8 iUseNextTile; + + // Tiles are in sequential order + TUint8 iSequential; + + // Reference to stream reader + TJ2kStreamReader iReader; + + // .jp2 image information + CJ2kImageInfo *iImageInfo; + + // To handle the underflow PPM + TPPMMarker *iPreviousPPM; + + // To handle the underflow COM + TCOMMarker *iPreviousCOM; + + // The entropy decoder + CJ2kEntropyDecoder *iEntropy; + + // The image write + CJ2kImageWriter *iImageWriter; + + // The synthesis + CJ2kSynthesis *iSynthesis; + + // The decoding mechanism used + TDecoderStyle iStyleUsed; + + // Indicate a progression bar is needed for single tile image + TBool iProgressBar; + + // Indicate the codec state + TBool iDecodeTile; + + public: // Friend classes + + protected: // Friend classes + + private: // Friend classes + }; + +#endif // __JP2KCODEC_H__ +