--- /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