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