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