--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingmodules/jp2kcodec/Inc/JP2KConvert.h Thu Dec 17 09:22:31 2009 +0200
@@ -0,0 +1,312 @@
+/*
+* 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: JPEG2000 image encoder/decoder plugin class
+*
+*/
+
+
+#ifndef __JP2KCONVERT_H__
+#define __JP2KCONVERT_H__
+
+// INCLUDES
+#include <icl/imageplugin.h>
+#include <icl/imagedata.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class TJ2kInfo;
+class CJp2kReadCodec;
+
+// CLASS DECLARATION
+
+/**
+ * CJp2kDecoder JPEG2000 image decoder plugin class.
+ * Implement the ICL decoder plugin interface.
+ *
+ * JP2KCodec.dll
+ * @since 2.6
+ */
+class CJp2kDecoder : public CImageDecoderPlugin
+{
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CJp2kDecoder* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CJp2kDecoder();
+
+ public: // New functions
+
+ public: // Functions from base classes
+
+ /**
+ * From CImageDecoderPlugin
+ * @since 2.6
+ * @param aFrameNumber: Number of frame whose type is needed.
+ * @param aImageType: Return image type UID.
+ * @param aImageSubType: Returned image sub type UID.
+ */
+ void ImageType( TInt aFrameNumber, TUid& aImageType, TUid& aImageSubType ) const;
+
+ /**
+ * From CImageDecoderPlugin
+ * @since 2.6
+ */
+ TInt NumberOfImageComments() const;
+
+ /**
+ * From CImageDecoderPlugin
+ * @since 2.6
+ * @param aCommentNumber: Number of comment whose comment is needed.
+ */
+ HBufC* ImageCommentL( TInt aCommentNumber ) const;
+
+ /**
+ * From CImageDecoderPlugin
+ * @since 2.6
+ * @param aFrameNumber: Number of frame whose comment is needed.
+ */
+ TInt NumberOfFrameComments( TInt aFrameNumber ) const;
+
+ /**
+ * From CImageDecoderPlugin
+ * @since 2.6
+ * @param aFrameNumber: Number of frame whose comment is needed.
+ * @param aCommentNumber: Number of comment whose comment is needed.
+ */
+ HBufC* FrameCommentL( TInt aFrameNumber, TInt aCommentNumber ) const;
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ /**
+ * From CImageDecoderPlugin
+ */
+ CFrameInfoStrings* FrameInfoStringsL( RFs& aFs, TInt aFrameNumber );
+
+ /**
+ * From CImageDecoderPlugin
+ */
+ TInt FrameHeaderBlockSize( TInt aFrameNumber ) const;
+
+ /**
+ * From CImageDecoderPlugin
+ */
+ TInt FrameBlockSize( TInt aFrameNumber ) const;
+
+ /**
+ * From CImageDecoderPlugin
+ */
+ void DoConvert();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CJp2kDecoder();
+
+ /**
+ * Main state machine
+ * Verify and start parsing the JP2 file format
+ * or JP2 codestream.
+ * @since 2.6
+ */
+ void ReadFormatL();
+
+ /**
+ * Verify and process JP2 Signature box
+ * @since 2.6
+ */
+ void ReadSignatureBoxL();
+ /**
+ * Verify and process JP2 File Type box
+ * @since 2.6
+ */
+ void ReadFileTypeBoxL();
+
+ /**
+ * Verify and process JP2 Header box (superbox)
+ * @since 2.6
+ */
+ void ReadJp2HeaderBoxL();
+
+ /**
+ * Verify and process Image Header box (in JP2 Header box)
+ * @since 2.6
+ */
+ void ReadImageHeaderBoxL();
+
+ /**
+ * Verify and process Colour Specification box (in JP2 Header box)
+ * @since 2.6
+ * @param aBoxLength: the length of the Colour Specification box
+ */
+ void ReadColorSpecBoxL( const TUint32 aBoxLength );
+
+ /**
+ * Verify and process Bits Per Component box (in JP2 Header box)
+ * @since 2.6
+ * @param aBoxLength: the length of the Bits Per Component box
+ */
+ void ReadBitsPerCompBoxL( TUint32 aBoxLength );
+
+ /**
+ * Verify and process Resolution box (in JP2 Header box, which itself is superbox)
+ * @since 2.6
+ * @param aPtrLimit: the boundary of the data to be read
+ * @param aBoxLength: the length of the Resolution box
+ */
+ void ReadResolutionBoxL( const TUint8 *aPtrLimit, TUint32 aBoxLength );
+
+ /**
+ * Verify and process Default Display Resolution box (in Resolution box)
+ * @since 2.6
+ */
+ void ReadDisplayResBoxL();
+
+ /**
+ * Verify and process Capture Resolution box (in Resolution box)
+ * @since 2.6
+ * @param aBoxLength: the length of the Capture Resolution box
+ */
+ void ReadCaptureResBoxL( TUint32 aBoxLength );
+
+ /**
+ * Verify and process Palette box (in JP2 Header box)
+ * @since 2.6
+ */
+ void ReadPaletteBoxL();
+
+ /**
+ * Verify and process Component Mapping box (in JP2 Header box)
+ * @since 2.6
+ * @param aBoxLength: the length of the Component Mapping box
+ */
+ void ReadComponentMapBoxL( TUint32 aBoxLength );
+
+ /**
+ * Verify and process Channel Definition box (in JP2 Header box)
+ * @since 2.6
+ * @param aBoxLength: the length of the Channel Definition box
+ */
+ void ReadChannelDefBoxL( TUint32 aBoxLength );
+
+ /**
+ * Verify and process IPR box
+ * @since 2.6
+ */
+ void ReadIPRBoxL();
+
+ /**
+ * Verify and process XML box
+ * @since 2.6
+ */
+ void ReadXMLBoxL();
+
+ /**
+ * Verify and process UUID box
+ * @since 2.6
+ */
+ void ReadUUIDBoxL();
+
+ /**
+ * Verify and process UUID Info box (superbox)
+ * @since 2.6
+ */
+ void ReadUUIDInfoBoxL();
+
+ /**
+ * Ignore the content and advance the iterator to the next box
+ * @since 2.6
+ */
+ void IgnoreBoxL();
+
+ /**
+ * Update the current state according to the box type
+ * @since 2.6
+ */
+ void UpdateStateFromBoxTypeL();
+
+ /**
+ * Read frame headers and instantiate decoder for application.
+ * @since 2.6
+ */
+ void ScanDataL();
+
+ public: // Data
+
+ // State machine represent the state when parsing the JP2 file format.
+ enum TDecoderState
+ {
+ EStateInUnknown,
+ EStateInSignatureBox,
+ EStateInFileTypeBox,
+ EStateInJP2SuperBox,
+ EStateInIPRBox,
+ EStateInXMLBox,
+ EStateInUUIDBox,
+ EStateInUUIDInfoBox,
+ EStateInCodestreamBox
+ };
+
+ protected: // Data
+
+ private: // Data
+
+ // JP2 file format information
+ TJ2kInfo iJ2kInfo;
+
+ // Descriptor of the buffer
+ TPtrC8 iBufferDes;
+
+ // Length of box read
+ TUint32 iBoxLength;
+
+ // Type of box read
+ TUint32 iBoxType;
+
+ // Position of last ReadDataL() used
+ TUint32 iLastRead;
+
+ // Enter the method from ICL framework
+ TBool iCallFromFramework;
+
+ // Pointer into the data represented by iBufferDes
+ const TUint8 *iPtr;
+
+ // Current state of the parsing of file or data
+ TDecoderState iState;
+
+ public: // Friend classes
+
+ protected: // Friend classes
+
+ private: // Friend classes
+};
+
+#endif // __JP2KCONVERT_H__