epoc32/include/imageconversion.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
// This is the public client API for the Image Conversion Library
williamr@2
    15
// 
williamr@2
    16
//
williamr@2
    17
williamr@2
    18
#ifndef IMAGECONVERSION_H
williamr@2
    19
#define IMAGECONVERSION_H
williamr@2
    20
williamr@2
    21
#include <fbs.h>
williamr@2
    22
#include <bitdev.h>
williamr@2
    23
#include <badesca.h>
williamr@2
    24
#include <ecom/implementationinformation.h>
williamr@2
    25
#include <mm/mmcaf.h>
williamr@2
    26
williamr@2
    27
#include <icl/imagecodecdata.h>
williamr@2
    28
#include <icl/imagedata.h>
williamr@2
    29
#include <icl/icl_uids.hrh>
williamr@2
    30
#include <icl/imageconversionextension.h>
williamr@2
    31
williamr@4
    32
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
williamr@4
    33
#include <iclrecognizerutil.h>
williamr@4
    34
#endif
williamr@4
    35
williamr@2
    36
class MImageDecoderRelay;
williamr@2
    37
class MImageEncoderRelay;
williamr@2
    38
class CImageDecoderPlugin;
williamr@2
    39
class CImageEncoderPlugin;
williamr@2
    40
class CImageDecodeConstruct;
williamr@2
    41
class CImageEncodeConstruct;
williamr@2
    42
williamr@2
    43
/**
williamr@2
    44
@publishedAll
williamr@2
    45
@released
williamr@2
    46
williamr@2
    47
Container type to manage lists of UIDs.
williamr@2
    48
*/
williamr@2
    49
typedef RArray<TUid> RUidDataArray;	
williamr@2
    50
williamr@2
    51
/**
williamr@2
    52
@publishedAll
williamr@2
    53
@released
williamr@2
    54
williamr@2
    55
Class used to manage the mapping between an image's type, sub-type and description.
williamr@2
    56
*/
williamr@2
    57
class CImageTypeDescription : public CBase
williamr@2
    58
	{
williamr@2
    59
public:
williamr@2
    60
	/**
williamr@2
    61
	@internalComponent
williamr@2
    62
	*/
williamr@2
    63
	static CImageTypeDescription* NewL(const TDesC& aDescription, const TUid aImageType, const TUid aSubType);
williamr@2
    64
	/**
williamr@2
    65
	@internalComponent
williamr@2
    66
	*/
williamr@2
    67
	static CImageTypeDescription* NewLC(const TDesC& aDescription, const TUid aImageType, const TUid aSubType);
williamr@4
    68
	
williamr@2
    69
	IMPORT_C ~CImageTypeDescription();
williamr@2
    70
	IMPORT_C const TDesC& Description() const;
williamr@2
    71
	IMPORT_C TUid ImageType() const;
williamr@2
    72
	IMPORT_C TUid SubType() const;
williamr@2
    73
private:
williamr@2
    74
	CImageTypeDescription(const TUid aImageType, const TUid aSubType);
williamr@2
    75
	void ConstructL(const TDesC& aDescription);
williamr@2
    76
private:
williamr@2
    77
	HBufC* iDescription;
williamr@2
    78
	const TUid iImageType;
williamr@2
    79
	const TUid iSubType;
williamr@2
    80
	};
williamr@2
    81
williamr@2
    82
/**
williamr@2
    83
Container type to manage lists of pointers to CImageTypeDescription objects.
williamr@2
    84
williamr@2
    85
@publishedAll
williamr@2
    86
@released
williamr@2
    87
*/
williamr@2
    88
typedef RPointerArray<CImageTypeDescription> RImageTypeDescriptionArray;
williamr@2
    89
williamr@2
    90
/**
williamr@2
    91
Class used to manage the mapping between an image's MIME type & file extension.
williamr@2
    92
williamr@2
    93
@publishedAll
williamr@2
    94
@released
williamr@2
    95
*/
williamr@2
    96
class CFileExtensionMIMEType : public CBase
williamr@2
    97
	{
williamr@2
    98
public:
williamr@2
    99
	/**
williamr@2
   100
	@internalComponent
williamr@2
   101
	*/
williamr@2
   102
	static CFileExtensionMIMEType* NewL(const TDesC8& aExtn, const TDesC8& aMIMEType, const TDesC& aDisplayName, TUid aImageType, TUid aImageSubType, TUid aImplementationUid);
williamr@2
   103
	IMPORT_C static CFileExtensionMIMEType* NewLC(const TDesC8& aExtn, const TDesC8& aMIMEType, const TDesC& aDisplayName, TUid aImageType, TUid aImageSubType, TUid aImplementationUid);
williamr@2
   104
	IMPORT_C ~CFileExtensionMIMEType();
williamr@2
   105
williamr@2
   106
	IMPORT_C const TDesC& FileExtension() const;
williamr@2
   107
	IMPORT_C const TDesC8& MIMEType() const;
williamr@2
   108
	IMPORT_C const TDesC& DisplayName() const;
williamr@2
   109
	IMPORT_C TUid ImageType() const;
williamr@2
   110
	IMPORT_C TUid ImageSubType() const;
williamr@2
   111
	IMPORT_C TUid ImplementationUid() const;
williamr@2
   112
private:
williamr@2
   113
	CFileExtensionMIMEType();
williamr@2
   114
	void ConstructL(const TDesC8& aExtn, const TDesC8& aMIMEType, const TDesC& aDisplayName, TUid aImageType, TUid aImageSubType, TUid aImplementationUid);
williamr@2
   115
private:
williamr@2
   116
	HBufC* iFileExtension;
williamr@2
   117
	HBufC8* iMIMEType;
williamr@2
   118
	HBufC* iDisplayName;
williamr@2
   119
	TUid iImageTypeUid;
williamr@2
   120
	TUid iImageSubTypeUid;
williamr@2
   121
	TUid iImplementationUid;
williamr@2
   122
	};
williamr@2
   123
williamr@2
   124
/**
williamr@2
   125
Container type to manage lists of pointers to CFileExtensionMIMEType objects.
williamr@2
   126
williamr@2
   127
@publishedAll
williamr@2
   128
@released
williamr@2
   129
*/
williamr@2
   130
typedef RPointerArray<CFileExtensionMIMEType> RFileExtensionMIMETypeArray;
williamr@2
   131
williamr@2
   132
/**
williamr@2
   133
@publishedAll
williamr@2
   134
@released
williamr@2
   135
williamr@2
   136
Class used to manage various information about an implementation
williamr@2
   137
which is stored in resource files.
williamr@2
   138
williamr@2
   139
@see CImplementationInformation
williamr@2
   140
*/
williamr@2
   141
class CImplementationInformationType : public CBase
williamr@2
   142
	{
williamr@2
   143
public:
williamr@2
   144
	/**
williamr@2
   145
	@internalComponent
williamr@2
   146
	*/
williamr@2
   147
	static CImplementationInformationType* NewL();
williamr@2
   148
	/**
williamr@2
   149
	@internalComponent
williamr@2
   150
	*/
williamr@2
   151
	static CImplementationInformationType* NewLC();
williamr@4
   152
williamr@2
   153
	IMPORT_C ~CImplementationInformationType();
williamr@4
   154
	
williamr@2
   155
	/**
williamr@2
   156
	@internalComponent
williamr@2
   157
	*/
williamr@2
   158
	void SetDataL(TUid aImplementationUid, TInt aVersion, const TDesC& aDisplayName, const TDesC8& aDataType, const TDesC8& aOpaqueData, TDriveUnit aDrive);
williamr@2
   159
williamr@2
   160
	IMPORT_C TUid ImplementationUid() const;
williamr@2
   161
	IMPORT_C TInt Version() const;
williamr@2
   162
	IMPORT_C const TDesC& DisplayName() const;
williamr@2
   163
	IMPORT_C const TDesC8& DataType() const;
williamr@2
   164
	IMPORT_C const TDesC8& OpaqueData() const;
williamr@2
   165
williamr@2
   166
	IMPORT_C TDriveUnit Drive();
williamr@2
   167
williamr@2
   168
private:
williamr@2
   169
	CImplementationInformationType();
williamr@2
   170
williamr@2
   171
private:
williamr@2
   172
	TUid iImplementationUid;
williamr@2
   173
	TInt iVersion;
williamr@2
   174
	HBufC* iDisplayName;
williamr@2
   175
	HBufC8* iDataType;
williamr@2
   176
	HBufC8* iOpaqueData;
williamr@2
   177
	TDriveUnit iDrive;
williamr@2
   178
	};
williamr@2
   179
williamr@2
   180
//The public API for clients to call the Image Conversion Library decoders
williamr@2
   181
williamr@2
   182
/**
williamr@2
   183
@publishedAll
williamr@2
   184
@released
williamr@2
   185
williamr@2
   186
Provides access to the Image Conversion Library decoders.
williamr@2
   187
williamr@2
   188
This class provides functions to decode images held in files or descriptors. To decode buffered
williamr@2
   189
images use the buffered version of this class CBufferedImageDecoder.
williamr@2
   190
williamr@2
   191
Regarding DRM: Note that intent is evaluated when a CImageDecoder instance is being constructed by one of the FileNewL() methods.
williamr@2
   192
It is executed after at least one frame of the image has been successfully decoded.  Subsequent converts using the same CImageDecoder instance will not execute intent.
williamr@2
   193
*/
williamr@2
   194
class CImageDecoder : public CBase
williamr@2
   195
	{
williamr@2
   196
public:
williamr@2
   197
williamr@2
   198
	/**
williamr@2
   199
	Flags to control how the image is decoded.
williamr@2
   200
	These can be combined using an OR operation.
williamr@2
   201
	*/
williamr@2
   202
	enum TOptions
williamr@2
   203
		{
williamr@2
   204
		/** No flag set 
williamr@2
   205
		*/
williamr@2
   206
		EOptionNone = 0x00,
williamr@2
   207
williamr@2
   208
		/** Do not dither the decoded image 
williamr@2
   209
		*/
williamr@2
   210
		EOptionNoDither	= 0x01,
williamr@2
   211
williamr@2
   212
		/** Perform the decoding in a separate thread
williamr@2
   213
		*/
williamr@2
   214
		EOptionAlwaysThread = 0x02,
williamr@2
   215
williamr@2
   216
		/**
williamr@2
   217
		Allow Opens to complete with no error if there is less
williamr@2
   218
		than one frame available. This should be set for streaming.
williamr@2
   219
		*/
williamr@2
   220
		EOptionAllowZeroFrameOpen = 0x04,
williamr@2
   221
williamr@2
   222
		/**
williamr@2
   223
		Setting this flag requests that the plugin generate a mask during decoding.
williamr@2
   224
williamr@2
   225
		Note:
williamr@2
   226
		
williamr@2
   227
		This option is only relevant to image formats
williamr@2
   228
		that do not already contain mask information.
williamr@2
   229
williamr@2
   230
		The client must check that TFrameInfo::ETransparencyPossible is set
williamr@2
   231
		before attempting to obtain the mask, because not all plugins support mask generation.
williamr@2
   232
		*/
williamr@2
   233
		EAllowGeneratedMask = 0x08,
williamr@2
   234
		
williamr@2
   235
		/**
williamr@2
   236
		Use the highest possible image decoding speed; this may result in lower image quality. 
williamr@2
   237
		This flag is more applicable to formats which use "lossy" compression algorithms, such as JPEG. 
williamr@2
   238
		Decoders that do not support fast decoding will ignore it.
williamr@2
   239
		*/
williamr@2
   240
		EPreferFastDecode = 0x10,
williamr@2
   241
		
williamr@2
   242
		/**
williamr@2
   243
		@publishedPartner
williamr@2
   244
		@released
williamr@2
   245
		
williamr@2
   246
		Prevent MNG ImageDecoder from unwinding all the loops
williamr@2
   247
		*/
williamr@2
   248
		EOptionMngSubframesNoLoops = 0x20,
williamr@2
   249
		
williamr@2
   250
		/**
williamr@2
   251
		@publishedPartner
williamr@2
   252
		@released
williamr@2
   253
		
williamr@2
   254
		Setting this flag requests that the plugin use the frame size rather than the
williamr@2
   255
		overall size when calculating its reduction factor
williamr@2
   256
		*/
williamr@2
   257
		EOptionUseFrameSizeInPixels = 0x40,
williamr@2
   258
		
williamr@2
   259
		/**
williamr@2
   260
		When specified, this flag indicates that the decoder must ignore the EXIF meta-data, if present. 
williamr@2
   261
		In this case, the ExifMetaData() should return NULL.
williamr@2
   262
		This option value is also used to indicate the requirement to ignore the EXIF meta-data when doing the 
williamr@2
   263
		image transformation.
williamr@2
   264
		*/
williamr@2
   265
		EOptionIgnoreExifMetaData = 0x80,
williamr@2
   266
williamr@2
   267
		/**
williamr@2
   268
		@publishedAll
williamr@2
   269
		@released
williamr@4
   270
				
williamr@2
   271
		Codec must support crop.
williamr@2
   272
		 */
williamr@2
   273
		EOptionExtCrop = 0x0100,
williamr@2
   274
		
williamr@2
   275
		/**
williamr@2
   276
		@publishedAll
williamr@2
   277
		@released
williamr@4
   278
			
williamr@2
   279
		Codec must support block streaming extension.
williamr@2
   280
		 */
williamr@2
   281
		EOptionExtStream = 0x0200,
williamr@2
   282
		
williamr@2
   283
		/**
williamr@2
   284
		@publishedAll
williamr@2
   285
		@released
williamr@4
   286
			
williamr@2
   287
		Codec must support rotation through the operation extension.
williamr@2
   288
		 */
williamr@2
   289
		EOptionExtRotation = 0x0400,
williamr@2
   290
williamr@2
   291
		/**
williamr@2
   292
		@publishedAll
williamr@2
   293
		@released
williamr@4
   294
				
williamr@2
   295
		Codec must support horizontal mirror through the operation extension.
williamr@2
   296
		 */
williamr@2
   297
		EOptionExtMirrorHorizontalAxis = 0x0800,
williamr@2
   298
williamr@2
   299
		/**
williamr@2
   300
		@publishedAll
williamr@2
   301
		@released
williamr@4
   302
				
williamr@2
   303
		Codec must support vertical mirror through the operation extension.
williamr@2
   304
		 */
williamr@2
   305
		EOptionExtMirrorVerticalAxis = 0x1000,
williamr@2
   306
williamr@2
   307
		/**
williamr@2
   308
		@publishedAll
williamr@2
   309
		@released
williamr@4
   310
				
williamr@2
   311
		Codec must support the scaling extension.
williamr@2
   312
		 */
williamr@2
   313
		EOptionExtScaling = 0x2000,
williamr@2
   314
		
williamr@2
   315
		/** Reserved.
williamr@2
   316
		 */
williamr@2
   317
		EOptionExtReserved7 = 0x4000,
williamr@2
   318
williamr@2
   319
		/** Reserved.
williamr@2
   320
		 */
williamr@2
   321
		EOptionExtReserved8 = 0x8000,
williamr@2
   322
		/**
williamr@2
   323
		@internalTechnology
williamr@2
   324
		Requests that decode always fails for Png images without an iEND chunk.
williamr@2
   325
		*/
williamr@2
   326
		EOptionPngMissingiENDFail = 0x010000,
williamr@2
   327
		
williamr@2
   328
		/**
williamr@2
   329
		@publishedAll
williamr@2
   330
		@released
williamr@2
   331
		
williamr@2
   332
		Allows WMF codec to ignore any SETVIEWPORTORG, SETVIEWPORTEXT, SCALEVIEWPORTEXT 
williamr@2
   333
		or OFFSETVIEWPORTORG commands in the metafile and allows scaling to destination bitmap.
williamr@2
   334
		*/
williamr@4
   335
		EOptionWmfIgnoreViewportMetaData = 0x020000,
williamr@4
   336
williamr@4
   337
		/**
williamr@4
   338
		@publishedPartner
williamr@4
   339
		@prototype
williamr@4
   340
		
williamr@4
   341
		Requests that codec applies the auto rotation when decoding according to the orientation tag in the image Exif header.
williamr@4
   342
		*/
williamr@4
   343
		EOptionAutoRotate = 0x040000
williamr@2
   344
		};
williamr@2
   345
williamr@2
   346
	/**
williamr@2
   347
	Flags to control which image is decoded.
williamr@2
   348
	This can be used when the source file or descriptor 
williamr@2
   349
	contains multiple distinct image sources.
williamr@2
   350
	*/	
williamr@2
   351
	enum TImageType
williamr@2
   352
		{
williamr@2
   353
		/** Use the thumbnail as source image
williamr@2
   354
		*/
williamr@2
   355
		EImageTypeThumbnail = 0x01,
williamr@2
   356
		/** Use the main image
williamr@2
   357
		*/
williamr@2
   358
		EImageTypeMain = 0x02
williamr@2
   359
		};
williamr@2
   360
		
williamr@2
   361
public:
williamr@2
   362
	IMPORT_C static void GetImageTypesL(RImageTypeDescriptionArray& aImageTypeArray);
williamr@2
   363
	IMPORT_C static void GetImageSubTypesL(const TUid aImageType, RImageTypeDescriptionArray& aSubTypeArray);
williamr@2
   364
	IMPORT_C static void GetFileTypesL(RFileExtensionMIMETypeArray& aFileExtensionArray);
williamr@2
   365
	IMPORT_C static void GetMimeTypeFileL(RFs& aFs, const TDesC& aFileName, TDes8& aMimeType);
williamr@2
   366
	IMPORT_C static void GetMimeTypeDataL(const TDesC8& aImageData, TDes8& aMimeType);
williamr@2
   367
williamr@2
   368
	IMPORT_C static CImplementationInformationType* GetImplementationInformationL(TUid aImplementationUid);
williamr@2
   369
williamr@2
   370
	IMPORT_C static CImageDecoder* FileNewL(RFs& aFs, const TDesC& aSourceFilename, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   371
	IMPORT_C static CImageDecoder* FileNewL(RFs& aFs, const TDesC& aSourceFilename, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   372
williamr@2
   373
	IMPORT_C static CImageDecoder* FileNewL(RFs& aFs, const TDesC& aSourceFilename, const TDesC8& aMIMEType, ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone);
williamr@2
   374
	IMPORT_C static CImageDecoder* FileNewL(RFs& aFs, const TDesC& aSourceFilename, ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   375
	IMPORT_C static CImageDecoder* FileNewL(RFile& aFile, const TDesC8& aMIMEType, ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone);
williamr@2
   376
	IMPORT_C static CImageDecoder* FileNewL(RFile& aFile, ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   377
williamr@2
   378
	IMPORT_C static CImageDecoder* FileNewL(RFs& aFs, const TMMSource& aFileSource, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   379
	IMPORT_C static CImageDecoder* FileNewL(RFs& aFs, const TMMSource& aFileSource, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   380
	
williamr@2
   381
	IMPORT_C static CImageDecoder* DataNewL(RFs& aFs, const TDesC8& aSourceData, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   382
	IMPORT_C static CImageDecoder* DataNewL(RFs& aFs, const TDesC8& aSourceData, const TOptions aOptions = EOptionNone, const TUid aImageType  = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   383
	IMPORT_C virtual ~CImageDecoder();
williamr@2
   384
williamr@2
   385
	IMPORT_C virtual void Convert(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, TInt aFrameNumber = 0);
williamr@2
   386
	IMPORT_C virtual void Convert(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, CFbsBitmap& aDestinationMask, TInt aFrameNumber = 0);
williamr@2
   387
	IMPORT_C virtual void ContinueConvert(TRequestStatus* aRequestStatus);
williamr@2
   388
	IMPORT_C void Cancel();
williamr@2
   389
williamr@2
   390
	IMPORT_C TInt FrameCount() const;
williamr@2
   391
	IMPORT_C TBool IsImageHeaderProcessingComplete() const;
williamr@2
   392
	IMPORT_C void ContinueProcessingHeaderL();
williamr@2
   393
williamr@2
   394
	IMPORT_C const TFrameInfo& FrameInfo(TInt aFrameNumber = 0) const;
williamr@2
   395
	IMPORT_C const CFrameImageData& FrameData(TInt aFrameNumber = 0) const;
williamr@2
   396
williamr@2
   397
	IMPORT_C TInt NumberOfImageComments() const;
williamr@2
   398
	IMPORT_C HBufC* ImageCommentL(TInt aCommentNumber) const;
williamr@2
   399
	IMPORT_C TInt NumberOfFrameComments(TInt aFrameNumber) const;
williamr@2
   400
	IMPORT_C HBufC* FrameCommentL(TInt aFrameNumber, TInt aCommentNumber) const;
williamr@2
   401
williamr@2
   402
	IMPORT_C CFrameInfoStrings* FrameInfoStringsLC(TInt aFrameNumber = 0);
williamr@2
   403
	IMPORT_C CFrameInfoStrings* FrameInfoStringsL(TInt aFrameNumber = 0);
williamr@2
   404
	IMPORT_C TUid ImplementationUid() const;
williamr@2
   405
williamr@2
   406
	IMPORT_C void ImageType(TInt aFrameNumber, TUid& aImageType, TUid& aImageSubType) const;
williamr@2
   407
williamr@2
   408
	IMPORT_C TInt SetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue);
williamr@2
   409
	IMPORT_C void SetImageTypeL(TInt aImageType);
williamr@2
   410
	
williamr@2
   411
	IMPORT_C TInt ReductionFactor(const TSize& aOriginalSize, const TSize& aReducedSize) const;
williamr@2
   412
	IMPORT_C TInt ReducedSize(const TSize& aOriginalSize,  TInt aReductionFactor, TSize& aReducedSize) const;
williamr@2
   413
	IMPORT_C TInt SetDecoderThreadPriority(TThreadPriority aPriority);
williamr@2
   414
williamr@2
   415
	IMPORT_C static void GetPluginPropertiesL(const TUid aImplementationUid, RUidDataArray& aPropertiesArray);
williamr@2
   416
	IMPORT_C static void GetInterfaceImplementationsL(const RUidDataArray& aRequiredUids, RUidDataArray& aImplArray);
williamr@2
   417
	IMPORT_C static void GetInterfaceImplementationsL(const TUid* aRequiredUids, const TInt aLength, RUidDataArray& aImplArray);
williamr@2
   418
williamr@2
   419
	IMPORT_C TImageConvOperation* OperationL();
williamr@2
   420
	IMPORT_C TImageConvScaler* ScalerL();
williamr@2
   421
	IMPORT_C TImageConvStreamedDecode* BlockStreamerL();
williamr@2
   422
williamr@2
   423
	IMPORT_C void SetClippingRectL(const TRect* aClipRect);
williamr@2
   424
	IMPORT_C TInt GetDestinationSize(TSize& aSize, TInt aFrameNumber = 0);
williamr@2
   425
	
williamr@2
   426
	IMPORT_C void Prepare(TRequestStatus* aRequestStatus);
williamr@2
   427
williamr@2
   428
protected:
williamr@2
   429
	IMPORT_C CImageDecoder();
williamr@2
   430
williamr@2
   431
	// custom commands - for extended decoders
williamr@2
   432
	IMPORT_C void CustomSyncL(TInt aParam);
williamr@2
   433
	IMPORT_C void CustomAsync(TRequestStatus* aRequestStatus, TInt aParam);
williamr@2
   434
	IMPORT_C CImageDecoderPlugin* Plugin() const;
williamr@2
   435
williamr@2
   436
private:
williamr@2
   437
	static void MimeTypeGetDecoderListL(RImplInfoPtrArray& aDecoderList, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   438
	static void ImageTypeGetDecoderListL(RImplInfoPtrArray& aDecoderList, const TDesC8& aImageHeader, const TUid aImageType, const TUid aImageSubType, const TUid aDecoderUid, const TOptions aOptions = EOptionNone);
williamr@2
   439
	static void SuffixTypeGetDecoderListL(RImplInfoPtrArray& aDecoderList, const TDesC& aFileName, const TOptions aOptions = EOptionNone);
williamr@2
   440
williamr@2
   441
	static CImageDecoder* FileFindDecoderNewL(const RImplInfoPtrArray& aDecoderList, RFs& aFs, const TDesC& aSourceFilename, const TOptions aOptions, const TDesC& aUniqueId);
williamr@2
   442
	static CImageDecoder* FileDecoderNewL(const CImplementationInformation& aDecoderInfo, RFs& aFs, const TDesC& aSourceFilename, const TOptions aOptions, const TDesC& aUniqueId);
williamr@2
   443
	
williamr@2
   444
	static CImageDecoder* DataFindDecoderNewL(const RImplInfoPtrArray& aDecoderList, RFs& aFs, const TDesC8& aSourceData, const TOptions aOptions);
williamr@2
   445
	static CImageDecoder* DataDecoderNewL(const CImplementationInformation& aDecoderInfo, RFs& aFs, const TDesC8& aSourceData, const TOptions aOptions);
williamr@2
   446
williamr@2
   447
	static CImageDecodeConstruct* NewDecodeConstructL(const CImplementationInformation& aDecoderInfo, const TOptions aOptions = EOptionNone);
williamr@2
   448
williamr@2
   449
	static void DoGetMimeTypeL(const TDesC& aFileName, const TDesC8& aMatchString, TDes8& aMimeType);
williamr@2
   450
williamr@2
   451
	static CImageDecoder* NewL(CImageDecodeConstruct* aConstruct, TOptions aOptions);
williamr@2
   452
	static CImageDecoder* NewL();
williamr@2
   453
williamr@2
   454
	static CImageDecoder* FileNewImplL(RFs& aFs, const TDesC& aSourceFilename, const TDesC8& aMIMEType, const TDesC& aUniqueId, const ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone);
williamr@2
   455
	static CImageDecoder* FileNewImplL(RFs& aFs, const TDesC& aSourceFilename, const TDesC& aUniqueId, const ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   456
	static CImageDecoder* FileFindDecoderNewL(const RImplInfoPtrArray& aDecoderList, RFile& aFile, const TOptions aOptions, const TDesC& aUniqueId);
williamr@2
   457
	static CImageDecoder* FileDecoderNewL(const CImplementationInformation& aDecoderInfo, RFile& aFile, const TOptions aOptions, const TDesC& aUniqueId);
williamr@2
   458
	static CImageDecoder* FileNewImplL(RFile& aFile, const TDesC8& aMIMEType, const TDesC& aUniqueId, const ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone);
williamr@2
   459
	static CImageDecoder* FileNewImplL(RFile& aFile, const TDesC& aUniqueId, const ContentAccess::TIntent aIntent, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   460
    static ContentAccess::CContent* GetContentLC(const TDesC& aSourceFilename);
williamr@2
   461
williamr@2
   462
	inline TBool ValidProperties() const;
williamr@2
   463
williamr@2
   464
	// Future proofing
williamr@2
   465
	IMPORT_C virtual void ReservedVirtual1();
williamr@2
   466
	IMPORT_C virtual void ReservedVirtual2();
williamr@2
   467
	IMPORT_C virtual void ReservedVirtual3();
williamr@2
   468
	IMPORT_C virtual void ReservedVirtual4();
williamr@2
   469
williamr@2
   470
private:
williamr@2
   471
	MImageDecoderRelay* iRelay;
williamr@2
   472
williamr@2
   473
friend class CImageDecodeConstruct;	
williamr@2
   474
	};
williamr@2
   475
williamr@2
   476
williamr@2
   477
/**
williamr@2
   478
@publishedAll
williamr@2
   479
@released
williamr@2
   480
williamr@2
   481
Buffered image conversion library.
williamr@2
   482
williamr@2
   483
Provides a wrapper arround CImageDecoder that enables you to decode multiple images without
williamr@2
   484
having to recreate the CBufferedImageDecoder object each time. One of the key features of this
williamr@2
   485
class is the ability to append image data to the decoder object as it becomes available; this
williamr@2
   486
is done using AppendDataL().
williamr@2
   487
*/
williamr@2
   488
williamr@2
   489
//The public API for clients to call the Buffered Image Conversion Library decoders
williamr@2
   490
class CBufferedImageDecoder : public CBase
williamr@2
   491
	{
williamr@2
   492
private:
williamr@2
   493
	enum TState
williamr@2
   494
		{
williamr@2
   495
		EStateCreated,
williamr@2
   496
		EStateOpening,
williamr@2
   497
		EStateOpen,
williamr@2
   498
		EStateConverting
williamr@2
   499
		};
williamr@2
   500
williamr@2
   501
public:
williamr@2
   502
	IMPORT_C static CBufferedImageDecoder* NewL(RFs& aFs);
williamr@2
   503
	IMPORT_C virtual ~CBufferedImageDecoder();
williamr@2
   504
williamr@2
   505
	IMPORT_C void OpenL(const TDesC8& aSourceData, const TDesC8& aMIMEType, const CImageDecoder::TOptions aOptions = CImageDecoder::EOptionNone);
williamr@2
   506
	IMPORT_C void OpenL(const TDesC8& aSourceData, const CImageDecoder::TOptions aOptions = CImageDecoder::EOptionNone, const TUid aImageType  = KNullUid, const TUid aImageSubType = KNullUid, const TUid aDecoderUid = KNullUid);
williamr@2
   507
	IMPORT_C void ContinueOpenL();
williamr@2
   508
	IMPORT_C void ContinueProcessingHeaderL();
williamr@2
   509
	IMPORT_C TBool IsImageHeaderProcessingComplete() const;
williamr@2
   510
williamr@2
   511
	IMPORT_C void Convert(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, TInt aFrameNumber = 0);
williamr@2
   512
	IMPORT_C void Convert(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, CFbsBitmap& aDestinationMask, TInt aFrameNumber = 0);
williamr@2
   513
	IMPORT_C void ContinueConvert(TRequestStatus* aRequestStatus);
williamr@2
   514
williamr@2
   515
	IMPORT_C void Cancel();
williamr@2
   516
	IMPORT_C void Reset();
williamr@2
   517
williamr@2
   518
	IMPORT_C void AppendDataL(const TDesC8& aData);
williamr@2
   519
williamr@2
   520
	IMPORT_C TInt FrameCount() const;
williamr@2
   521
	IMPORT_C const TFrameInfo& FrameInfo(TInt aFrameNumber = 0) const;
williamr@2
   522
	IMPORT_C const CFrameImageData& FrameData(TInt aFrameNumber = 0) const;
williamr@2
   523
williamr@2
   524
	IMPORT_C TInt NumberOfImageComments() const;
williamr@2
   525
	IMPORT_C HBufC* ImageCommentL(TInt aCommentNumber) const;
williamr@2
   526
	IMPORT_C TInt NumberOfFrameComments(TInt aFrameNumber) const;
williamr@2
   527
	IMPORT_C HBufC* FrameCommentL(TInt aFrameNumber, TInt aCommentNumber) const;
williamr@2
   528
williamr@2
   529
	IMPORT_C CFrameInfoStrings* FrameInfoStringsLC(TInt aFrameNumber = 0);
williamr@2
   530
	IMPORT_C CFrameInfoStrings* FrameInfoStringsL(TInt aFrameNumber = 0);
williamr@2
   531
	IMPORT_C TUid ImplementationUid() const;
williamr@2
   532
williamr@2
   533
	IMPORT_C TBool ValidDecoder () const;
williamr@2
   534
williamr@2
   535
private:
williamr@2
   536
	CBufferedImageDecoder(RFs& aFs);
williamr@2
   537
williamr@2
   538
private:
williamr@2
   539
	RFs iFileSession;
williamr@2
   540
	CImageDecoder::TOptions iOptions;
williamr@2
   541
	TUid iImageType;
williamr@2
   542
	TUid iImageSubType;
williamr@2
   543
	TUid iDecoderUid;
williamr@2
   544
	TPtr8 iBuffer;
williamr@2
   545
	TPtr8 iMimeType;	
williamr@2
   546
williamr@2
   547
	CImageDecoder* iDecoder;
williamr@2
   548
williamr@2
   549
	TBool iImageTypeOpen; // Object was opened using image type	
williamr@2
   550
	TState iState;
williamr@2
   551
williamr@2
   552
friend class RBufferedDecoderTest;
williamr@2
   553
	};
williamr@2
   554
williamr@2
   555
williamr@2
   556
// The public API for clients to call the Image Conversion Library encoders
williamr@2
   557
williamr@2
   558
/**
williamr@2
   559
@publishedAll
williamr@2
   560
@released
williamr@2
   561
williamr@2
   562
Provides access to the ICL (image conversion library) encoders.
williamr@2
   563
williamr@2
   564
This class provides functions that convert image data held in CFbsBitmap objects 
williamr@2
   565
into well know formats and store the results in either files of descriptors.
williamr@2
   566
*/
williamr@2
   567
class CImageEncoder : public CBase
williamr@2
   568
	{
williamr@2
   569
public:
williamr@2
   570
williamr@2
   571
	/**
williamr@2
   572
	Flags to control how the image is encoded.
williamr@2
   573
	These can be combined using an OR operation.
williamr@2
   574
	*/
williamr@2
   575
	enum TOptions
williamr@2
   576
		{
williamr@2
   577
		/** No flag set
williamr@2
   578
		*/
williamr@2
   579
		EOptionNone = 0x00,
williamr@2
   580
williamr@2
   581
		/** Perform the encoding in a separate thread 
williamr@2
   582
		*/
williamr@2
   583
		EOptionAlwaysThread = 0x01,
williamr@2
   584
		
williamr@2
   585
		/** If the codec supports it, generate a palette based on the colors present in the image data, rather than using the default palette
williamr@2
   586
		*/
williamr@2
   587
		EOptionGenerateAdaptivePalette = 0x02,
williamr@2
   588
williamr@2
   589
		/**
williamr@4
   590
		Use the highest possible image encoding speed; this may result in lower image quality. 
williamr@4
   591
		This flag is more applicable to formats which use "lossy" compression algorithms, such as JPEG. 
williamr@4
   592
		Decoders that do not support fast encoding will ignore it.
williamr@4
   593
		*/
williamr@4
   594
		EPreferFastEncode = 0x04,
williamr@4
   595
williamr@4
   596
		/**
williamr@2
   597
		@publishedAll
williamr@2
   598
		@released
williamr@4
   599
				
williamr@2
   600
		Codec must support block streaming extension.
williamr@2
   601
		 */
williamr@2
   602
		EOptionExtStream = 0x0100,
williamr@2
   603
		
williamr@2
   604
		/**
williamr@2
   605
		@publishedAll
williamr@2
   606
		@released
williamr@4
   607
				
williamr@2
   608
		Codec must support rotation through the operation extension.
williamr@2
   609
		 */
williamr@2
   610
		EOptionExtRotation = 0x0200,
williamr@2
   611
williamr@2
   612
		/**
williamr@2
   613
		@publishedAll
williamr@2
   614
		@released
williamr@4
   615
				
williamr@2
   616
		Codec must support horizontal mirror through the operation extension.
williamr@2
   617
		 */
williamr@2
   618
		EOptionExtMirrorHorizontalAxis = 0x0400,
williamr@2
   619
williamr@2
   620
		/**
williamr@2
   621
		@publishedAll
williamr@2
   622
		@released
williamr@4
   623
				
williamr@2
   624
		Codec must support vertical mirror through the operation extension.
williamr@2
   625
		 */
williamr@2
   626
		EOptionExtMirrorVerticalAxis = 0x0800,
williamr@2
   627
williamr@2
   628
		/**
williamr@2
   629
		@publishedAll
williamr@2
   630
		@released
williamr@4
   631
				
williamr@2
   632
		Codec must support setting thumbnail when using the other extensions (e.g. thumbnail rotation)
williamr@2
   633
		 */
williamr@2
   634
		EOptionExtUseWithSetThumbnail = 0x1000,
williamr@2
   635
		
williamr@2
   636
		/** Reserved.
williamr@2
   637
		 */
williamr@2
   638
		EOptionExtReserved1 = 0x2000,
williamr@2
   639
williamr@2
   640
		/** Reserved.
williamr@2
   641
		 */
williamr@2
   642
		EOptionExtReserved2 = 0x4000,
williamr@2
   643
		
williamr@2
   644
		/** Reserved.
williamr@2
   645
		 */
williamr@2
   646
		EOptionExtReserved3 = 0x8000
williamr@2
   647
		};
williamr@2
   648
williamr@2
   649
public:
williamr@2
   650
	IMPORT_C static void GetImageTypesL(RImageTypeDescriptionArray& aImageTypeArray);
williamr@2
   651
	IMPORT_C static void GetImageSubTypesL(const TUid aImageType, RImageTypeDescriptionArray& aSubTypeArray);
williamr@2
   652
	IMPORT_C static void GetFileTypesL(RFileExtensionMIMETypeArray& aFileExtensionArray);
williamr@2
   653
	IMPORT_C static CImageEncoder* FileNewL(RFs& aFs, const TDesC& aDestinationFilename, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   654
	IMPORT_C static CImageEncoder* FileNewL(RFs& aFs, const TDesC& aDestinationFilename, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aEncoderUid = KNullUid);
williamr@2
   655
williamr@2
   656
	IMPORT_C static CImageEncoder* FileNewL(RFile& aFile, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   657
	IMPORT_C static CImageEncoder* FileNewL(RFile& aFile, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aEncoderUid = KNullUid);
williamr@2
   658
williamr@2
   659
	IMPORT_C static CImageEncoder* DataNewL(HBufC8*& aDestinationData, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   660
	IMPORT_C static CImageEncoder* DataNewL(HBufC8*& aDestinationData, const TOptions aOptions = EOptionNone, const TUid aImageType = KNullUid, const TUid aImageSubType = KNullUid, const TUid aEncoderUid = KNullUid);
williamr@2
   661
williamr@2
   662
	IMPORT_C void Convert(TRequestStatus* aRequestStatus, const CFbsBitmap& aSource, const CFrameImageData* aFrameImageData = NULL);
williamr@2
   663
williamr@2
   664
	IMPORT_C virtual ~CImageEncoder();
williamr@2
   665
	IMPORT_C void Cancel();
williamr@2
   666
williamr@2
   667
	IMPORT_C TUid ImplementationUid() const;
williamr@2
   668
williamr@2
   669
	IMPORT_C void SetThumbnail(TBool aDoGenerateThumbnail);
williamr@2
   670
	IMPORT_C TInt SetEncoderThreadPriority(TThreadPriority aPriority);
williamr@2
   671
williamr@2
   672
	IMPORT_C static void GetPluginPropertiesL(const TUid aImplementationUid, RUidDataArray& aPropertiesArray);
williamr@2
   673
	IMPORT_C static void GetInterfaceImplementationsL(const RUidDataArray& aRequiredUids, RUidDataArray& aImplArray);
williamr@2
   674
	IMPORT_C static void GetInterfaceImplementationsL(const TUid* aRequiredUids, const TInt aLength, RUidDataArray& aImplArray);
williamr@2
   675
williamr@2
   676
	IMPORT_C TImageConvOperation* OperationL();
williamr@2
   677
	IMPORT_C TImageConvStreamedEncode* BlockStreamerL();
williamr@2
   678
williamr@2
   679
	IMPORT_C void Prepare(TRequestStatus* aRequestStatus);
williamr@2
   680
williamr@2
   681
protected:
williamr@2
   682
	IMPORT_C CImageEncoder();
williamr@2
   683
williamr@2
   684
	// custom commands - for extended encoders
williamr@2
   685
	IMPORT_C void CustomSyncL(TInt aParam);
williamr@2
   686
	IMPORT_C void CustomAsync(TRequestStatus* aRequestStatus, TInt aParam);
williamr@2
   687
	IMPORT_C CImageEncoderPlugin* Plugin() const;
williamr@2
   688
williamr@2
   689
private:
williamr@2
   690
	static void MimeTypeGetEncoderListL(RImplInfoPtrArray& aEncoderList, const TDesC8& aMIMEType, const TOptions aOptions = EOptionNone);
williamr@2
   691
	static void ImageTypeGetEncoderListL(RImplInfoPtrArray& aEncoderList, const TUid aImageType, const TUid aImageSubType, const TUid aEncoderUid, const TOptions aOptions = EOptionNone);
williamr@2
   692
williamr@2
   693
   	static CImageEncodeConstruct* NewEncodeConstructL(const CImplementationInformation& aEncoderInfo, const TOptions aOptions = EOptionNone);
williamr@2
   694
williamr@2
   695
	static CImageEncoder* NewL(CImageEncodeConstruct* aConstruct, TOptions aOptions);
williamr@2
   696
	static CImageEncoder* NewL();
williamr@2
   697
williamr@2
   698
	inline TBool ValidProperties() const;
williamr@2
   699
williamr@2
   700
	// Future proofing
williamr@2
   701
	IMPORT_C virtual void ReservedVirtual1();
williamr@2
   702
	IMPORT_C virtual void ReservedVirtual2();
williamr@2
   703
	IMPORT_C virtual void ReservedVirtual3();
williamr@2
   704
	IMPORT_C virtual void ReservedVirtual4();
williamr@2
   705
williamr@2
   706
private:
williamr@2
   707
	MImageEncoderRelay* iRelay;
williamr@2
   708
williamr@2
   709
friend class CImageEncodeConstruct;
williamr@2
   710
	};
williamr@2
   711
williamr@4
   712
#endif // IMAGECONVERSION_H
williamr@2
   713