imagingmodules/jp2kcodec/Inc/JP2KConvert.h
changeset 0 469c91dae73b
--- /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__