imagingext_plat/extended_icl_jpeg_api/inc/IclExtJpegApi.h
changeset 0 469c91dae73b
child 11 e27d6f36a9e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingext_plat/extended_icl_jpeg_api/inc/IclExtJpegApi.h	Thu Dec 17 09:22:31 2009 +0200
@@ -0,0 +1,1015 @@
+/*
+* Copyright (c) 2006 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:  Definition of CVisualFrame, CExtJpegDecoder and CExtJpegEncoder
+*
+*/
+
+#ifndef _ICLEXTJPEGAPI_
+#define _ICLEXTJPEGAPI_
+
+#include "ImageConversion.h"
+#include <icl/Icl_UIDS.hrh>
+
+#include "ICLExifImageFrame.h"
+const TInt KMaxNumberOfPlanes = KMaxPlanesInFrame;
+const TUid KUidExtFormatJpeg = { 0 };
+const TUid KUidExtIclApiSupport = { 0 };
+const TInt KExtensionUID = 0x01010101;
+
+// FORWARD DECLARATIONS
+class CVisualFrameImpl;
+
+// CLASS DECLARATION
+
+/**
+* CVisualFrame
+* @lib IclExtJpegApi.lib
+* @since 3.2
+*/
+class CVisualFrame : public CBase
+    {
+    public:
+
+        // TFrameLayout contains the scan line lengths and offsets for each component in planar YUV case
+        class TFrameLayout
+            {
+            public:
+                TInt iNumberOfPlanes;
+                TInt iScanLineLength[KMaxNumberOfPlanes];
+                TInt iOffset[KMaxNumberOfPlanes];
+                TInt iLength[KMaxNumberOfPlanes];
+                TInt iMaxLength[KMaxNumberOfPlanes];                
+            };
+
+        enum TDataContainer
+            {
+            EInChunk,
+            EInDescriptor
+            };
+            
+        enum TDataFormat
+            {
+            /* Copied from CCamera::TFormat: */
+            
+            /** 8 bit greyscale values, 0=black, 255=white. */
+            EFormatMonochrome            = 0x0001,//+
+            /** Packed RGB triplets, 4 bits per pixel with red in the least significant bits
+            and the 4 most significant bits unused. */
+            EFormat16bitRGB444            = 0x0002,//+
+            /** Packed RGB triplets, 5 bits per pixel for red and blue and 6 bits for green,
+            with red in the least significant bits. */
+            EFormat16BitRGB565            = 0x0004,//+
+            /** Packed RGB triplets, 8 bits per pixel with red in the least significant bits
+            and the 8 most significant bits unused. */
+            EFormat32BitRGB888            = 0x0008,//+
+            /** JFIF JPEG. */
+            EFormatJpeg                    = 0x0010,
+            /** EXIF JPEG */
+            EFormatExif                    = 0x0020,
+            /** CFbsBitmap object with display mode EColor4K. */
+            EFormatFbsBitmapColor4K        = 0x0040,
+            /** CFbsBitmap object with display mode EColor64K. */
+            EFormatFbsBitmapColor64K    = 0x0080,
+            /** CFbsBitmap object with display mode EColor16M. */
+            EFormatFbsBitmapColor16M    = 0x0100,
+            /** Implementation dependent. */
+            EFormatUserDefined            = 0x0200,
+            /** 4:2:0 format, 8 bits per sample, Y00Y01Y10Y11UV. */
+            EFormatYUV420Interleaved    = 0x0400,//+
+            /** 4:2:0 format, 8 bits per sample, Y00Y01Y02Y03...U0...V0... */
+            EFormatYUV420Planar            = 0x0800,//+
+            /** 4:2:2 format, 8 bits per sample, UY0VY1. */
+            EFormatYUV422                = 0x1000,//+
+            /** 4:2:2 format, 8 bits per sample, Y1VY0U. */
+            EFormatYUV422Reversed        = 0x2000,//+
+            /** 4:4:4 format, 8 bits per sample, Y00U00V00 Y01U01V01... */
+            EFormatYUV444                = 0x4000,//+
+            /** 4:2:0 format, 8 bits per sample, Y00Y01Y02Y03...U0V0... */
+            EFormatYUV420SemiPlanar        = 0x8000,//+
+
+            /* Other formats: */
+            
+            /** 4:2:2 format, 8 bits per sample, Y0Y1UV. */
+            EFormatExtYUV422Interleaved = 0x00100000,
+            /** 4:2:2 format, 8 bits per sample, Y0Y1Y2...U0U1...V0V1. */
+            EFormatExtYUV422Planar      = 0x00200000,
+            /** 4:4:4 format, 8 bits per sample, Y0U0V0Y1U1V1. */
+            EFormatExtYUV444Planar = 0x00400000,
+            /** DCT coefficients */
+            EFormatExtDctCoeff = 0x00800000,            
+                        
+            };
+    
+    public: // New functions
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        * @since 3.2
+        * @param aBuffer        A descriptor reference to buffer containing the image data.
+        * @param aDimension     The dimensions of the corresponding image data.
+        * @param aFrameFormat	The frame format of the corresponding image data.
+        * @return CVisualFrame* A pointer to frame object.
+        */
+        IMPORT_C static CVisualFrame* NewL( 
+                                    TDes8& aBuffer, 
+                                    const TSize& aDimension,
+                                    TInt aFrameFormat );
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        * @since 3.2
+        * @param aChunk         An RChunk reference to buffer containing the image data.
+        * @param aSize          The amount of image data in bytes.
+        * @param amaxSize       The maximum size of the memory reserved in the chunk.
+        * @param aDataOffset    The offset value specifying the location of the image 
+        *                       data in the chunk.
+        * @param aDimension     The dimensions of the corresponding image data.
+        * @param aFrameFormat   The frame format of the corresponding image data.
+        * @return CVisualFrame* A pointer to frame object.
+        */
+        IMPORT_C static CVisualFrame* NewL( 
+                                    RChunk& aChunk, 
+                                    TInt aSize,
+                                    TInt aMaxSize, 
+                                    TInt aDataOffset,
+                                    const TSize& aDimension, 
+                                    TInt aFrameFormat );
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        * @since 3.2
+        * @param aBuffer        A descriptor reference to buffer containing the image data.
+        * @param aDimension     The dimensions of the corresponding image data.
+        * @param aFrameLayout   The layout of the image color components.
+        * @return CVisualFrame* A pointer to frame object.
+        */
+        IMPORT_C static CVisualFrame* NewL( 
+                                    TDes8& aBuffer, 
+                                    const TSize& aDimension, 
+                                    TInt aFrameFormat, 
+                                    const TFrameLayout& aFrameLayout ); 
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        * @since 3.2
+        * @param aChunk         An RChunk reference to buffer containing the image data.
+        * @param aSize          The amount of image data in bytes.
+        * @param aMaxSize       The maximum size of the memory reserved in the chunk for 
+        *                       the image data.
+        * @param aDimension     The dimensions of the corresponding image data.
+        * @param aFrameFormat   The frame format of the corresponding image data.
+        * @param aFrameLayout   The layout of the image color components. TFrameLayout 
+        * 						contains the scan line lengths and offsets for each component 
+        *						in planar YUV case
+        * @return CVisualFrame* A pointer to frame object.
+        */
+        IMPORT_C static CVisualFrame* NewL( 
+                                    RChunk& aChunk, 
+                                    TInt aSize, 
+                                    TInt aMaxSize,
+                                    const TSize& aDimension, 
+                                    TInt aFrameFormat, 
+                                    const TFrameLayout& aFrameLayout );        
+       
+       
+        /**
+        * Returns a constant reference to the chunk containing 
+        * the image data, if exists.
+        * @since 3.2
+        * @return RChunk
+        */
+        IMPORT_C const RChunk& DataChunkL() const;
+        
+        /**
+        * Returns a descriptor pointer to the image data location, if exists
+        * @since 3.2
+        * @return TPtr8
+        */        
+        IMPORT_C TPtr8 DataPtrL() const;
+
+        /**
+        * Returns the dimensions of the image.
+        * @since 3.2
+        * @return TSize
+        */        
+        IMPORT_C TSize Dimension() const;
+
+        /**
+        * Return the image data format.
+        * @since 3.2
+        * @return TInt
+        */        
+        IMPORT_C TInt FrameFormat() const;
+        
+        /**
+        * Returns the offset of the image data for non-planar, 
+        * single-component or compressed images. 
+        * @since 3.2
+        * @return TInt
+        */        
+        IMPORT_C TInt DataOffset() const;
+
+        /**
+        * Returns the amount of stored image data in bytes.
+        * @since 3.2
+        * @return TInt
+        */        
+        IMPORT_C TInt Size() const;
+
+        /**
+        * Sets the amount of image data to the given value. 
+        * Should be called when the image data amount is modified explicitly.
+        * @since 3.2
+        * @return void
+        */
+        IMPORT_C void SetSizeL( TInt aSize );
+
+        /**
+        * Returns the maximum size of the memory space reserved for image data
+        * @since 3.2
+        * @return TInt
+        */
+        IMPORT_C TInt MaxSize() const;
+
+        /**
+        * Returns the storage type of the image data.
+        * @since 3.2
+        * @return TDataContainer
+        */        
+        IMPORT_C TDataContainer DataContainer() const;
+
+        /**
+        * Returns the layout of the image data for planar compressed images.
+        * @since 3.2
+        * @return TFrameLayout
+        */        
+        IMPORT_C const TFrameLayout& FrameLayout() const;    
+
+        /**
+        * Destructor
+        */
+        IMPORT_C virtual ~CVisualFrame();
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        */        
+        IMPORT_C static CVisualFrame* NewL( const CImageFrame* aImageFrame );
+
+        /**
+        * Get image frame
+        * @since 3.2
+        * @return CImageFrame
+        */
+        IMPORT_C CImageFrame* GetImageFrameL();
+       
+        
+    private:
+    
+        CVisualFrameImpl* iVisualFrameImpl;
+
+    };
+    
+
+// CLASS DECLARATION
+
+/**
+* CExtJpegDecoder
+* @lib IclExtJpegApi.lib
+* @since 3.2
+*/
+class CExtJpegDecoder : public CJPEGImageFrameDecoder
+    {
+    public:
+
+        enum TDecoderCapability
+            {
+            ECapNone = 0x0000,
+            ECapCropping = 0x0001,
+            ECapStreaming = 0x0002,
+            ECapRotation = 0x0004,
+            ECapFlipping = 0x0008,
+            ECapMirroring = 0x0010,
+            ECapDctDecoding = 0x0020,
+            ECapExifData = 0x0040
+            };
+            
+        enum TDecoderOperations
+            {
+            EEnd = 0x00010000,
+            ESupportedFormats = 0x00020000,
+            ECapabilities = 0x00040000,
+            EReadyForAsync = 0x00080000,
+            EConvert = 0x00100000,
+            EContinueConvert = 0x00200000
+            };            
+            
+        enum TDecoderType
+            {
+            ESwImplementation = 0,
+            EHwImplementation
+            };
+            
+    public:
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        * @since 3.2
+        */
+        IMPORT_C static CExtJpegDecoder* NewL();
+
+        
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceFilename    The name of the Jpeg file to decode.
+        * @param aMIMEType          The Jpeg MIME type for matching the decoder plugin.
+        * @param aOptions           Decoder options defined in ICL.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */
+        IMPORT_C static CExtJpegDecoder* FileNewL( 
+                                    RFs& aFs, 
+                                    const TDesC& aSourceFilename, 
+                                    const TDesC8& aMIMEType, 
+                                    const TOptions aOptions = EOptionNone );
+
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceFilename    The name of the Jpeg file to decode.
+        * @param aOptions           Decoder options defined in ICL.
+        * @param aImageType         The Jpeg image type.    
+        * @param aImageSubType      The Jpeg image subtype (Null UID).  
+        * @param aDecoderUid        The decoder plugin UID.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */      
+        IMPORT_C static CExtJpegDecoder* FileNewL( 
+                                    RFs& aFs, 
+                                    const TDesC& aSourceFilename, 
+                                    const TOptions aOptions = EOptionNone, 
+                                    const TUid aImageType = KNullUid, 
+                                    const TUid aImageSubType = KNullUid, 
+                                    const TUid aDecoderUid = KNullUid );
+
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceData        The descriptor reference for the Jpeg image data to decode.
+        * @param aMIMEType          The Jpeg MIME type for matching the decoder plugin.
+        * @param aOptions           Decoder options defined in ICL.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */      
+        IMPORT_C static CExtJpegDecoder* DataNewL( 
+                                    RFs& aFs,
+                                    const TDesC8& aSourceData,
+                                    const TDesC8& aMIMEType,
+                                    const TOptions aOptions = EOptionNone );
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceData        The descriptor reference for the Jpeg image data to decode.
+        * @param aOptions           Decoder options defined in ICL.
+        * @param aImageType         The Jpeg image type.
+        * @param aImageSubType      The Jpeg image subtype (Null UID).
+        * @param aDecoderUid        The decoder plugin UID.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */        
+        IMPORT_C static CExtJpegDecoder* DataNewL( 
+                                    RFs& aFs, 
+                                    const TDesC8& aSourceData,
+                                    const TOptions aOptions = EOptionNone,
+                                    const TUid aImageType  = KNullUid,
+                                    const TUid aImageSubType = KNullUid,
+                                    const TUid aDecoderUid = KNullUid );
+
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aFs                A reference to a file server session to use.    
+        * @param aSourceData        Pointer to the visual frame structure keeping 
+        *                           the Jpeg image data to decode.
+        * @param aMIMEType          The Jpeg MIME type for matching the decoder plugin.
+        * @param aOptions           Decoder options defined in ICL.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */
+        IMPORT_C static CExtJpegDecoder* DataNewL( 
+                                    RFs& aFs, 
+                                    const CVisualFrame* aSourceData,
+                                    const TDesC8& aMIMEType,
+                                    const TOptions aOptions = EOptionNone );
+
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aFs                A reference to a file server session to use.    
+        * @param aSourceData        Pointer to the visual frame structure keeping 
+        *                           the Jpeg image data to decode.  
+        * @param aOptions           Decoder options defined in ICL.
+        * @param aImageType         The Jpeg image type.
+        * @param aImageSubType      The Jpeg image subtype (Null UID).
+        * @param aDecoderUid        The decoder plugin UID.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */        
+        IMPORT_C static CExtJpegDecoder* DataNewL( 
+                                    RFs& aFs,
+                                    const CVisualFrame* aSourceData,
+                                    const TOptions aOptions = EOptionNone,
+                                    const TUid aImageType  = KNullUid,
+                                    const TUid aImageSubType = KNullUid,
+                                    const TUid aDecoderUid = KNullUid );
+
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CExtJpegDecoder();
+    
+        /**
+        * Enables the use of cropping feature and specifies the cropping region. 
+        * @since 3.2
+        * @param aCropRect  The rectangular cropping region that will be decoded.
+        * @return void
+        */
+        IMPORT_C void SetCroppingL( TRect aCropRect );
+
+        /**
+        * Enables the use of streaming feature and retrieves the macroblock 
+        * dimensions in the Jpeg data.
+        * @since 3.2
+        * @param aMacroBlockSize    The macroblock dimensions in the 
+        *                           Jpeg image that is set by the decoder
+        * @return void
+        */
+        IMPORT_C void SetStreamingL( TSize& aMacroBlockSize );
+
+        /**
+        * Enables the use of rotation feature and specifies the rotating degree. 
+        * @since 3.2
+        * @param aDegree    The rotation degree. Can take any values between 1 and 359.
+        * @return void
+        */
+        IMPORT_C void SetRotationL( TInt aDegree );
+
+        /**
+        * Enables the use of flipping feature.
+        * @since 3.2
+        * @return void
+        */
+        IMPORT_C void SetFlippingL();
+
+        /**
+        * Enables the use of mirroring feature.
+        * @since 3.2
+        * @return void
+        */
+        IMPORT_C void SetMirroringL();
+        
+        /**
+        * SEnables the use of DCT decoding feature.
+        * @since 3.2
+        * @return void
+        */        
+        IMPORT_C void SetDctDecodingL();
+
+        /**
+        * Asynchronous function for initiating the decoding
+        * @since 3.2
+        * @param aRequestStatus         The pointer to the status of the operation 
+        *                               that is set by the decoder after it is completed.
+        *                               After a complete successful operation, the status 
+        *                               is KErrNone.
+        * @param aDestinationFrame      Pointer to the visual frame structure that is keeping 
+        *                               the destination image data. The client should do the 
+        *                               proper allocation of the destination location.
+        * @param aNoOfDecodedMBlocks    Reference to the number of decoded macroblocks that is 
+        *                               set by the decoder after the decoding is completed.
+        * @param aFrameNumber           The frame index in the Jpeg image.
+        * @return void
+        */
+        IMPORT_C void ConvertL( 
+                        TRequestStatus* aRequestStatus, 
+                        const CVisualFrame* aDestinationFrame, 
+                        TInt& aNoOfDecodedMBlocks,
+                        TInt aFrameNumber = 0 );
+
+        /**
+        * Asynchronous function for initiating one of the iterations of streamed decoding.
+        * @since 3.2
+        * @param aRequestStatus         The pointer to the status of the operation 
+        *                               that is set by the decoder after it is completed.
+        *                               After a complete successful operation, the status 
+        *                               is KErrNone.
+        * @param aDestinationFrame      Pointer to the visual frame structure that is keeping 
+        *                               the destination image data. The client should do the 
+        *                               proper allocation of the destination location.
+        * @param aNoOfDecodedMBlocks    Reference to the number of decoded macroblocks that is 
+        *                               set by the decoder after the decoding is completed.
+        * @param aFrameNumber           The frame index in the Jpeg image.
+        * @return void
+        */
+        IMPORT_C void ContinueConvertL( 
+                        TRequestStatus* aRequestStatus, 
+                        const CVisualFrame* aDestinationFrame, 
+                        TInt& aNoOfDecodedMBlocks,
+                        TInt aFrameNumber = 0 );
+
+        /**
+        * Returns the destination (uncompressed) data formats that are supported by the decoder
+        * @since 3.2
+        * @return TInt  The supported destination (uncompressed) data formats. 
+        *               The value is a combination of the flags defined in 
+        *               CVisualFrame::TDataFormat.
+        */
+        IMPORT_C TInt SupportedFormatsL();
+
+        /**
+        * Returns the Extended API features (capabilities) that are supported by the decoder.
+        * @since 3.2
+        * @return TInt  The supported Extended API features. 
+        *               The value is a combination of the flags defined in TDecoderCapabilities.
+        */
+        IMPORT_C TInt CapabilitiesL();
+
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aDecoderType       Decoder implementation type: HW or SW.  
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceFilename    The name of the Jpeg file to decode.
+        * @param aOptions           Decoder options defined in ICL.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */        
+        IMPORT_C static CExtJpegDecoder* FileNewL( 
+                                    const TDecoderType aDecoderType,
+                                    RFs& aFs, 
+                                    const TDesC& aSourceFilename, 
+                                    const TOptions aOptions = EOptionNone );
+                  
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aDecoderType       Decoder implementation type: HW or SW.
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceData        The descriptor reference for the Jpeg image data to decode.
+        * @param aOptions           Decoder options defined in ICL.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */                                            
+        IMPORT_C static CExtJpegDecoder* DataNewL( 
+                                    const TDecoderType aDecoderType,
+                                    RFs& aFs, 
+                                    const TDesC8& aSourceData, 
+                                    const TOptions aOptions = EOptionNone );
+
+        /**
+        * Creates and initializes CExtJpegDecoder
+        * @since 3.2
+        * @param aDecoderType       Decoder implementation type: HW or SW.
+        * @param aFs                A reference to a file server session to use.
+        * @param aSourceData        Pointer to the visual frame structure keeping 
+        *                           the Jpeg image data to decode.
+        * @param aOptions           Decoder options defined in ICL.
+        * @return CExtJpegDecoder*  A pointer to decoder object.
+        */                                            
+        IMPORT_C static CExtJpegDecoder* DataNewL( 
+                                    const TDecoderType aDecoderType, 
+                                    RFs& aFs, 
+                                    const CVisualFrame* aSourceData, 
+                                    const TOptions aOptions = EOptionNone );
+                      
+        /**
+        * Convert
+        * @since 3.2
+        * @param aRequestStatus     The pointer to the status of the operation 
+        *                           that is set by the decoder after it is completed.
+        *                           After a complete successful operation, the status 
+        *                           is KErrNone.
+        * @param aDestination       
+        * @param aFrameNumber       The frame index in the Jpeg image.
+        * @return void
+        */                            
+        IMPORT_C void Convert(  TRequestStatus* aRequestStatus, 
+                                CFbsBitmap& aDestination, TInt aFrameNumber = 0);
+                                
+        /**
+        * Convert
+        * @since 3.2
+        * @param aRequestStatus     The pointer to the status of the operation 
+        *                           that is set by the decoder after it is completed.
+        *                           After a complete successful operation, the status 
+        *                           is KErrNone.
+        * @param aDestination       Bitmap destination
+        * @param aDestinationMask   Bitmap destination mask
+        * @param aFrameNumber       The frame index in the Jpeg image.
+        * @return void
+        */                              
+        IMPORT_C void Convert(  TRequestStatus* aRequestStatus, 
+                                CFbsBitmap& aDestination, 
+                                CFbsBitmap& aDestinationMask, 
+                                TInt aFrameNumber = 0 );
+                                
+        /**
+        * Continue convert
+        * @since 3.2
+        * @param aRequestStatus     The pointer to the status of the operation 
+        *                           that is set by the decoder after it is completed.
+        *                           After a complete successful operation, the status 
+        *                           is KErrNone.
+        * @return void
+        */
+        IMPORT_C void ContinueConvert( TRequestStatus* aRequestStatus );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CExtJpegDecoder();
+        
+        /**
+        * Get an uid by version range
+        * @since 3.2
+        * @param aMinVersion
+        * @param aMaxVersion
+        * @return TUid
+        */
+        static TUid GetUidByVersionRangeL( TInt aMinVersion, TInt aMaxVersion );
+        
+        TBool iIsExtConvert;
+
+    };
+
+
+// CLASS DECLARATION
+
+/**
+* CExtJpegEncoder
+* @lib IclExtJpegApi.lib
+* @since 3.2
+*/
+class CExtJpegEncoder : public CJPEGImageFrameEncoder
+    {
+    public:
+
+        enum TEncoderCapability
+            {
+            ECapNone = 0x0000,
+            ECapStreaming = 0x0001,
+            ECapBitmapOverlay = 0x0002,
+            ECapImageReplacing = 0x0004,
+            ECapBitmapReplacing = 0x0008,
+            ECapLosslessRotation = 0x0010,
+            ECapLosslessFlipping = 0x0020,
+            ECapLosslessMirroring = 0x0040,
+            ECapDctEncoding = 0x0080
+            };
+            
+        enum TEncoderOperations
+            {
+            EEnd = 0x00010000,
+            ESupportedFormats = 0x00020000,
+            ECapabilities = 0x00040000,
+            EReadyForAsync = 0x00080000,
+            EConvert = 0x00100000,
+            EContinueConvert = 0x00200000,
+            EDestVisualFrame = 0x00400000,
+            ENewDestData = 0x00800000,
+            EDestDataSize = 0x01000000
+            };
+                 
+        enum TEncoderType
+            {
+            ESwImplementation = 0,
+            EHwImplementation
+            };                   
+
+    public:
+    
+
+        /**
+        * Symbian C++ Two-phased constructor.
+        */      
+        IMPORT_C static CExtJpegEncoder* NewL();
+        
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @since 3.2
+        * @param aFs                    A reference to a file server session to use.
+        * @param aDestinationFilename   The name of the destination Jpeg file.
+        * @param aMIMEType              The Jpeg MIME type for matching the encoder plugin.
+        * @param aOptions               Encoder options defined in ICL.
+        * @return CExtJpegEncoder*      A pointer to encoder object.
+        */
+        IMPORT_C static CExtJpegEncoder* FileNewL( 
+                                    RFs& aFs, 
+                                    const TDesC& aDestinationFilename, 
+                                    const TDesC8& aMIMEType, 
+                                    const TOptions aOptions = EOptionNone );
+
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @param aFs                    A reference to a file server session to use.
+        * @param aDestinationFilename   The name of the destination Jpeg file.
+        * @param aOptions               Encoder options defined in ICL.
+        * @param aImageT                The Jpeg image type.
+        * @param aImageSubType          The Jpeg image subtype (Null UID).
+        * @param aEncoderUid            The encoder plugin UID.
+        * @return CExtJpegEncoder*      A pointer to encoder object.
+        */      
+        IMPORT_C static CExtJpegEncoder* FileNewL( 
+                                    RFs& aFs, 
+                                    const TDesC& aDestinationFilename, 
+                                    const TOptions aOptions = EOptionNone, 
+                                    const TUid aImageType = KNullUid, 
+                                    const TUid aImageSubType = KNullUid, 
+                                    const TUid aEncoderUid = KNullUid );
+
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @param aDestinationData   Pointer reference to the destination 
+        *                           Jpeg data location that will be allocated by the encoder.
+        * @param aMIMEType          The Jpeg MIME type for matching the encoder plugin.
+        * @param aOptions           Encoder options defined in ICL.
+        * @return CExtJpegEncoder*  A pointer to encoder object.
+        */  
+        IMPORT_C static CExtJpegEncoder* DataNewL( 
+                                    HBufC8*& aDestinationData,
+                                    const TDesC8& aMIMEType,
+                                    const TOptions aOptions = EOptionNone);
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @param aDestinationData   Pointer reference to the destination 
+        *                           Jpeg data location that will be allocated by the encoder.
+        * @param aOptions           Encoder options defined in ICL.
+        * @param aImageType         The Jpeg image type.
+        * @param aImageSubType      The Jpeg image subtype (Null UID).
+        * @param aEncoderUid        The encoder plugin UID.
+        * @return CExtJpegEncoder*  A pointer to encoder object.
+        */  
+        IMPORT_C static CExtJpegEncoder* DataNewL( 
+                                    HBufC8*& aDestinationData,
+                                    const TOptions aOptions = EOptionNone,
+                                    const TUid aImageType = KNullUid,
+                                    const TUid aImageSubType = KNullUid,
+                                    const TUid aEncoderUid = KNullUid);
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @param aDestinationData   Pointer to the visual frame structure keeping the destination 
+        *                           Jpeg data allocated with maximum size by the client.
+        * @param aMIMEType          The Jpeg MIME type for matching the encoder plugin.
+        * @param aOptions           Encoder options defined in ICL.
+        * @return CExtJpegEncoder*  A pointer to encoder object.
+        */  
+        IMPORT_C static CExtJpegEncoder* DataNewL( 
+                                    const CVisualFrame* aDestinationData,
+                                    const TDesC8& aMIMEType,
+                                    const TOptions aOptions = EOptionNone);
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @param aDestinationData   Pointer to the visual frame structure keeping the destination 
+        *                           Jpeg data allocated with maximum size by the client.
+        * @param aOptions           Encoder options defined in ICL.
+        * @param aImageType         The Jpeg image type.
+        * @param aImageSubType      The Jpeg image subtype (Null UID).
+        * @param aEncoderUid        The encoder plugin UID.
+        * @return CExtJpegEncoder*  A pointer to encoder object.
+        */  
+        IMPORT_C static CExtJpegEncoder* DataNewL( 
+                                    const CVisualFrame* aDestinationData,
+                                    const TOptions aOptions = EOptionNone,
+                                    const TUid aImageType = KNullUid,
+                                    const TUid aImageSubType = KNullUid,
+                                    const TUid aEncoderUid = KNullUid);
+
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CExtJpegEncoder();
+
+        /**
+        * Enables the use of streaming feature and retrieves the
+        * macroblock dimensions in the Jpeg data. 
+        * @since 3.2
+        * @param aMacroBlockSize    The macroblock dimensions in the Jpeg 
+        *                           image that is set by the encoder.
+        * @param aFrameImageData    The pointer to the destination Jpeg image data structure.
+        * @return void
+        */
+        IMPORT_C void SetStreamingL( TSize& aMacroBlockSize, 
+                                     const CFrameImageData* aFrameImageData= NULL );
+
+        /**
+        * Enables the use of replacing feature, where the given image 
+        * is replaced starting from the specified up-left corner point.
+        * @since 3.2
+        * @param aReplaceImage      The image data that will be replaced.
+        * @param aReplacePoint      The up-left corner point of the replacing region.
+        * @return void
+        */
+        IMPORT_C void SetImageReplaceL( const CVisualFrame* aReplaceImage, TPoint aReplacePoint );
+
+        /**
+        * Enables the use of replacing feature, where the given bitmap 
+        * is replaced starting from the specified up-left corner point.
+        * @since 3.2
+        * @param aReplaceBitmap     The bitmap that will be replaced.
+        * @param aReplacePoint      The up-left corner point of the replacing region.
+        * @return void
+        */
+        IMPORT_C void SetBitmapReplaceL( const CFbsBitmap& aReplaceBitmap, TPoint aReplacePoint );
+
+        /**
+        * Enables the use of overlay feature, where the given bitmap
+        * is overlayed transparently based on the given alpha value
+        * starting from the specified up-left corner point.
+        * @since 3.2
+        * @param aOverlayBitmap     The bitmap that will be overlayed.
+        * @param aAlphaValue        The alpha value for the transparency of the overlayed bitmap.
+        * @param aOverlayPoint      The up-left corner point of the overlay region.
+        * @return void
+        */
+        IMPORT_C void SetBitmapOverlayL( const CFbsBitmap& aOverlayBitmap, 
+                                         TUint aAlphaValue, TPoint aOverlayPoint );
+
+        /**
+        * Enables the use of lossless rotation feature and specifies the rotating degree.
+        * @since 3.2
+        * @param aDegree    The rotation degree. Can take any values between 1 and 359.
+        * @return void
+        */
+        IMPORT_C void SetLosslessRotationL( TInt aDegree );
+
+        /**
+        * Enables the use of lossless flipping feature.
+        * @since 3.2
+        * @return void
+        */
+        IMPORT_C void SetLosslessFlippingL();
+
+        /**
+        * SEnables the use of lossless mirroring feature.
+        * @since 3.2
+        * @return void
+        */
+        IMPORT_C void SetLosslessMirroringL();
+
+        /**
+        * Enables the use of DCT encoding feature.
+        * @since 3.2
+        * @return void
+        */        
+        IMPORT_C void SetDctEncodingL();
+
+        /**
+        * Provides a new visual frame structure for the 
+        * destination data replacing any previously delivered ones.
+        * All the operations coming after this function call should
+        * use the provided structure.
+        * @since 3.2
+        * @param aDestinationData   The new visual frame structure for the destination data.
+        * @return void
+        */        
+        IMPORT_C void ProvideNewDestDataL( const CVisualFrame* aDestinationData );
+
+        /**
+        * Asynchronous function for initiating the encoding. 
+        * @since 3.2
+        * @param aRequestStatus         The pointer to the status of the operation 
+        *                               that is set by the encoder after it is completed.
+        *                               After a complete successful operation, the status 
+        *                               is KErrNone.
+        * @param aSourceFrame           Pointer to the visual frame structure that is keeping 
+        *                               the source image data. In streaming case, contains a 
+        *                               part of the uncompressed image data at the beginning.
+        * @param aNoOfEncodedMBlocks    Reference to the number of encoded macroblocks that is 
+        *                               set by the encoder after the encoding is completed.
+        * @param aFrameImageData        Pointer to optional frame image data structure defined in ICL.
+        * @return void
+        */
+        IMPORT_C void ConvertL( 
+                        TRequestStatus* aRequestStatus, 
+                        const CVisualFrame* aSourceFrame, 
+                        TInt& aNoOfEncodedMBlocks,
+                        const CFrameImageData* aFrameImageData = NULL );
+
+        /**
+        * Asynchronous function for initiating one of the iterations of streamed encoding.
+        * @since 3.2
+        * @param aRequestStatus         The pointer to the status of the operation 
+        *                               that is set by the encoder after it is completed.
+        *                               After a complete successful operation, the status 
+        *                               is KErrNone.
+        * @param aSourceFrame           Pointer to the visual frame structure that is keeping 
+        *                               the source image data. In streaming case, contains a 
+        *                               part of the uncompressed image data at the beginning.
+        * @param aNoOfEncodedMBlocks    Reference to the number of encoded macroblocks that is 
+        *                               set by the encoder after the encoding is completed.
+        * @return
+        */
+        IMPORT_C void ContinueConvertL( 
+                        TRequestStatus* aRequestStatus, 
+                        const CVisualFrame* aSourceFrame,
+                        TInt& aNoOfEncodedMBlocks );
+
+        /**
+        * Returns the source (uncompressed) data formats that are supported by the encoder.
+        * @since 3.2
+        * @return TInt  The supported source (uncompressed) data formats. 
+        *               The value is a combination of the flags defined
+        *               in CVisualFrame::TDataFormat.
+        */
+        IMPORT_C TInt SupportedFormatsL();
+
+        /**
+        * Returns the Extended API features (capabilities) that are supported by the encoder.
+        * @since 3.2
+        * @return TInt  The supported Extended API features. 
+        *               The value is a combination of the flags defined 
+        *               in TEncoderCapabilities.
+        */
+        IMPORT_C TInt CapabilitiesL();
+
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @since 3.2
+        * @param aEncoderType           Encoder implementation type: HW or SW.
+        * @param aFs                    A reference to a file server session to use.
+        * @param aDestinationFilename   The name of the destination Jpeg file.
+        * @param aOptions               Encoder options defined in ICL.
+        * @return CExtJpegEncoder*      A pointer to encoder object.
+        */        
+        IMPORT_C static CExtJpegEncoder* FileNewL( 
+                                    const TEncoderType aEncoderType,
+                                    RFs& aFs, 
+                                    const TDesC& aDestinationFilename, 
+                                    const TOptions aOptions = EOptionNone );
+                
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @since 3.2
+        * @param aEncoderType       Encoder implementation type: HW or SW.
+        * @param aDestinationData   Pointer reference to the destination Jpeg
+        *                           data location that will be allocated by the encoder.
+        * @param aOptions           Encoder options defined in ICL.
+        * @return CExtJpegEncoder*  A pointer to encoder object.
+        */                                    
+        IMPORT_C static CExtJpegEncoder* DataNewL( 
+                                    const TEncoderType aEncoderType,
+                                    HBufC8*& aDestinationData, 
+                                    const TOptions aOptions = EOptionNone );
+        /**
+        * Creates and initializes CExtJpegEncoder
+        * @since 3.2
+        * @param aEncoderType       Encoder implementation type: HW or SW.
+        * @param aDestinationData   Pointer to the visual frame structure keeping the 
+        *                           destination Jpeg data allocated with maximum size by the client.
+        * @param aOptions           Encoder options defined in ICL.
+        * @return CExtJpegEncoder*  A pointer to encoder object.
+        */                                    
+        IMPORT_C static CExtJpegEncoder* DataNewL( 
+                                    const TEncoderType aEncoderType, 
+                                    const CVisualFrame* aDestinationData, 
+                                    const TOptions aOptions = EOptionNone );        
+        
+        /**
+        * Returns the actual destination buffer size
+        * @since 3.2
+        * @return TInt  The actual destination buffer size required. 
+        *               -1 means the codec is not able to determine the required buffer size.
+        */                                    
+        IMPORT_C TInt GetDestinationDataSizeL();                                    
+
+
+    private:
+        
+        /**
+        * C++ default constructor.
+        */
+        CExtJpegEncoder();
+        
+        /**
+        * Get an uid by version range
+        * @since 3.2
+        * @param aMinVersion
+        * @param aMaxVersion
+        * @return TUid
+        */
+        static TUid GetUidByVersionRangeL( TInt aMinVersion, TInt aMaxVersion );
+    
+    };
+
+#endif  // _ICLEXTJPEGAPI_
+
+// End of File