imagingmodules/jp2kcodec/Inc/JP2KFormat.h
changeset 0 469c91dae73b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingmodules/jp2kcodec/Inc/JP2KFormat.h	Thu Dec 17 09:22:31 2009 +0200
@@ -0,0 +1,295 @@
+/*
+* 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:  Collection of structs used to store and represent
+*                the metadata in the JP2 file format.
+*
+*/
+
+
+#ifndef __JP2KFORMAT_H__
+#define __JP2KFORMAT_H__
+
+//  INCLUDES
+#include <icl/imageprocessor.h>
+
+// CONSTANTS
+
+// BlockSizeInBytes returns this value.
+const TInt KJ2kInputBufferSize = 8192;
+
+// JPEG 2000 signature box information
+const TUint32 KJ2kSigBoxLength  = ( (TUint32) 0x0000000c );
+const TUint32 KJ2kSigBoxType    = ( (TUint32) 0x6a502020 );
+const TUint32 KJ2kSigBoxContent = ( (TUint32) 0x0d0a870a );
+
+// Length for both box length and type fields together
+const TUint32 KJ2kBoxTypeLength = ( (TUint32)8 );
+
+// JPEG 2000 signaturebox length + next box type and length fields
+const TInt KJ2kFileInformationSize = KJ2kSigBoxLength + KJ2kBoxTypeLength;
+
+// File type box
+const TUint32 KJ2kFileTypeBox      = ( (TUint32) 0x66747970 );
+const TUint32 KJ2kFileTypeBrand    = ( (TUint32) 0x6a703220 );
+const TUint32 KJ2kFileTypeMinV     = ( (TUint32) 0x00000000 );
+const TUint32 KJ2kFileTypeProfile0 = ( (TUint32) 0x4a325030 );
+const TUint32 KJ2kFileTypeProfile1 = ( (TUint32) 0x4a325031 );
+// Restrict the file type box's length to be 1024, this is more than enough 
+// and helps detect corrupted codestreams
+const TUint32 KJ2kFileTypeBoxMaxLength = ( (TUint32) 1024);
+
+// JP2 Header Box
+const TUint32 KJ2kJP2HeaderBoxType = ( (TUint32) 0x6a703268 );
+
+// Image Header Box(JP2 Header Box's sub-box) type and length in bytes
+const TUint32 KJ2kImageHeaderBoxType   = ( (TUint32) 0x69686472 );
+const TUint32 KJ2kImageHeaderBoxLength = ( (TUint32) 22 );
+const TUint8  KJ2kImageHeaderCompressionType = ( (TUint8)7 );
+
+// Bits Per Component Box(JP2 Header Box's sub-box) type and length
+const TUint32 KJ2kBitsPerCompBoxType  = ( (TUint32) 0x62706363 );
+const TUint8  KJ2kIsBPCBoxExist       = ( (TUint8) 0xff );
+
+// Colour Specification Box(JP2 Header Box's sub-box) type and length
+const TUint32 KJ2kColourSpecBoxType   = ( (TUint32) 0x636f6c72 );
+const TUint32 KJ2kColourSpecGrayScale = ( (TUint32) 17 );
+
+// Palette Box(JP2 Header Box's sub-box) type and length
+const TUint32 KJ2kPaletterBoxType     = ( (TUint32) 0x70636c72 );
+
+// Component Mapping Box(JP2 Header Box's sub-box) type and length
+const TUint32 KJ2kComponentMapBoxType = ( (TUint32) 0x636d6170 );
+
+// Channel Definition Box(JP2 Header Box's sub-box) type and length
+const TUint32 KJ2kChannelDefBoxType   = ( (TUint32) 0x63646566 );
+
+// Resolution Box(JP2 Header Box's sub-box) type and length
+const TUint32 KJ2kResolutionBoxType = ( (TUint32) 0x72657320 );
+const TUint32 KJ2kCaptureResBoxType = ( (TUint32) 0x72657363 );
+const TUint32 KJ2kDisplayResBoxType = ( (TUint32) 0x72657364 );
+const TUint32 KJ2kResSubBoxLength   = ( (TUint32)18 );
+
+// Contiguous Codestream Box type
+const TUint32 KJ2kCodestreamBoxType = ( (TUint32) 0x6a703263 );
+const TUint32 KJ2kIPRBoxType        = ( (TUint32) 0x6a703269 );
+const TUint32 KJ2kXMLBoxType        = ( (TUint32) 0x786d6c20 );
+const TUint32 KJ2kUUIDBoxType       = ( (TUint32) 0x75756964 );
+const TUint32 KJ2kUUIDInfoBoxType   = ( (TUint32) 0x75696e66 );
+const TUint32 KJ2kUUIDListBoxType   = ( (TUint32) 0x756c7374 );
+const TUint32 KJ2kUUIDUrlBoxType    = ( (TUint32) 0x75726c20 );
+
+// Reader Requirements Box
+const TUint32 KJ2kReaderReqBox = ( (TUint32) 0x72726571 );
+
+// JP2 Codestream only - SOC + SIZ marker
+const TUint32 KJ2kSOCType           = ( (TUint32) 0xff4fff51 );
+
+// Twip = 1/1440inch.  1/1440*0,0254 meters
+const TReal KJ2kTwipM = 0.000017638; //( (TReal)( 1 / 1440.0 ) * 0.0254 );
+
+// Maximum number of palette entries
+const TInt KMaxPaletteEntries = 1024;
+
+// Maximum number of components possible
+const TInt KMaxComponents = 16384;
+
+// Maximum bitdepth supported
+const TInt KMaxBitdepth = 32;
+
+
+// MACROS
+
+// DATA TYPES
+
+/**
+ * Collection of structs used to store and represent
+ * the metadata in the JP2 file format.
+ *
+ * JP2KCodec.dll
+ * @since 7.0
+ */
+struct TPalette
+    {
+    /**
+    * Destructor
+    * @since 7.0
+    */
+    ~TPalette();
+
+    // Bi list
+    RArray<TUint> iBList;    
+
+    // Cij matrix
+    RPointerArray<RArray<TUint> > iC2DArray; 
+    };
+
+struct TComponentMap
+    {
+    /**
+    * Constructor
+    * @since 7.0
+    * @param aCmp: the CMP field.
+    * @param aMtyp: the MTYP field.
+    * @param aPcol: the PCOL field.
+    */
+    TComponentMap( TUint16 aCmp, TUint8 aMtyp, TUint8 aPcol );
+
+    // CMP field
+    TUint16 iCmp;  
+
+    // MTYP field
+    TUint8  iMtyp; 
+
+    // PCOL field
+    TUint8  iPcol; 
+    };
+
+struct TChannelDefinition
+    {
+    /**
+    * Constructor
+    * @since 7.0
+    * @param aCn: the Cn field.
+    * @param aTyp: the Typ field.
+    * @param aAsoc: the Asoc field.
+    */
+    TChannelDefinition( TUint16 aCn, TUint16 aTyp, TUint16 aAsoc );
+
+    // Cn field
+    TUint16 iCn;
+    
+    // Typ field
+    TUint16 iTyp;  
+
+    // Asoc field
+    TUint16 iAsoc; 
+    };
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+ * TJ2kInfo class is used to gather and store the 
+ * JP2 file format information
+ *
+ * JP2KCodec.dll
+ * @since 2.6
+ */
+class TJ2kInfo
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        TJ2kInfo();         
+
+        /**
+        * Destructor.
+        */
+        ~TJ2kInfo();
+
+    public: // New functions
+        
+    public: // Functions from base classes
+       
+    protected:  // New functions
+        
+    protected:  // Functions from base classes
+
+    private:        
+
+    public:     // Data
+        
+        // Flags to indicate the existance of some parameters        
+        enum TOption
+            {
+            EIPR      =  0x01, // To indicate that IPR Box exists //lint !e769 will be referenced in next release.
+            EProfile0 =  0x02, // To indicate the JP2 is restricted to Profile 0
+            EProfile1 =  0x04, // To indicate the JP2 is restricted to Profile 1
+            EJP2file  =  0x08, // To indicate that JP2 file format exists
+            EJP2Header=  0x10, // To indicate that JP2 Header processed
+            EColorSpec=  0x20  // To indicate that Colour Spec Box exists
+            };
+    
+        // Image size
+        TSize iImageSize;        
+
+        // Number of components
+        TUint16 iNC;               
+
+        // Bits per component
+        TUint8 iBPC;              
+
+        // Bit vector of flags
+        TUint8 iOption;           
+
+        // Length of the first codestream box
+        TUint32 iCSBoxLength;      
+
+        // Colour spec
+        TUint32 iEnumCS;         
+        
+        // Start position of codestream in file
+        TUint32 iCSOffset;         
+
+        // Display resolution
+        TSize iImageSizeInTwips; 
+    
+        // Bits per component list
+        RArray<TUint> iBPCList;    
+
+        // ICC Profile
+        HBufC8 *iICCProfile; 
+
+        // Component Mapping list
+        RArray<TComponentMap> iCMPList;    
+
+        // Channel Definition list
+        RArray<TChannelDefinition> iCNList;    
+        
+        // Palette
+        TPalette iPalette;   
+
+        // Intellectual Property box
+        RPointerArray<HBufC8> iIPRList; 
+
+        // XML box
+        RPointerArray<HBufC8> iXMLList;
+
+        // UUID box
+        RPointerArray<HBufC8> iUUIDList;
+
+        // UUIDInfo List box
+        RPointerArray<HBufC8> iUUIDInfoListList;
+
+        // UUIDInfo Data Entry Url box
+        RPointerArray<HBufC8> iUUIDInfoUrlList;
+
+    protected:  // Data
+
+    private:    // Data
+
+    public:     // Friend classes
+  
+    protected:  // Friend classes
+      
+    private:    // Friend classes
+    };
+
+#endif // __JP2KFORMAT_H__
+