epoc32/include/mmf/common/mmfcontrollerpluginresolver.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
// Copyright (c) 2002-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@2
     4
// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.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
// mmf\common\mmfcontrollerpluginresolver.h
williamr@2
    15
// 
williamr@2
    16
//
williamr@2
    17
williamr@2
    18
#ifndef MMF_COMMON_MMFCONTROLLERPLUGINRESOLVER_H
williamr@2
    19
#define MMF_COMMON_MMFCONTROLLERPLUGINRESOLVER_H
williamr@2
    20
williamr@2
    21
#include <ecom/ecom.h>
williamr@2
    22
#include <e32base.h>
williamr@2
    23
#include <apmstd.h>
williamr@2
    24
williamr@2
    25
/**
williamr@2
    26
@publishedAll
williamr@2
    27
@released
williamr@2
    28
williamr@2
    29
Default heap size for the controller thread
williamr@2
    30
*/
williamr@2
    31
const TUint KMMFDefaultControllerThreadHeapSize = 0x100000; //1MB
williamr@2
    32
williamr@2
    33
williamr@2
    34
class CMMFFormatImplementationInformation;
williamr@2
    35
williamr@2
    36
/**
williamr@2
    37
@publishedAll
williamr@2
    38
@released
williamr@2
    39
williamr@2
    40
Array of CMMFFormatImplementationInformation 
williamr@2
    41
*/
williamr@2
    42
typedef RPointerArray<CMMFFormatImplementationInformation> RMMFFormatImplInfoArray;
williamr@2
    43
williamr@2
    44
class CMMFControllerImplementationInformation;
williamr@2
    45
williamr@2
    46
/**
williamr@2
    47
@publishedAll
williamr@2
    48
@released
williamr@2
    49
williamr@2
    50
Array of CMMFControllerImplementationInformation 
williamr@2
    51
*/
williamr@2
    52
typedef RPointerArray<CMMFControllerImplementationInformation> RMMFControllerImplInfoArray;
williamr@2
    53
williamr@2
    54
/**
williamr@2
    55
@internalComponent
williamr@2
    56
williamr@2
    57
Interface to be implemented by customers of the class TaggedDataParser.
williamr@2
    58
*/
williamr@2
    59
class MTaggedDataParserClient
williamr@2
    60
	{
williamr@2
    61
public:
williamr@2
    62
	virtual void ProcessTaggedDataL(const TDesC8& aTag, const TDesC8& aData) = 0;
williamr@2
    63
	};
williamr@2
    64
williamr@2
    65
/**
williamr@2
    66
@internalComponent
williamr@2
    67
williamr@2
    68
Utility class used to parse data separated by xml-style tags.
williamr@2
    69
*/
williamr@2
    70
class TaggedDataParser
williamr@2
    71
	{
williamr@2
    72
public:
williamr@2
    73
williamr@2
    74
	/**
williamr@2
    75
	Splits aData into xml-style tags and values, and gets aClient to process each tag/value pair.
williamr@2
    76
	*/
williamr@2
    77
	static void ParseTaggedDataL(const TDesC8& aData, MTaggedDataParserClient& aClient);
williamr@2
    78
williamr@2
    79
	/**
williamr@2
    80
	Converts a string to a uid. If the string begin with "0x" it will be parsed as Hex, else Decimal.
williamr@2
    81
	*/
williamr@2
    82
	static void ConvertTextToUidL(const TDesC8& aData, TUid& aUid);
williamr@2
    83
williamr@2
    84
	/**
williamr@2
    85
	Converts a string to a TUint. The string must begin with "0x" and be 10 characters long,
williamr@2
    86
	otherwise it is considered corrupt.
williamr@2
    87
	*/
williamr@2
    88
	static void ConvertTextToTUintL(const TDesC8& aData, TUint& aUid);
williamr@2
    89
williamr@2
    90
	};
williamr@2
    91
williamr@2
    92
class CMatchData;
williamr@2
    93
williamr@2
    94
class CDesC8Array;
williamr@2
    95
williamr@2
    96
/**
williamr@2
    97
@publishedAll
williamr@2
    98
williamr@2
    99
Abstract class that contains basic information about ECom Multimedia plugins.
williamr@2
   100
williamr@2
   101
@released
williamr@2
   102
@since 7.0s
williamr@2
   103
*/
williamr@2
   104
class CMMFPluginImplementationInformation : public CBase
williamr@2
   105
	{
williamr@2
   106
public:
williamr@2
   107
williamr@2
   108
	/**
williamr@2
   109
	Returns the uid of this particular plugin implementation.
williamr@2
   110
	This is the UID used to instantiate this multimedia plugin.
williamr@2
   111
williamr@2
   112
	@return The implementation uid.
williamr@2
   113
williamr@2
   114
	@since  7.0s
williamr@2
   115
	*/
williamr@2
   116
	IMPORT_C TUid Uid() const;
williamr@2
   117
williamr@2
   118
	/**
williamr@2
   119
	Returns the display name of this plugin implementation.
williamr@2
   120
williamr@2
   121
	@return The display name.
williamr@2
   122
williamr@2
   123
	@since  7.0s
williamr@2
   124
	*/
williamr@2
   125
	IMPORT_C const TDesC& DisplayName() const;
williamr@2
   126
williamr@2
   127
	/**
williamr@2
   128
	Returns the name of the supplier of this plugin implementation, e.g. "Symbian".
williamr@2
   129
williamr@2
   130
	@return The plugin supplier.
williamr@2
   131
williamr@2
   132
	@since  7.0s
williamr@2
   133
	*/
williamr@2
   134
	IMPORT_C const TDesC& Supplier() const;
williamr@2
   135
williamr@2
   136
	/**
williamr@2
   137
	Returns the version number of this plugin.
williamr@2
   138
williamr@2
   139
	@return The version number.
williamr@2
   140
williamr@2
   141
	@since 7.0s
williamr@2
   142
	*/
williamr@2
   143
	IMPORT_C TInt Version() const;
williamr@2
   144
williamr@2
   145
	/**
williamr@2
   146
	Returns the array of media IDs supported by this plugin.
williamr@2
   147
	
williamr@2
   148
	The media ID can be used by clients to determine whether the plugin supports audio or
williamr@2
   149
	video data (or both). A UID is used for the media ID to provide future extensibility.
williamr@2
   150
williamr@2
   151
	@return The array of media IDs.
williamr@2
   152
williamr@2
   153
	@since  7.0s
williamr@2
   154
	*/
williamr@2
   155
	IMPORT_C const RArray<TUid>& SupportedMediaIds() const;
williamr@2
   156
williamr@2
   157
	/**
williamr@2
   158
	Tests whether this plugin was supplied by aSupplier.
williamr@2
   159
williamr@2
   160
	@param  aSupplier
williamr@2
   161
	        The required supplier.
williamr@2
   162
williamr@2
   163
	@return A boolean indicating if this plugin was supplied by aSupplier. ETrue if this plugin was supplied 
williamr@2
   164
	        by aSupplier, EFalse if not.
williamr@2
   165
williamr@2
   166
	@since 7.0s
williamr@2
   167
	*/
williamr@2
   168
	IMPORT_C TBool SupportsSupplier(const TDesC& aSupplier) const;
williamr@2
   169
williamr@2
   170
	/**
williamr@2
   171
	Tests whether this plugin supports aMediaId.
williamr@2
   172
williamr@2
   173
	@param  aMediaId
williamr@2
   174
	        The required media id.
williamr@2
   175
williamr@2
   176
	@return A boolean indicating if the plugin supports aMediaId. ETrue if this plugin supports aMediaId, EFalse if not.
williamr@2
   177
williamr@2
   178
	@since 7.0s
williamr@2
   179
	*/
williamr@2
   180
	IMPORT_C TBool SupportsMediaId(TUid aMediaId) const;
williamr@2
   181
williamr@2
   182
	/**
williamr@2
   183
	Destructor.
williamr@2
   184
	*/
williamr@2
   185
	virtual ~CMMFPluginImplementationInformation();
williamr@2
   186
williamr@2
   187
protected:
williamr@2
   188
williamr@2
   189
	/**
williamr@2
   190
	Constructor.
williamr@2
   191
	*/
williamr@2
   192
	CMMFPluginImplementationInformation();
williamr@2
   193
williamr@2
   194
	/** 
williamr@2
   195
	Sets the supplier. Takes a copy of aData.
williamr@2
   196
	*/
williamr@2
   197
	void SetSupplierL(const TDesC8& aData);
williamr@2
   198
williamr@2
   199
	/**
williamr@2
   200
	Adds a media id. aData is parsed to find the uid of the media id to be added.
williamr@2
   201
	*/
williamr@2
   202
	void AddMediaIdL(const TDesC8& aData);
williamr@2
   203
	
williamr@2
   204
protected:
williamr@2
   205
williamr@2
   206
	/** 
williamr@2
   207
	The UID of this plugin. 
williamr@2
   208
	*/
williamr@2
   209
	TUid iUid;
williamr@2
   210
williamr@2
   211
	/** 
williamr@2
   212
	The display name of this plugin. 
williamr@2
   213
	*/
williamr@2
   214
	HBufC* iDisplayName;
williamr@2
   215
williamr@2
   216
	/** 
williamr@2
   217
	The supplier of this plugin. 
williamr@2
   218
	*/
williamr@2
   219
	HBufC* iSupplier;
williamr@2
   220
williamr@2
   221
	/** 
williamr@2
   222
	The version number of this plugin. 
williamr@2
   223
	*/
williamr@2
   224
	TInt iVersion;
williamr@2
   225
williamr@2
   226
	/**
williamr@2
   227
	The media ids supported by this plugin.
williamr@2
   228
	*/
williamr@2
   229
	RArray<TUid> iMediaIds;
williamr@2
   230
	};
williamr@2
   231
williamr@2
   232
/**
williamr@2
   233
@publishedAll
williamr@2
   234
@released
williamr@2
   235
williamr@2
   236
Contains format support information retrieved from the ECom registry.
williamr@2
   237
williamr@2
   238
An object of this type may describe either a concrete format plugin (ie a CMMFFormatEncode or a
williamr@2
   239
CMMFFormatDecode implementation) or a format supported by a controller plugin.
williamr@2
   240
williamr@2
   241
The object is created using a CImplementationInformation object retrieved from the ECom registry.
williamr@2
   242
All relevant data is copied out of the CImplementationInformation object, and its opaque data is
williamr@2
   243
parsed to provide the supplier, supported media ids, supported mime types, supported file extensions,
williamr@2
   244
and supported header data matches.
williamr@2
   245
williamr@2
   246
Notes for Format Plugin developers:
williamr@2
   247
@code
williamr@2
   248
The opaque data section of the ECom plugin resource file must be in the format:
williamr@2
   249
williamr@2
   250
opaque_data = "<?>Data 1<?>Data 2<?>Data 3<?>Data 4[...]<?>Data N";
williamr@2
   251
williamr@2
   252
The <?> preceding the data determines the meaning of the data.  The following are the possible tags:
williamr@2
   253
williamr@2
   254
	<s> - Supplier
williamr@2
   255
	<i> - Media Id
williamr@2
   256
	<m> - Mime Type
williamr@2
   257
	<e> - File Extension
williamr@2
   258
	<h> - Header Data
williamr@2
   259
	<c> - Custom Interfaces
williamr@2
   260
williamr@2
   261
UIDs must always be in hex in the format '0x12345678', must include the '0x' and be 10 characters long
williamr@2
   262
@endcode
williamr@2
   263
williamr@2
   264
@since 7.0s
williamr@2
   265
*/
williamr@2
   266
class CMMFFormatImplementationInformation : public CMMFPluginImplementationInformation, MTaggedDataParserClient
williamr@2
   267
	{
williamr@2
   268
public:
williamr@2
   269
	/**
williamr@2
   270
	Constructs a new format implementation information object.
williamr@2
   271
williamr@2
   272
	@param  aImplInfo
williamr@2
   273
	        The ECOM implementation information
williamr@2
   274
williamr@2
   275
	@return The new object created.
williamr@2
   276
williamr@2
   277
	@since 7.0s
williamr@2
   278
	*/
williamr@2
   279
	static CMMFFormatImplementationInformation* NewL(const CImplementationInformation& aImplInfo);
williamr@2
   280
williamr@2
   281
	/**
williamr@2
   282
	Constructs a new format implementation information object.
williamr@2
   283
williamr@2
   284
	@param  aImplInfo
williamr@2
   285
	        The ECOM implementation information
williamr@2
   286
williamr@2
   287
	@return The new object created. Note that this will be on the cleanup stack.
williamr@2
   288
williamr@2
   289
	@since  7.0s
williamr@2
   290
	*/
williamr@2
   291
	static CMMFFormatImplementationInformation* NewLC(const CImplementationInformation& aImplInfo);
williamr@2
   292
williamr@2
   293
	/** 
williamr@2
   294
	Destructor 
williamr@2
   295
	*/
williamr@2
   296
	virtual ~CMMFFormatImplementationInformation();
williamr@2
   297
williamr@2
   298
	/**
williamr@2
   299
	Returns the array of supported file extensions.
williamr@2
   300
williamr@2
   301
	@return The array of file extensions.
williamr@2
   302
	@since  7.0s
williamr@2
   303
	*/
williamr@2
   304
	IMPORT_C const CDesC8Array& SupportedFileExtensions() const;
williamr@2
   305
williamr@2
   306
	/**
williamr@2
   307
	Returns the array of supported mime types.
williamr@2
   308
williamr@2
   309
	@return The array of mime types.
williamr@2
   310
williamr@2
   311
	@since  7.0s
williamr@2
   312
	*/
williamr@2
   313
	IMPORT_C const CDesC8Array& SupportedMimeTypes() const;
williamr@2
   314
williamr@2
   315
	/**
williamr@2
   316
	Returns the array of supported header data matches.
williamr@2
   317
williamr@2
   318
	@return The array of header data.
williamr@2
   319
	@since 7.0s
williamr@2
   320
	*/
williamr@2
   321
	IMPORT_C const CDesC8Array& SupportedHeaderData() const;
williamr@2
   322
williamr@2
   323
	/**
williamr@2
   324
	Tests whether this format provides support for the specified file extension, aFileExtension.
williamr@2
   325
williamr@2
   326
	@param  aFileExtension
williamr@2
   327
	        The requested file extension. Must be the extension only, and contain the dot '.'
williamr@2
   328
williamr@2
   329
	@return A boolean indicating if the specified file extension is supported. ETrue if this format provides 
williamr@2
   330
	        the required support, EFalse if it does not.
williamr@2
   331
williamr@2
   332
	@since  7.0s
williamr@2
   333
	*/
williamr@2
   334
	IMPORT_C TBool SupportsFileExtension(const TDesC8& aFileExtension) const;
williamr@2
   335
williamr@2
   336
	/**
williamr@2
   337
	Tests whether this format provides support for aMimeType.
williamr@2
   338
williamr@2
   339
	@param  aMimeType
williamr@2
   340
	        The requested mime type.
williamr@2
   341
williamr@2
   342
	@return A boolean indicating if the format is supported. ETrue if this format provides the required support, EFalse if not.
williamr@2
   343
williamr@2
   344
	@since 7.0s
williamr@2
   345
	*/
williamr@2
   346
	IMPORT_C TBool SupportsMimeType(const TDesC8& aMimeType) const;
williamr@2
   347
williamr@2
   348
	/**
williamr@2
   349
	Tests whether this format provides support for aHeaderData.
williamr@2
   350
	aHeaderData is searched for each chunk supported by this format.
williamr@2
   351
williamr@2
   352
	@param	aHeaderData
williamr@2
   353
	        The requested header data.
williamr@2
   354
	        
williamr@2
   355
	@return A boolean indicating if aHeaderData is supported. ETrue if this format provides the required support, EFalse if not.
williamr@2
   356
williamr@2
   357
	@since  7.0s
williamr@2
   358
	*/
williamr@2
   359
	IMPORT_C TBool SupportsHeaderDataL(const TDesC8& aHeaderData) const;
williamr@2
   360
williamr@2
   361
	/**
williamr@2
   362
	Tests whether this format provides support for Custom Interfaces.
williamr@2
   363
        
williamr@2
   364
	@return A boolean indicating if Custom Interfaces are supported. ETrue if this format provides the required support, EFalse if not.
williamr@2
   365
	*/
williamr@2
   366
	IMPORT_C TBool SupportsCustomInterfaces() const;
williamr@2
   367
williamr@2
   368
protected:
williamr@2
   369
williamr@2
   370
	/** 
williamr@2
   371
	Constructor 
williamr@2
   372
	*/
williamr@2
   373
	CMMFFormatImplementationInformation();
williamr@2
   374
williamr@2
   375
	/** 
williamr@2
   376
	2nd phase constructor 
williamr@2
   377
	*/
williamr@2
   378
	void ConstructL(const CImplementationInformation& aImplInfo);
williamr@2
   379
williamr@2
   380
	/** 
williamr@2
   381
	Adds a file extension to the array of extensions supported by this format. 
williamr@2
   382
	*/
williamr@2
   383
	void AddFileExtensionL(const TDesC8& aData);
williamr@2
   384
williamr@2
   385
	/**
williamr@2
   386
	Adds a mime type to the array of types supported by this format.
williamr@2
   387
	*/
williamr@2
   388
	void AddMimeTypeL(const TDesC8& aData);
williamr@2
   389
williamr@2
   390
	/** 
williamr@2
   391
	Adds a chunk of header data to the array of chunks supported by this format.
williamr@2
   392
	*/
williamr@2
   393
	void AddHeaderDataL(const TDesC8& aData);
williamr@2
   394
williamr@2
   395
	/** 
williamr@2
   396
	from MTaggedDataParserClient 
williamr@2
   397
	*/
williamr@2
   398
	void ProcessTaggedDataL(const TDesC8& aTag, const TDesC8& aData);
williamr@2
   399
williamr@2
   400
private:
williamr@2
   401
	class CBody;
williamr@2
   402
	/** 
williamr@2
   403
	CMMFFormatImplementationInformation body
williamr@2
   404
	*/
williamr@2
   405
	CBody* iBody;
williamr@2
   406
	};
williamr@2
   407
williamr@2
   408
williamr@2
   409
/**
williamr@2
   410
@publishedAll
williamr@2
   411
@released
williamr@2
   412
williamr@2
   413
Contains controller plugin information retrieved from the ECom registry.
williamr@2
   414
williamr@2
   415
The object is created using a CImplementationInformation object retrieved from the ECom registry.
williamr@2
   416
All relevant data is copied out of the CImplementationInformation object, and its opaque data is
williamr@2
   417
parsed to provide the supplier, supported media IDs.
williamr@2
   418
williamr@2
   419
Notes for Format Plugin developers:
williamr@2
   420
The exact formats supported by the controller plugin are calculated by:
williamr@2
   421
williamr@2
   422
1. The formats supported by the controller plugin itself must be declared in separate entries in the
williamr@2
   423
controller plugin resource file.  Two interface UIDs should be defined by the plugin writer - one
williamr@2
   424
for the play formats supported, the other for the record formats supported.  The play formats are
williamr@2
   425
then listed as implementations of the play format interface uid, and likewise the record formats.
williamr@2
   426
williamr@2
   427
2. Format plugins (CMMFFormatEncode and CMMFFormatDecode) declare which controller plugin they
williamr@2
   428
extend.  ECom is search for the format plugins that extend the controller plugin, and they
williamr@2
   429
are added to the list.
williamr@2
   430
williamr@2
   431
The opaque data section of the ECom plugin resource file must be in the format:
williamr@2
   432
@code
williamr@2
   433
williamr@2
   434
opaque_data = "<?>Data 1<?>Data 2<?>Data 3<?>Data 4[...]<?>Data N";
williamr@2
   435
williamr@2
   436
The <?> preceding the data determines the meaning of the data.  The following are the possible tags:
williamr@2
   437
williamr@2
   438
	<s> - Supplier - must be only one
williamr@2
   439
	<i> - Media Id
williamr@2
   440
	<p> - UID of play format 'interface' - must be only one
williamr@2
   441
	<r> - UID of record format 'interface' - must be only one
williamr@2
   442
williamr@2
   443
UIDs must always be in hex in the format '0x12345678', must include the '0x' and be 10 characters long.
williamr@2
   444
@endcode
williamr@2
   445
williamr@2
   446
@since 7.0s
williamr@2
   447
*/
williamr@2
   448
class CMMFControllerImplementationInformation : public CMMFPluginImplementationInformation, MTaggedDataParserClient
williamr@2
   449
	{
williamr@2
   450
public:
williamr@2
   451
williamr@2
   452
	/**
williamr@2
   453
	Constructs a new controller implementation information object.
williamr@2
   454
williamr@2
   455
	@param  aImplInfo
williamr@2
   456
	        The ECOM implementation information.
williamr@2
   457
williamr@2
   458
	@return The new object created.
williamr@2
   459
	
williamr@2
   460
	@internalTechnology
williamr@2
   461
williamr@2
   462
	@since  7.0s
williamr@2
   463
	*/
williamr@2
   464
	static CMMFControllerImplementationInformation* NewL(const CImplementationInformation& aImplInfo);
williamr@2
   465
williamr@2
   466
	/**
williamr@2
   467
	Constructs a new controller implementation information object.
williamr@2
   468
williamr@2
   469
	Note: 
williamr@2
   470
	The new object will be on the cleanup stack.
williamr@2
   471
williamr@2
   472
	@param  aImplInfo
williamr@2
   473
	        The ECOM implementation information
williamr@2
   474
williamr@2
   475
	@return The new object created.
williamr@2
   476
	
williamr@2
   477
	@internalTechnology
williamr@2
   478
williamr@2
   479
	@since  7.0s
williamr@2
   480
	*/
williamr@2
   481
	static CMMFControllerImplementationInformation* NewLC(const CImplementationInformation& aImplInfo);
williamr@2
   482
williamr@2
   483
	/**
williamr@2
   484
	Constructs a new controller implementation information object.
williamr@2
   485
williamr@2
   486
	@param  aUid
williamr@2
   487
	        The Uid of the controller to obtain controller implementation information
williamr@2
   488
williamr@2
   489
	@return The new object created.
williamr@2
   490
williamr@2
   491
	@since  7.0s
williamr@2
   492
	*/
williamr@2
   493
	IMPORT_C static CMMFControllerImplementationInformation* NewL(TUid aUid);
williamr@2
   494
williamr@2
   495
	/**
williamr@2
   496
	Destructor.
williamr@2
   497
	
williamr@2
   498
	@internalTechnology
williamr@2
   499
	*/
williamr@2
   500
	~CMMFControllerImplementationInformation();
williamr@2
   501
williamr@2
   502
	/**
williamr@2
   503
	Returns the array of play formats supported by this controller.
williamr@2
   504
williamr@2
   505
	@return The play formats supported.
williamr@2
   506
williamr@2
   507
	@since  7.0s
williamr@2
   508
	*/
williamr@2
   509
	IMPORT_C const RMMFFormatImplInfoArray& PlayFormats() const;
williamr@2
   510
williamr@2
   511
	/**
williamr@2
   512
	Returns the array of record formats supported by this controller.
williamr@2
   513
williamr@2
   514
	@return The record formats supported.
williamr@2
   515
williamr@2
   516
	@since  7.0s
williamr@2
   517
	*/
williamr@2
   518
	IMPORT_C const RMMFFormatImplInfoArray& RecordFormats() const;
williamr@2
   519
williamr@2
   520
	/**
williamr@2
   521
	Returns the heap space required by this controller.
williamr@2
   522
williamr@2
   523
	@return The heap space required.
williamr@2
   524
williamr@2
   525
	@since  7.0s
williamr@2
   526
	*/
williamr@2
   527
	IMPORT_C TUint HeapSpaceRequired() const;
williamr@2
   528
	
williamr@2
   529
	/**
williamr@2
   530
	Queries the ECom registry for the play formats supported. 
williamr@2
   531
	
williamr@2
   532
	@internalTechnology
williamr@2
   533
	*/
williamr@2
   534
	void GetPlayFormatsL();
williamr@2
   535
williamr@2
   536
	/** 
williamr@2
   537
	Queries the ECom registry for the record formats supported.
williamr@2
   538
	
williamr@2
   539
	@internalTechnology
williamr@2
   540
	*/
williamr@2
   541
	void GetRecordFormatsL();
williamr@2
   542
	
williamr@2
   543
	/**
williamr@2
   544
	Returns the uri schemes of this plugin.
williamr@2
   545
williamr@2
   546
	@return The array of uri schemes.
williamr@2
   547
williamr@2
   548
	@internalTechnology
williamr@2
   549
	*/
williamr@2
   550
	IMPORT_C const CDesC8Array& SupportedUriSchemes() const;
williamr@2
   551
	
williamr@2
   552
	/**
williamr@2
   553
	Tests whether the plugin supports aUriScheme.
williamr@2
   554
	
williamr@2
   555
	@param  aUriScheme
williamr@2
   556
	        The required Uri Scheme.
williamr@2
   557
williamr@2
   558
	@return A boolean indicating if the plugin supports aUriScheme. ETrue if this plugin supports aUriScheme, EFalse if not.
williamr@2
   559
williamr@2
   560
	@internalTechnology
williamr@2
   561
	*/
williamr@2
   562
	IMPORT_C TBool SupportsUriScheme(const TDesC8& aUriScheme) const;
williamr@2
   563
	
williamr@2
   564
	/**
williamr@2
   565
	Tests whether the controller plugin supports url
williamr@2
   566
		
williamr@2
   567
	@return A boolean indicating if the plugin supports url. ETrue for uri supporting controller, EFalse if not.
williamr@2
   568
	
williamr@2
   569
	@internalTechnology
williamr@2
   570
	*/
williamr@2
   571
	IMPORT_C TBool SupportsNetworkCapability() const;
williamr@2
   572
	
williamr@2
   573
	/**
williamr@2
   574
	Sets the uri priority of this controller
williamr@2
   575
	
williamr@2
   576
	@param  aUriPriority
williamr@2
   577
	        The Uri priority to be assigned.
williamr@2
   578
	        
williamr@2
   579
	@internalTechnology
williamr@2
   580
	*/
williamr@2
   581
	IMPORT_C void SetUriPriority(TInt aUriPriority);
williamr@2
   582
	
williamr@2
   583
	/**
williamr@2
   584
	Retrieves the uri priority of this controller. 
williamr@2
   585
	Higher priority implies greater number. ie UriPriority() returning 3 
williamr@2
   586
	has higher prioirty than UriPriority() returning 1.
williamr@2
   587
	
williamr@2
   588
	@return  The assigned Uri priority.
williamr@2
   589
	
williamr@2
   590
	@internalTechnology
williamr@2
   591
	*/
williamr@2
   592
	IMPORT_C TInt UriPriority() const;
williamr@2
   593
	
williamr@2
   594
	/**
williamr@2
   595
	Check whether the controller plugin supports secure DRM process mode
williamr@2
   596
		
williamr@2
   597
	@return A boolean indicating if the plugin supports secure DRM process mode. 
williamr@2
   598
	ETrue for secure DRM process mode supporting controller, EFalse if not.
williamr@2
   599
	
williamr@2
   600
	@internalTechnology
williamr@2
   601
	*/
williamr@2
   602
	IMPORT_C TBool SupportsSecureDRMProcessMode() const;
williamr@2
   603
	
williamr@2
   604
protected:
williamr@2
   605
williamr@2
   606
	/**
williamr@2
   607
	Constructor.
williamr@2
   608
	
williamr@2
   609
	@internalTechnology
williamr@2
   610
	*/
williamr@2
   611
	CMMFControllerImplementationInformation();
williamr@2
   612
williamr@2
   613
	/**
williamr@2
   614
	2nd phase constructor.
williamr@2
   615
	
williamr@2
   616
	@internalTechnology
williamr@2
   617
	*/
williamr@2
   618
	void ConstructL(const CImplementationInformation& aImplInfo);
williamr@2
   619
williamr@2
   620
	/**
williamr@2
   621
	Parses aData to get the collection UID of the play formats supported by this controller.
williamr@2
   622
	
williamr@2
   623
	@internalTechnology
williamr@2
   624
	*/
williamr@2
   625
	void SetPlayFormatCollectionUidL(const TDesC8& aData);
williamr@2
   626
williamr@2
   627
	/**
williamr@2
   628
	Parses aData to get the collection UID of the record formats supported by this controller.
williamr@2
   629
	
williamr@2
   630
	@internalTechnology
williamr@2
   631
	*/
williamr@2
   632
	void SetRecordFormatCollectionUidL(const TDesC8& aData);
williamr@2
   633
williamr@2
   634
	/**
williamr@2
   635
	Parses aData to get the size of the stack the controller requires.
williamr@2
   636
	
williamr@2
   637
	@internalTechnology
williamr@2
   638
	*/
williamr@2
   639
	void SetHeapSizeL(const TDesC8& aData);
williamr@2
   640
williamr@2
   641
	/**
williamr@2
   642
	From MTaggedDataParserClient.
williamr@2
   643
	*/
williamr@2
   644
	void ProcessTaggedDataL(const TDesC8& aTag, const TDesC8& aData);
williamr@2
   645
williamr@2
   646
	/**
williamr@2
   647
	Queries the ECom registry for:
williamr@2
   648
		- all registry entries with an interface UID of aFormatCollectionUid
williamr@2
   649
		- all format plugins with an interface UID of aFormatPluginCollectionUid (ie CMMFFormatEncode
williamr@2
   650
		  or CMMFFormatDecode) that have the UID of this controller plugin in the default_data field
williamr@2
   651
		  of their ECom resource file.
williamr@2
   652
williamr@2
   653
	CMMFFormatImplementationInformation objects are created for each entry returned, and appended to
williamr@2
   654
	aFormatArray.
williamr@2
   655
williamr@2
   656
	@param  aFormatCollectionUid
williamr@2
   657
	        See above.
williamr@2
   658
	@param  aFormatPluginCollectionUid
williamr@2
   659
	        See above.
williamr@2
   660
	@param  aFormatArray
williamr@2
   661
	        See above.
williamr@2
   662
	        
williamr@2
   663
	@internalTechnology
williamr@2
   664
williamr@2
   665
	@since  7.0s
williamr@2
   666
	*/
williamr@2
   667
	void GetFormatsL(TUid aFormatCollectionUid, TUid aFormatPluginCollectionUid, RMMFFormatImplInfoArray& aFormatArray);
williamr@2
   668
williamr@2
   669
	/**
williamr@2
   670
	Creates CMMFFormatImplementationInformation objects for all CImplementationInformation objects
williamr@2
   671
	in aEcomArray.  Any corrupt objects are ignored.  The objects created are added to aFormatArray.
williamr@2
   672
williamr@2
   673
	@param  aEcomArray
williamr@2
   674
	        See above.
williamr@2
   675
	@param  aFormatArray
williamr@2
   676
	        See above.
williamr@2
   677
	        
williamr@2
   678
	@internalTechnology
williamr@2
   679
williamr@2
   680
	@since  7.0s
williamr@2
   681
	*/
williamr@2
   682
	void AddFormatsSwallowCorruptL(RImplInfoPtrArray& aEcomArray, RMMFFormatImplInfoArray& aFormatArray);
williamr@2
   683
	
williamr@2
   684
	/**
williamr@2
   685
	Sets the Uri Scheme found in opaque data
williamr@2
   686
	
williamr@2
   687
	@param  aUriScheme
williamr@2
   688
			Gives the uri scheme supported by the controller
williamr@2
   689
	
williamr@2
   690
	@internalTechnology
williamr@2
   691
	*/
williamr@2
   692
	void SetUriSchemeL(const TDesC8& aUriScheme);
williamr@2
   693
	
williamr@2
   694
	/**
williamr@2
   695
	Sets the Network capability found in opaque data
williamr@2
   696
	
williamr@2
   697
	@param  aNetworkCapable
williamr@2
   698
			Declares the incapability to support uri if matches to 'yes'. 
williamr@2
   699
			If this is the case, iIsNetworkCtrl is set to EFalse
williamr@2
   700
	
williamr@2
   701
	@internalTechnology
williamr@2
   702
	*/
williamr@2
   703
	void SetNetworkCapabilityL(const TDesC8& aNetworkCapable);
williamr@2
   704
williamr@2
   705
private:
williamr@2
   706
williamr@2
   707
	/**
williamr@2
   708
	The play formats supported by this controller.
williamr@2
   709
	*/
williamr@2
   710
	RMMFFormatImplInfoArray iPlayFormats;
williamr@2
   711
williamr@2
   712
	/**
williamr@2
   713
	The record formats supported by this controller.
williamr@2
   714
	*/
williamr@2
   715
	RMMFFormatImplInfoArray iRecordFormats;
williamr@2
   716
williamr@2
   717
	/**
williamr@2
   718
	The interface uid of the resource file definitions of the play formats supported directly by this controller.
williamr@2
   719
	*/
williamr@2
   720
	TUid iPlayFormatCollectionUid;
williamr@2
   721
williamr@2
   722
	/**
williamr@2
   723
	The interface uid of the resource file definitions of the record formats supported directly by this controller.
williamr@2
   724
	*/
williamr@2
   725
	TUid iRecordFormatCollectionUid;
williamr@2
   726
	
williamr@2
   727
	/**
williamr@2
   728
	The heap space required by this controller
williamr@2
   729
	*/
williamr@2
   730
	TUint iHeapSpaceRequired;
williamr@2
   731
	
williamr@2
   732
	/**
williamr@2
   733
	The Uri scheme supported by this plugin
williamr@2
   734
	*/
williamr@2
   735
	CDesC8Array* iUriSchemes;
williamr@2
   736
	
williamr@2
   737
	/**
williamr@2
   738
	The uri priority acquired by this controller
williamr@2
   739
	*/
williamr@2
   740
	TInt iUriPriority;  
williamr@2
   741
	
williamr@2
   742
	/**
williamr@2
   743
	The uri support provided by this controller
williamr@2
   744
	*/
williamr@2
   745
	TBool iIsNetworkCtrl;
williamr@2
   746
	
williamr@2
   747
	/**
williamr@2
   748
	Secure DRM process model supported by this controller
williamr@2
   749
	*/
williamr@2
   750
	TBool  iSupportsSecureDRMProcessMode;
williamr@2
   751
	};
williamr@2
   752
williamr@2
   753
williamr@2
   754
/**
williamr@2
   755
@publishedAll
williamr@2
   756
williamr@2
   757
Contains the parameters used to select mmf plugins from the ECOM registry.
williamr@2
   758
williamr@2
   759
@released
williamr@2
   760
@since 7.0s
williamr@2
   761
*/
williamr@2
   762
class CMMFPluginSelectionParameters : public CBase
williamr@2
   763
	{
williamr@2
   764
public:
williamr@2
   765
williamr@2
   766
/**
williamr@2
   767
Describes the type of preferred supplier match to be performed on the plugins return from
williamr@2
   768
the ECOM registry.
williamr@2
   769
*/
williamr@2
   770
enum TPreferredSupplierMatchType
williamr@2
   771
	{
williamr@2
   772
williamr@2
   773
	/**	No preferred supplier match will be performed.
williamr@2
   774
	*/
williamr@2
   775
	ENoPreferredSupplierMatch,
williamr@2
   776
williamr@2
   777
	/** Plugins from all suppliers will be returned, but those from the preferred supplier will be first in the list.
williamr@2
   778
	*/
williamr@2
   779
	EPreferredSupplierPluginsFirstInList,
williamr@2
   780
williamr@2
   781
	/** Only plugins from the preferred supplier will be returned.
williamr@2
   782
	*/
williamr@2
   783
	EOnlyPreferredSupplierPluginsReturned
williamr@2
   784
	};
williamr@2
   785
/**
williamr@2
   786
Describes the type of media ID match to be performed on the plugins return from
williamr@2
   787
the ECOM registry.
williamr@2
   788
*/
williamr@2
   789
enum TMediaIdMatchType
williamr@2
   790
	{
williamr@2
   791
williamr@2
   792
	/** No media ID match will be performed.
williamr@2
   793
	*/
williamr@2
   794
	ENoMediaIdMatch,
williamr@2
   795
williamr@2
   796
	/** All plugins that support the media ID supplied will be returned, even those that support
williamr@2
   797
	other media IDs.  For example, if an audio plugin is requested, plugins that support
williamr@2
   798
	audio and video will also be returned.
williamr@2
   799
	*/
williamr@2
   800
	EAllowOtherMediaIds,
williamr@2
   801
williamr@2
   802
	/** Only plugins that support the exact media IDs supplied will be returned.  For example, if an
williamr@2
   803
	audio plugin is requested, plugins that only support audio will be returned
williamr@2
   804
	(ie. no audio/video plugins).
williamr@2
   805
	*/
williamr@2
   806
	EAllowOnlySuppliedMediaIds
williamr@2
   807
	};
williamr@2
   808
williamr@2
   809
public:
williamr@2
   810
williamr@2
   811
	/**
williamr@2
   812
	Destructor.  Resets and destroys all member data.
williamr@2
   813
williamr@2
   814
	@since 7.0s
williamr@2
   815
	*/
williamr@2
   816
	virtual ~CMMFPluginSelectionParameters();
williamr@2
   817
williamr@2
   818
williamr@2
   819
	/**
williamr@2
   820
	Sets the preferred supplier of the plugin.
williamr@2
   821
williamr@2
   822
	@param  aPreferredSupplier
williamr@2
   823
	        The preferred supplier of the plugin.
williamr@2
   824
	@param  aMatchType
williamr@2
   825
	        The type of match to be made.
williamr@2
   826
williamr@2
   827
	@since  7.0s
williamr@2
   828
	*/
williamr@2
   829
	IMPORT_C void SetPreferredSupplierL(const TDesC& aPreferredSupplier, TPreferredSupplierMatchType aMatchType);
williamr@2
   830
williamr@2
   831
	/**
williamr@2
   832
	Sets the media IDs that must be supported by the plugin, for example audio, video etc.
williamr@2
   833
williamr@2
   834
	@param  aMediaIds
williamr@2
   835
	        An array of the media IDs that the selected plugins must support.
williamr@2
   836
	@param  aMatchType
williamr@2
   837
	        The type of match to be made.
williamr@2
   838
williamr@2
   839
	@since  7.0s
williamr@2
   840
	*/
williamr@2
   841
	IMPORT_C void SetMediaIdsL(const RArray<TUid>& aMediaIds, TMediaIdMatchType aMatchType);
williamr@2
   842
williamr@2
   843
	/**
williamr@2
   844
	Returns the preferred supplier.  If no preferred supplier has been set, a blank 
williamr@2
   845
	string will be returned.
williamr@2
   846
	
williamr@2
   847
	@return The preferred supplier
williamr@2
   848
	@since 7.0s
williamr@2
   849
	*/
williamr@2
   850
	IMPORT_C const TDesC& PreferredSupplier() const;
williamr@2
   851
williamr@2
   852
	/**
williamr@2
   853
	Returns the type of preferred supplier match to perform.
williamr@2
   854
williamr@2
   855
	@return The preferred supplier match type.
williamr@2
   856
	@since 7.0s
williamr@2
   857
	*/
williamr@2
   858
	IMPORT_C TPreferredSupplierMatchType PreferredSupplierMatchType() const;
williamr@2
   859
williamr@2
   860
	/**
williamr@2
   861
	Returns the list of media IDs that must be supported by the plugin.
williamr@2
   862
williamr@2
   863
	@return The list of media IDs.
williamr@2
   864
williamr@2
   865
	@since	7.0s
williamr@2
   866
	*/
williamr@2
   867
	IMPORT_C const RArray<TUid>& MediaIds() const;
williamr@2
   868
williamr@2
   869
	/**
williamr@2
   870
	Returns the type of preferred supplier match to perform.
williamr@2
   871
	
williamr@2
   872
	@return The preferred supplier match type.
williamr@2
   873
williamr@2
   874
	@since 7.0s
williamr@2
   875
	*/
williamr@2
   876
	IMPORT_C TMediaIdMatchType MediaIdMatchType() const;
williamr@2
   877
williamr@2
   878
	/**
williamr@2
   879
	Returns the uid of the interface to be searched for plugin matches.
williamr@2
   880
williamr@2
   881
	@return The interface uid.
williamr@2
   882
williamr@2
   883
	@since 7.0s
williamr@2
   884
	*/
williamr@2
   885
	IMPORT_C TUid InterfaceUid() const;
williamr@2
   886
williamr@2
   887
protected:
williamr@2
   888
williamr@2
   889
	/**
williamr@2
   890
	Protected constructor.
williamr@2
   891
williamr@2
   892
	Defaults to setting the TPreferredSupplierMatchType enum to ENoPreferredSupplierMatch and TMediaIdMatchType
williamr@2
   893
	to ENoMediaIdMatch.
williamr@2
   894
williamr@2
   895
	@param  aPluginInterfaceUid
williamr@2
   896
	        The plugin's interface UID.
williamr@2
   897
	*/
williamr@2
   898
	CMMFPluginSelectionParameters(TUid aPluginInterfaceUid);
williamr@2
   899
williamr@2
   900
	/**
williamr@2
   901
	Tests whether the specified media is supported by the plugin.
williamr@2
   902
williamr@2
   903
	@param  aPlugin
williamr@2
   904
	        The media to test.
williamr@2
   905
williamr@2
   906
	@return A boolean indicating if the specified media is supported by the plugin. ETrue if the specified 
williamr@2
   907
	        media is supported by the plugin. EFalse if the specified media is not supported by the plugin.
williamr@2
   908
	*/
williamr@2
   909
	TBool CheckMediaIdSupportL(const CMMFPluginImplementationInformation& aPlugin) const;
williamr@2
   910
private:
williamr@2
   911
	TUid iPluginInterfaceUid;
williamr@2
   912
	HBufC* iPreferredSupplier;
williamr@2
   913
	TPreferredSupplierMatchType iPreferredSupplierMatchType;
williamr@2
   914
	RArray<TUid> iMediaIds;
williamr@2
   915
	TMediaIdMatchType iMediaIdMatchType;
williamr@2
   916
	};
williamr@2
   917
williamr@2
   918
/**
williamr@2
   919
@publishedAll
williamr@2
   920
williamr@2
   921
Defines the format support required.
williamr@2
   922
williamr@2
   923
On construction, the selection parameters are blank, causing all plugins to be returned.
williamr@2
   924
williamr@2
   925
@released
williamr@2
   926
@since 7.0s
williamr@2
   927
*/
williamr@2
   928
class CMMFFormatSelectionParameters : public CBase
williamr@2
   929
	{
williamr@2
   930
public:
williamr@2
   931
/**
williamr@2
   932
Describes the type of match to be performed.
williamr@2
   933
The match types are mutually exclusive.
williamr@2
   934
*/
williamr@2
   935
enum TMatchDataType
williamr@2
   936
	{
williamr@2
   937
williamr@2
   938
	/** All plugins will be selected. This is the default option.
williamr@2
   939
	*/
williamr@2
   940
	EMatchAny,
williamr@2
   941
williamr@2
   942
	/** The match will be based on a file extension.
williamr@2
   943
	*/
williamr@2
   944
	EMatchFileExtension,
williamr@2
   945
williamr@2
   946
	/** The match will be based on a mime type.
williamr@2
   947
	*/
williamr@2
   948
	EMatchMimeType,
williamr@2
   949
williamr@2
   950
	/** The match will be based on a header data.
williamr@2
   951
	*/
williamr@2
   952
	EMatchHeaderData,
williamr@2
   953
	
williamr@2
   954
	/** 
williamr@2
   955
	@publishedPartner
williamr@2
   956
	@prototype
williamr@2
   957
	
williamr@2
   958
	The match will be based on Uri details.
williamr@2
   959
	*/
williamr@2
   960
	EMatchUri
williamr@2
   961
	};
williamr@2
   962
williamr@2
   963
public:
williamr@2
   964
	
williamr@2
   965
	/**
williamr@2
   966
	Allocates and constructs a new format selection parameter object with blank parameters.
williamr@2
   967
williamr@2
   968
	Calls NewLC().
williamr@2
   969
williamr@2
   970
	@return A new format selection parameter object.
williamr@2
   971
	*/
williamr@2
   972
	IMPORT_C static CMMFFormatSelectionParameters* NewL();
williamr@2
   973
williamr@2
   974
	/**
williamr@2
   975
    Allocates and constructs a new format selection parameter object with blank parameters, placing it on the 
williamr@2
   976
	cleanup stack.
williamr@2
   977
williamr@2
   978
	@return A new format selection parameter object.
williamr@2
   979
	*/
williamr@2
   980
	IMPORT_C static CMMFFormatSelectionParameters* NewLC();
williamr@2
   981
williamr@2
   982
	/**
williamr@2
   983
	Allocates and constructs a new format selection parameter object with the specified parameters.
williamr@2
   984
williamr@2
   985
	@param  aParams
williamr@2
   986
	        The required parameters.
williamr@2
   987
	@return A new format selection parameter object.
williamr@2
   988
	*/
williamr@2
   989
	static CMMFFormatSelectionParameters* NewL(const CMMFFormatSelectionParameters& aParams);
williamr@2
   990
williamr@2
   991
	/**
williamr@2
   992
	Sets this object to match to a file extension.
williamr@2
   993
williamr@2
   994
	aFileName can be a full filename or just an extension.  If there is no dot in the filename
williamr@2
   995
	and it is 5 characters or less in length then it is assumed to be an extension.  If the first
williamr@2
   996
	character of the filename is a dot, it assumed to be an extension.  Otherwise, the filename
williamr@2
   997
	is parsed using TParse to reveal the extension.
williamr@2
   998
williamr@2
   999
	Once the extension has been extracted, it is converted from unicode to utf8 and copied into
williamr@2
  1000
	iMatchData.
williamr@2
  1001
williamr@2
  1002
	@param  aFileName
williamr@2
  1003
	        The file name to be matched.  Must include the extension.
williamr@2
  1004
williamr@2
  1005
	@since  7.0s
williamr@2
  1006
	*/
williamr@2
  1007
	IMPORT_C void SetMatchToFileNameL(const TDesC& aFileName);
williamr@2
  1008
williamr@2
  1009
	/**
williamr@2
  1010
	Sets this object to match to a file extension specified by a URI
williamr@2
  1011
williamr@2
  1012
	Once the extension has been extracted, it is copied into iMatchData.
williamr@2
  1013
williamr@2
  1014
   	@param  aUri
williamr@2
  1015
	        The URI containing the file name to be matched.  Must include the extension.
williamr@2
  1016
williamr@2
  1017
	@since  7.0s
williamr@2
  1018
	*/
williamr@2
  1019
	IMPORT_C void SetMatchToUriL(const TDesC& aUri);
williamr@2
  1020
	
williamr@2
  1021
	/**
williamr@2
  1022
	@publishedPartner
williamr@2
  1023
	@prototype
williamr@2
  1024
	
williamr@2
  1025
	Sets this object to match to uri scheme and file extension specified by a URI.
williamr@2
  1026
	
williamr@2
  1027
	The Uri scheme and extension are saved in iMatchReqData. Further,iMatchData contains uri extension, 
williamr@2
  1028
	iMatchUriScheme contains uri scheme.
williamr@2
  1029
williamr@2
  1030
	@param  aUri
williamr@2
  1031
	        The URI containing the scheme and uri extension to be matched. 
williamr@2
  1032
williamr@2
  1033
	*/
williamr@2
  1034
	IMPORT_C void SetMatchToUriSupportL(const TDesC& aUri);
williamr@2
  1035
	
williamr@2
  1036
	/**
williamr@2
  1037
	Sets this object to match to a MIME type.
williamr@2
  1038
	
williamr@2
  1039
	@param  aMimeType
williamr@2
  1040
	        The mime type to match.
williamr@2
  1041
williamr@2
  1042
	@since  7.0s
williamr@2
  1043
	*/
williamr@2
  1044
	IMPORT_C void SetMatchToMimeTypeL(const TDesC8& aMimeType);
williamr@2
  1045
williamr@2
  1046
	/**
williamr@2
  1047
	Sets this object to match to a pattern in header data.
williamr@2
  1048
	
williamr@2
  1049
	@param  aHeaderData
williamr@2
  1050
	        The header of the file in question.  This header data will be matched
williamr@2
  1051
	        against the match patterns provided by the plugins.
williamr@2
  1052
williamr@2
  1053
	@since  7.0s
williamr@2
  1054
	*/
williamr@2
  1055
	IMPORT_C void SetMatchToHeaderDataL(const TDesC8& aHeaderData);
williamr@2
  1056
williamr@2
  1057
	/**
williamr@2
  1058
	Returns the data used to perform the plugin match.
williamr@2
  1059
	
williamr@2
  1060
	@return The match data.
williamr@2
  1061
williamr@2
  1062
	@since  7.0s
williamr@2
  1063
	*/
williamr@2
  1064
	IMPORT_C const TDesC8& MatchData() const;
williamr@2
  1065
	
williamr@2
  1066
	/**
williamr@2
  1067
	@publishedPartner
williamr@2
  1068
	@prototype
williamr@2
  1069
	
williamr@2
  1070
	Returns the uri scheme used to perform the plugin match.
williamr@2
  1071
	
williamr@2
  1072
	@return The uri scheme.
williamr@2
  1073
williamr@2
  1074
	*/
williamr@2
  1075
	IMPORT_C const TDesC8& MatchUriScheme() const;
williamr@2
  1076
williamr@2
  1077
	/**
williamr@2
  1078
	Returns the type of the data used to perform the plugin match.
williamr@2
  1079
williamr@2
  1080
	@return The match data type.
williamr@2
  1081
williamr@2
  1082
	@since  7.0s
williamr@2
  1083
	*/
williamr@2
  1084
	IMPORT_C TMatchDataType MatchDataType() const;
williamr@2
  1085
	
williamr@2
  1086
	/**
williamr@2
  1087
	Destructor.
williamr@2
  1088
	*/
williamr@2
  1089
	virtual ~CMMFFormatSelectionParameters();
williamr@2
  1090
protected:
williamr@2
  1091
williamr@2
  1092
	/**
williamr@2
  1093
	Protected constructor.
williamr@2
  1094
	*/
williamr@2
  1095
	CMMFFormatSelectionParameters();
williamr@2
  1096
	void ConstructL(const CMMFFormatSelectionParameters& aParams);
williamr@2
  1097
williamr@2
  1098
private:
williamr@2
  1099
	CMatchData* iMatchReqData;
williamr@2
  1100
	TMatchDataType iMatchDataType;
williamr@2
  1101
	};
williamr@2
  1102
williamr@2
  1103
williamr@2
  1104
williamr@2
  1105
/**
williamr@2
  1106
@publishedAll
williamr@2
  1107
@released
williamr@2
  1108
williamr@2
  1109
Contains the parameters used to select controller plugins from the ECOM registry.
williamr@2
  1110
williamr@2
  1111
@since  7.0s
williamr@2
  1112
*/
williamr@2
  1113
class CMMFControllerPluginSelectionParameters : public CMMFPluginSelectionParameters
williamr@2
  1114
	{
williamr@2
  1115
public:
williamr@2
  1116
williamr@2
  1117
	/**
williamr@2
  1118
	Constructs a new controller selection parameters object.
williamr@2
  1119
williamr@2
  1120
	@return The new object created.
williamr@2
  1121
williamr@2
  1122
	@since  7.0s
williamr@2
  1123
	*/
williamr@2
  1124
	IMPORT_C static CMMFControllerPluginSelectionParameters* NewL();
williamr@2
  1125
williamr@2
  1126
	/**
williamr@2
  1127
	Construct a new controller selection parameters object.
williamr@2
  1128
	
williamr@2
  1129
	@return The new object created.  Note that the new object will be left on the cleanup stack.
williamr@2
  1130
williamr@2
  1131
	@since  7.0s
williamr@2
  1132
	*/
williamr@2
  1133
	IMPORT_C static CMMFControllerPluginSelectionParameters* NewLC();
williamr@2
  1134
williamr@2
  1135
	/**
williamr@2
  1136
	Sets the play format support required.
williamr@2
  1137
williamr@2
  1138
	Note:
williamr@2
  1139
	The play formats supported by the controller plugins will only be retrieved if
williamr@2
  1140
	this method is called.  To get all the play formats supported by the system, call this
williamr@2
  1141
	with a 'blank' CMMFFormatSelectionParameters object.
williamr@2
  1142
williamr@2
  1143
	@param  aRequiredSupport
williamr@2
  1144
	        The play format support required.
williamr@2
  1145
williamr@2
  1146
	@since  7.0s
williamr@2
  1147
	*/
williamr@2
  1148
	IMPORT_C void SetRequiredPlayFormatSupportL(const CMMFFormatSelectionParameters& aRequiredSupport);
williamr@2
  1149
williamr@2
  1150
	/**
williamr@2
  1151
	Sets the record format support required.
williamr@2
  1152
williamr@2
  1153
	Note:
williamr@2
  1154
	The record formats supported by the controller plugins will only be retrieved if
williamr@2
  1155
	this method is called.  To get all the record formats supported by the system, call this
williamr@2
  1156
	with a 'blank' CMMFFormatSelectionParameters object.
williamr@2
  1157
williamr@2
  1158
	@param  aRequiredSupport
williamr@2
  1159
	        The record format support required.
williamr@2
  1160
williamr@2
  1161
	@return The new object created.
williamr@2
  1162
williamr@2
  1163
	@since  7.0s
williamr@2
  1164
	*/
williamr@2
  1165
	IMPORT_C void SetRequiredRecordFormatSupportL(const CMMFFormatSelectionParameters& aRequiredSupport);
williamr@2
  1166
williamr@2
  1167
	/**
williamr@2
  1168
	Retrieves all controller plugins that support the requirements of the caller.
williamr@2
  1169
williamr@2
  1170
	@param  aImplementations	
williamr@2
  1171
	        After this method returns, this array will contain all the
williamr@2
  1172
	        controller plugins that support the caller's requirements.
williamr@2
  1173
	        Note: The array will be emptied by this method.
williamr@2
  1174
williamr@2
  1175
	@since  7.0s
williamr@2
  1176
	*/
williamr@2
  1177
	IMPORT_C virtual void ListImplementationsL(RMMFControllerImplInfoArray& aImplementations) const;
williamr@2
  1178
	
williamr@2
  1179
	/** 
williamr@2
  1180
	Destructor
williamr@2
  1181
	*/
williamr@2
  1182
	virtual ~CMMFControllerPluginSelectionParameters();
williamr@2
  1183
protected:
williamr@2
  1184
	CMMFControllerPluginSelectionParameters();
williamr@2
  1185
	void MatchImplementationToSelectParamsL(RMMFControllerImplInfoArray& aImplementations, const CMMFControllerImplementationInformation& aPlugin, TInt& aArrayPos) const;
williamr@2
  1186
	TInt CheckPreferredSupplierL(RMMFControllerImplInfoArray& aImplementations, const CMMFControllerImplementationInformation& aPlugin) const;
williamr@2
  1187
	TBool CheckFormatSupportL(CMMFFormatSelectionParameters* aSelectParams, const RMMFFormatImplInfoArray& aFormats) const;
williamr@2
  1188
	/**
williamr@2
  1189
	Checks the given Controller for uri support. Uri support may be there 
williamr@2
  1190
	if either requiredscheme or extension matches with that given controller
williamr@2
  1191
	
williamr@2
  1192
	@param  aSelectParams 
williamr@2
  1193
			Describes the selection parameter which a controller needs to 
williamr@2
  1194
			support in order to be selected
williamr@2
  1195
			
williamr@2
  1196
	@param	aPlugin
williamr@2
  1197
			The controller plugin which is checked for uri support 
williamr@2
  1198
			
williamr@2
  1199
	@param	aFormats
williamr@2
  1200
			The play or record formats looked for extension match
williamr@2
  1201
	*/
williamr@2
  1202
	TBool CheckUriSupport(CMMFFormatSelectionParameters* aSelectParams, CMMFControllerImplementationInformation* aPlugin, const RMMFFormatImplInfoArray& aFormats) const;
williamr@2
  1203
williamr@2
  1204
protected:
williamr@2
  1205
	/**
williamr@2
  1206
	The required play format support
williamr@2
  1207
	*/
williamr@2
  1208
	CMMFFormatSelectionParameters* iRequiredPlayFormatSupport;
williamr@2
  1209
	
williamr@2
  1210
	/**
williamr@2
  1211
	The required record format support
williamr@2
  1212
	*/
williamr@2
  1213
	CMMFFormatSelectionParameters* iRequiredRecordFormatSupport;
williamr@2
  1214
	};
williamr@2
  1215
williamr@2
  1216
/**
williamr@2
  1217
@publishedAll
williamr@2
  1218
@released
williamr@2
  1219
williamr@2
  1220
Contains the parameters used to select controller plugins which support SecureDRM model 
williamr@2
  1221
from the ECOM registry. Controller plugins which support SecureDRM model allow play back of DRM-protected
williamr@2
  1222
content by client processes without DRM capability. In such case the controller will be loaded in a separate secure DRM process.
williamr@2
  1223
*/
williamr@2
  1224
class CMMFControllerSecureDrmPluginSelectionParameters : public CMMFControllerPluginSelectionParameters
williamr@2
  1225
	{
williamr@2
  1226
williamr@2
  1227
public:
williamr@2
  1228
	/**
williamr@2
  1229
	Constructs a new controller selection parameters object.
williamr@2
  1230
williamr@2
  1231
	@return The new object created.
williamr@2
  1232
	*/
williamr@2
  1233
	IMPORT_C static CMMFControllerSecureDrmPluginSelectionParameters* NewL();
williamr@2
  1234
williamr@2
  1235
	/**
williamr@2
  1236
	Construct a new controller selection parameters object.
williamr@2
  1237
	
williamr@2
  1238
	@return The new object created.  Note that the new object will be left on the cleanup stack.
williamr@2
  1239
	*/
williamr@2
  1240
	IMPORT_C static CMMFControllerSecureDrmPluginSelectionParameters* NewLC();
williamr@2
  1241
	
williamr@2
  1242
	/**
williamr@2
  1243
	Retrieves all controller plugins that support SecureDRM model and the requirements of the caller.
williamr@2
  1244
williamr@2
  1245
	@param  aImplementations	
williamr@2
  1246
	        After this method returns, this array will contain all the
williamr@2
  1247
	        controller plugins that support the caller's requirements.
williamr@2
  1248
	        Note: The array will be emptied by this method and SecureDRM model.
williamr@2
  1249
	*/
williamr@2
  1250
	IMPORT_C virtual void ListImplementationsL(RMMFControllerImplInfoArray& aImplementations) const;
williamr@2
  1251
williamr@2
  1252
	/** 
williamr@2
  1253
	Destructor
williamr@2
  1254
	*/
williamr@2
  1255
	virtual ~CMMFControllerSecureDrmPluginSelectionParameters() {};
williamr@2
  1256
protected:
williamr@2
  1257
	CMMFControllerSecureDrmPluginSelectionParameters();
williamr@2
  1258
	};
williamr@2
  1259
williamr@2
  1260
class CMmfRecognizerUtil; // declared here.
williamr@2
  1261
/**
williamr@2
  1262
@internalAll
williamr@2
  1263
williamr@2
  1264
MMF utility class used by MMF recognizer
williamr@2
  1265
Maintains an array of CMMFControllerImplementationInformation objects
williamr@2
  1266
so that data headers can be speedily matched against.
williamr@2
  1267
Updates the array when notified by ECOM of a change to the global
williamr@2
  1268
interface implementation registration data.
williamr@2
  1269
*/
williamr@2
  1270
NONSHARABLE_CLASS( CMmfRecognizerUtil ): public CBase
williamr@2
  1271
	{
williamr@2
  1272
public:
williamr@2
  1273
	enum TMatchLevel
williamr@2
  1274
		{
williamr@2
  1275
		EMatchNone, //no match
williamr@2
  1276
		EMatchData, //data match only
williamr@2
  1277
		EMatchName  //suffix and data match
williamr@2
  1278
		};
williamr@2
  1279
public:
williamr@2
  1280
	IMPORT_C static void GetMimeTypesL(CDesC8Array* aMimeTypes);
williamr@2
  1281
williamr@2
  1282
	IMPORT_C static CMmfRecognizerUtil* NewL();
williamr@2
  1283
williamr@2
  1284
	~CMmfRecognizerUtil();
williamr@2
  1285
	IMPORT_C TMatchLevel GetMimeTypeL(const TDesC& aFileName, const TDesC8& aImageData, TDes8& aMimeType);
williamr@2
  1286
williamr@2
  1287
private:
williamr@2
  1288
	CMmfRecognizerUtil();
williamr@2
  1289
	void ConstructL();
williamr@2
  1290
williamr@2
  1291
private:
williamr@2
  1292
	class CBody;
williamr@2
  1293
	CBody* iBody;
williamr@2
  1294
	};
williamr@2
  1295
williamr@2
  1296
williamr@2
  1297
/**
williamr@2
  1298
@publishedAll
williamr@2
  1299
@released
williamr@2
  1300
williamr@2
  1301
Abstract class used to contain the parameters used to select format plugins from the ECOM registry.
williamr@2
  1302
williamr@2
  1303
Note: 
williamr@2
  1304
The classes CMMFFormatEncodePluginSelectionParamters and CMMFFormatDecodePluginSelectionParameters
williamr@2
  1305
should be used to list and select format plugin implementations.
williamr@2
  1306
williamr@2
  1307
@since  7.0s
williamr@2
  1308
*/
williamr@2
  1309
class CMMFFormatPluginSelectionParameters : public CMMFPluginSelectionParameters
williamr@2
  1310
	{
williamr@2
  1311
public:
williamr@2
  1312
williamr@2
  1313
	/**
williamr@2
  1314
	Retrieves all format plugins that support the requirements of the caller.
williamr@2
  1315
williamr@2
  1316
	@param  aImplementations
williamr@2
  1317
	        After this function returns, this array will contain all the
williamr@2
  1318
	        format plugins that support the caller's requirements.
williamr@2
  1319
	        Note: The array will be emptied by this method.
williamr@2
  1320
williamr@2
  1321
	@since  7.0s
williamr@2
  1322
	*/
williamr@2
  1323
	IMPORT_C void ListImplementationsL(RMMFFormatImplInfoArray& aImplementations) const;
williamr@2
  1324
williamr@2
  1325
	/**
williamr@2
  1326
	Sets the format support required.
williamr@2
  1327
williamr@2
  1328
	@param  aRequiredSupport
williamr@2
  1329
	        The format support required.
williamr@2
  1330
williamr@2
  1331
	@since  7.0s
williamr@2
  1332
	*/
williamr@2
  1333
	IMPORT_C void SetRequiredFormatSupportL(const CMMFFormatSelectionParameters& aRequiredSupport);
williamr@2
  1334
williamr@2
  1335
	/**
williamr@2
  1336
	Destructor.
williamr@2
  1337
	*/
williamr@2
  1338
	virtual ~CMMFFormatPluginSelectionParameters();
williamr@2
  1339
protected:
williamr@2
  1340
	/**
williamr@2
  1341
	Protected constructor.
williamr@2
  1342
	*/
williamr@2
  1343
	CMMFFormatPluginSelectionParameters(TUid aInterfaceUid);
williamr@2
  1344
williamr@2
  1345
	void MatchImplementationToSelectParamsL(RMMFFormatImplInfoArray& aImplementations, const CMMFFormatImplementationInformation& aPlugin, TInt& aArrayPos) const;
williamr@2
  1346
	TInt CheckPreferredSupplierL(RMMFFormatImplInfoArray& aImplementations, const CMMFFormatImplementationInformation& aPlugin) const;
williamr@2
  1347
	TBool CheckFormatSupportL(const CMMFFormatImplementationInformation& aPlugin) const;
williamr@2
  1348
protected:
williamr@2
  1349
	/**
williamr@2
  1350
	The format support required
williamr@2
  1351
	*/
williamr@2
  1352
	CMMFFormatSelectionParameters* iRequiredFormatSupport;
williamr@2
  1353
	};
williamr@2
  1354
williamr@2
  1355
/**
williamr@2
  1356
@publishedAll
williamr@2
  1357
@released
williamr@2
  1358
williamr@2
  1359
Class used to list and select plugins implementing the CMMFFormatEncode interface.
williamr@2
  1360
williamr@2
  1361
@since 7.0s
williamr@2
  1362
*/
williamr@2
  1363
class CMMFFormatEncodePluginSelectionParameters : public CMMFFormatPluginSelectionParameters
williamr@2
  1364
	{
williamr@2
  1365
public:
williamr@2
  1366
williamr@2
  1367
	/**
williamr@2
  1368
	Construct a new format encode selection parameters object.
williamr@2
  1369
	
williamr@2
  1370
	@return The new object created.
williamr@2
  1371
williamr@2
  1372
	@since  7.0s
williamr@2
  1373
	*/
williamr@2
  1374
	IMPORT_C static CMMFFormatEncodePluginSelectionParameters* NewL();
williamr@2
  1375
williamr@2
  1376
	/**
williamr@2
  1377
	Constructs a new format encode selection parameters object.
williamr@2
  1378
williamr@2
  1379
	@return The new object created.  Note that the new object will be left on the cleanup stack.
williamr@2
  1380
williamr@2
  1381
	@since  7.0s
williamr@2
  1382
	*/
williamr@2
  1383
	IMPORT_C static CMMFFormatEncodePluginSelectionParameters* NewLC();
williamr@2
  1384
protected:
williamr@2
  1385
	/**
williamr@2
  1386
	Protected constructor.
williamr@2
  1387
	*/
williamr@2
  1388
	CMMFFormatEncodePluginSelectionParameters();
williamr@2
  1389
	};
williamr@2
  1390
williamr@2
  1391
williamr@2
  1392
/**
williamr@2
  1393
@publishedAll
williamr@2
  1394
@released
williamr@2
  1395
williamr@2
  1396
Class used to list and select plugins implementing the CMMFFormatDecode interface.
williamr@2
  1397
williamr@2
  1398
@since 7.0s
williamr@2
  1399
*/
williamr@2
  1400
class CMMFFormatDecodePluginSelectionParameters : public CMMFFormatPluginSelectionParameters
williamr@2
  1401
	{
williamr@2
  1402
public:
williamr@2
  1403
williamr@2
  1404
	/**
williamr@2
  1405
	Constructs a new format decode selection parameters object.
williamr@2
  1406
williamr@2
  1407
	@return The new object created.
williamr@2
  1408
	
williamr@2
  1409
	@since  7.0s
williamr@2
  1410
	*/
williamr@2
  1411
	IMPORT_C static CMMFFormatDecodePluginSelectionParameters* NewL();
williamr@2
  1412
williamr@2
  1413
	/**
williamr@2
  1414
	Constructs a new format decode selection parameters object.
williamr@2
  1415
williamr@2
  1416
	@return The new object created. Note that the new object will be left on the cleanup stack.
williamr@2
  1417
williamr@2
  1418
	@since  7.0s
williamr@2
  1419
	*/
williamr@2
  1420
	IMPORT_C static CMMFFormatDecodePluginSelectionParameters* NewLC();
williamr@2
  1421
protected:
williamr@2
  1422
	/**
williamr@2
  1423
	Protected constructor.
williamr@2
  1424
	*/
williamr@2
  1425
	CMMFFormatDecodePluginSelectionParameters();
williamr@2
  1426
	};
williamr@2
  1427
williamr@2
  1428
williamr@2
  1429
williamr@2
  1430
/** 
williamr@2
  1431
@publishedAll
williamr@2
  1432
@released
williamr@2
  1433
williamr@2
  1434
Template class CleanupResetAndDestroy to clean up the array
williamr@2
  1435
of implementation information from the cleanup stack.
williamr@2
  1436
*/
williamr@2
  1437
williamr@2
  1438
template <class T>
williamr@2
  1439
class CleanupResetAndDestroy
williamr@2
  1440
	{
williamr@2
  1441
public:
williamr@2
  1442
	/**
williamr@2
  1443
	Puts an item on the cleanup stack.
williamr@2
  1444
williamr@2
  1445
	@param  aRef 
williamr@2
  1446
	        The implementation information to be put on the cleanup stack.
williamr@2
  1447
	*/
williamr@2
  1448
	inline static void PushL(T& aRef);
williamr@2
  1449
private:
williamr@2
  1450
	static void ResetAndDestroy(TAny *aPtr);
williamr@2
  1451
	};
williamr@2
  1452
template <class T>
williamr@2
  1453
inline void CleanupResetAndDestroyPushL(T& aRef);
williamr@2
  1454
template <class T>
williamr@2
  1455
inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
williamr@2
  1456
	{CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));}
williamr@2
  1457
template <class T>
williamr@2
  1458
void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
williamr@2
  1459
	{(STATIC_CAST(T*,aPtr))->ResetAndDestroy();}
williamr@2
  1460
template <class T>
williamr@2
  1461
inline void CleanupResetAndDestroyPushL(T& aRef)
williamr@2
  1462
	{CleanupResetAndDestroy<T>::PushL(aRef);}
williamr@2
  1463
williamr@2
  1464
williamr@2
  1465
#endif