williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // 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: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // mmf\common\mmfcontrollerpluginresolver.h williamr@2: // williamr@2: // williamr@2: williamr@2: #ifndef MMF_COMMON_MMFCONTROLLERPLUGINRESOLVER_H williamr@2: #define MMF_COMMON_MMFCONTROLLERPLUGINRESOLVER_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Default heap size for the controller thread williamr@2: */ williamr@2: const TUint KMMFDefaultControllerThreadHeapSize = 0x100000; //1MB williamr@2: williamr@2: williamr@2: class CMMFFormatImplementationInformation; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Array of CMMFFormatImplementationInformation williamr@2: */ williamr@2: typedef RPointerArray RMMFFormatImplInfoArray; williamr@2: williamr@2: class CMMFControllerImplementationInformation; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Array of CMMFControllerImplementationInformation williamr@2: */ williamr@2: typedef RPointerArray RMMFControllerImplInfoArray; williamr@2: williamr@2: /** williamr@2: @internalComponent williamr@2: williamr@2: Interface to be implemented by customers of the class TaggedDataParser. williamr@2: */ williamr@2: class MTaggedDataParserClient williamr@2: { williamr@2: public: williamr@2: virtual void ProcessTaggedDataL(const TDesC8& aTag, const TDesC8& aData) = 0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @internalComponent williamr@2: williamr@2: Utility class used to parse data separated by xml-style tags. williamr@2: */ williamr@2: class TaggedDataParser williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Splits aData into xml-style tags and values, and gets aClient to process each tag/value pair. williamr@2: */ williamr@2: static void ParseTaggedDataL(const TDesC8& aData, MTaggedDataParserClient& aClient); williamr@2: williamr@2: /** williamr@2: Converts a string to a uid. If the string begin with "0x" it will be parsed as Hex, else Decimal. williamr@2: */ williamr@2: static void ConvertTextToUidL(const TDesC8& aData, TUid& aUid); williamr@2: williamr@2: /** williamr@2: Converts a string to a TUint. The string must begin with "0x" and be 10 characters long, williamr@2: otherwise it is considered corrupt. williamr@2: */ williamr@2: static void ConvertTextToTUintL(const TDesC8& aData, TUint& aUid); williamr@2: williamr@2: }; williamr@2: williamr@2: class CMatchData; williamr@2: williamr@2: class CDesC8Array; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: williamr@2: Abstract class that contains basic information about ECom Multimedia plugins. williamr@2: williamr@2: @released williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFPluginImplementationInformation : public CBase williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Returns the uid of this particular plugin implementation. williamr@2: This is the UID used to instantiate this multimedia plugin. williamr@2: williamr@2: @return The implementation uid. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TUid Uid() const; williamr@2: williamr@2: /** williamr@2: Returns the display name of this plugin implementation. williamr@2: williamr@2: @return The display name. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const TDesC& DisplayName() const; williamr@2: williamr@2: /** williamr@2: Returns the name of the supplier of this plugin implementation, e.g. "Symbian". williamr@2: williamr@2: @return The plugin supplier. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const TDesC& Supplier() const; williamr@2: williamr@2: /** williamr@2: Returns the version number of this plugin. williamr@2: williamr@2: @return The version number. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TInt Version() const; williamr@2: williamr@2: /** williamr@2: Returns the array of media IDs supported by this plugin. williamr@2: williamr@2: The media ID can be used by clients to determine whether the plugin supports audio or williamr@2: video data (or both). A UID is used for the media ID to provide future extensibility. williamr@2: williamr@2: @return The array of media IDs. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const RArray& SupportedMediaIds() const; williamr@2: williamr@2: /** williamr@2: Tests whether this plugin was supplied by aSupplier. williamr@2: williamr@2: @param aSupplier williamr@2: The required supplier. williamr@2: williamr@2: @return A boolean indicating if this plugin was supplied by aSupplier. ETrue if this plugin was supplied williamr@2: by aSupplier, EFalse if not. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TBool SupportsSupplier(const TDesC& aSupplier) const; williamr@2: williamr@2: /** williamr@2: Tests whether this plugin supports aMediaId. williamr@2: williamr@2: @param aMediaId williamr@2: The required media id. williamr@2: williamr@2: @return A boolean indicating if the plugin supports aMediaId. ETrue if this plugin supports aMediaId, EFalse if not. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TBool SupportsMediaId(TUid aMediaId) const; williamr@2: williamr@2: /** williamr@2: Destructor. williamr@2: */ williamr@2: virtual ~CMMFPluginImplementationInformation(); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: */ williamr@2: CMMFPluginImplementationInformation(); williamr@2: williamr@2: /** williamr@2: Sets the supplier. Takes a copy of aData. williamr@2: */ williamr@2: void SetSupplierL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: Adds a media id. aData is parsed to find the uid of the media id to be added. williamr@2: */ williamr@2: void AddMediaIdL(const TDesC8& aData); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: The UID of this plugin. williamr@2: */ williamr@2: TUid iUid; williamr@2: williamr@2: /** williamr@2: The display name of this plugin. williamr@2: */ williamr@2: HBufC* iDisplayName; williamr@2: williamr@2: /** williamr@2: The supplier of this plugin. williamr@2: */ williamr@2: HBufC* iSupplier; williamr@2: williamr@2: /** williamr@2: The version number of this plugin. williamr@2: */ williamr@2: TInt iVersion; williamr@2: williamr@2: /** williamr@2: The media ids supported by this plugin. williamr@2: */ williamr@2: RArray iMediaIds; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Contains format support information retrieved from the ECom registry. williamr@2: williamr@2: An object of this type may describe either a concrete format plugin (ie a CMMFFormatEncode or a williamr@2: CMMFFormatDecode implementation) or a format supported by a controller plugin. williamr@2: williamr@2: The object is created using a CImplementationInformation object retrieved from the ECom registry. williamr@2: All relevant data is copied out of the CImplementationInformation object, and its opaque data is williamr@2: parsed to provide the supplier, supported media ids, supported mime types, supported file extensions, williamr@2: and supported header data matches. williamr@2: williamr@2: Notes for Format Plugin developers: williamr@2: @code williamr@2: The opaque data section of the ECom plugin resource file must be in the format: williamr@2: williamr@2: opaque_data = "Data 1Data 2Data 3Data 4[...]Data N"; williamr@2: williamr@2: The preceding the data determines the meaning of the data. The following are the possible tags: williamr@2: williamr@2: - Supplier williamr@2: - Media Id williamr@2: - Mime Type williamr@2: - File Extension williamr@2: - Header Data williamr@2: - Custom Interfaces williamr@2: williamr@2: UIDs must always be in hex in the format '0x12345678', must include the '0x' and be 10 characters long williamr@2: @endcode williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFFormatImplementationInformation : public CMMFPluginImplementationInformation, MTaggedDataParserClient williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Constructs a new format implementation information object. williamr@2: williamr@2: @param aImplInfo williamr@2: The ECOM implementation information williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: static CMMFFormatImplementationInformation* NewL(const CImplementationInformation& aImplInfo); williamr@2: williamr@2: /** williamr@2: Constructs a new format implementation information object. williamr@2: williamr@2: @param aImplInfo williamr@2: The ECOM implementation information williamr@2: williamr@2: @return The new object created. Note that this will be on the cleanup stack. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: static CMMFFormatImplementationInformation* NewLC(const CImplementationInformation& aImplInfo); williamr@2: williamr@2: /** williamr@2: Destructor williamr@2: */ williamr@2: virtual ~CMMFFormatImplementationInformation(); williamr@2: williamr@2: /** williamr@2: Returns the array of supported file extensions. williamr@2: williamr@2: @return The array of file extensions. williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const CDesC8Array& SupportedFileExtensions() const; williamr@2: williamr@2: /** williamr@2: Returns the array of supported mime types. williamr@2: williamr@2: @return The array of mime types. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const CDesC8Array& SupportedMimeTypes() const; williamr@2: williamr@2: /** williamr@2: Returns the array of supported header data matches. williamr@2: williamr@2: @return The array of header data. williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const CDesC8Array& SupportedHeaderData() const; williamr@2: williamr@2: /** williamr@2: Tests whether this format provides support for the specified file extension, aFileExtension. williamr@2: williamr@2: @param aFileExtension williamr@2: The requested file extension. Must be the extension only, and contain the dot '.' williamr@2: williamr@2: @return A boolean indicating if the specified file extension is supported. ETrue if this format provides williamr@2: the required support, EFalse if it does not. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TBool SupportsFileExtension(const TDesC8& aFileExtension) const; williamr@2: williamr@2: /** williamr@2: Tests whether this format provides support for aMimeType. williamr@2: williamr@2: @param aMimeType williamr@2: The requested mime type. williamr@2: williamr@2: @return A boolean indicating if the format is supported. ETrue if this format provides the required support, EFalse if not. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TBool SupportsMimeType(const TDesC8& aMimeType) const; williamr@2: williamr@2: /** williamr@2: Tests whether this format provides support for aHeaderData. williamr@2: aHeaderData is searched for each chunk supported by this format. williamr@2: williamr@2: @param aHeaderData williamr@2: The requested header data. williamr@2: williamr@2: @return A boolean indicating if aHeaderData is supported. ETrue if this format provides the required support, EFalse if not. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TBool SupportsHeaderDataL(const TDesC8& aHeaderData) const; williamr@2: williamr@2: /** williamr@2: Tests whether this format provides support for Custom Interfaces. williamr@2: williamr@2: @return A boolean indicating if Custom Interfaces are supported. ETrue if this format provides the required support, EFalse if not. williamr@2: */ williamr@2: IMPORT_C TBool SupportsCustomInterfaces() const; williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: Constructor williamr@2: */ williamr@2: CMMFFormatImplementationInformation(); williamr@2: williamr@2: /** williamr@2: 2nd phase constructor williamr@2: */ williamr@2: void ConstructL(const CImplementationInformation& aImplInfo); williamr@2: williamr@2: /** williamr@2: Adds a file extension to the array of extensions supported by this format. williamr@2: */ williamr@2: void AddFileExtensionL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: Adds a mime type to the array of types supported by this format. williamr@2: */ williamr@2: void AddMimeTypeL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: Adds a chunk of header data to the array of chunks supported by this format. williamr@2: */ williamr@2: void AddHeaderDataL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: from MTaggedDataParserClient williamr@2: */ williamr@2: void ProcessTaggedDataL(const TDesC8& aTag, const TDesC8& aData); williamr@2: williamr@2: private: williamr@2: class CBody; williamr@2: /** williamr@2: CMMFFormatImplementationInformation body williamr@2: */ williamr@2: CBody* iBody; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Contains controller plugin information retrieved from the ECom registry. williamr@2: williamr@2: The object is created using a CImplementationInformation object retrieved from the ECom registry. williamr@2: All relevant data is copied out of the CImplementationInformation object, and its opaque data is williamr@2: parsed to provide the supplier, supported media IDs. williamr@2: williamr@2: Notes for Format Plugin developers: williamr@2: The exact formats supported by the controller plugin are calculated by: williamr@2: williamr@2: 1. The formats supported by the controller plugin itself must be declared in separate entries in the williamr@2: controller plugin resource file. Two interface UIDs should be defined by the plugin writer - one williamr@2: for the play formats supported, the other for the record formats supported. The play formats are williamr@2: then listed as implementations of the play format interface uid, and likewise the record formats. williamr@2: williamr@2: 2. Format plugins (CMMFFormatEncode and CMMFFormatDecode) declare which controller plugin they williamr@2: extend. ECom is search for the format plugins that extend the controller plugin, and they williamr@2: are added to the list. williamr@2: williamr@2: The opaque data section of the ECom plugin resource file must be in the format: williamr@2: @code williamr@2: williamr@2: opaque_data = "Data 1Data 2Data 3Data 4[...]Data N"; williamr@2: williamr@2: The preceding the data determines the meaning of the data. The following are the possible tags: williamr@2: williamr@2: - Supplier - must be only one williamr@2: - Media Id williamr@2:

- UID of play format 'interface' - must be only one williamr@2: - UID of record format 'interface' - must be only one williamr@2: williamr@2: UIDs must always be in hex in the format '0x12345678', must include the '0x' and be 10 characters long. williamr@2: @endcode williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFControllerImplementationInformation : public CMMFPluginImplementationInformation, MTaggedDataParserClient williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Constructs a new controller implementation information object. williamr@2: williamr@2: @param aImplInfo williamr@2: The ECOM implementation information. williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @internalTechnology williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: static CMMFControllerImplementationInformation* NewL(const CImplementationInformation& aImplInfo); williamr@2: williamr@2: /** williamr@2: Constructs a new controller implementation information object. williamr@2: williamr@2: Note: williamr@2: The new object will be on the cleanup stack. williamr@2: williamr@2: @param aImplInfo williamr@2: The ECOM implementation information williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @internalTechnology williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: static CMMFControllerImplementationInformation* NewLC(const CImplementationInformation& aImplInfo); williamr@2: williamr@2: /** williamr@2: Constructs a new controller implementation information object. williamr@2: williamr@2: @param aUid williamr@2: The Uid of the controller to obtain controller implementation information williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFControllerImplementationInformation* NewL(TUid aUid); williamr@2: williamr@2: /** williamr@2: Destructor. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: ~CMMFControllerImplementationInformation(); williamr@2: williamr@2: /** williamr@2: Returns the array of play formats supported by this controller. williamr@2: williamr@2: @return The play formats supported. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const RMMFFormatImplInfoArray& PlayFormats() const; williamr@2: williamr@2: /** williamr@2: Returns the array of record formats supported by this controller. williamr@2: williamr@2: @return The record formats supported. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const RMMFFormatImplInfoArray& RecordFormats() const; williamr@2: williamr@2: /** williamr@2: Returns the heap space required by this controller. williamr@2: williamr@2: @return The heap space required. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TUint HeapSpaceRequired() const; williamr@2: williamr@2: /** williamr@2: Queries the ECom registry for the play formats supported. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void GetPlayFormatsL(); williamr@2: williamr@2: /** williamr@2: Queries the ECom registry for the record formats supported. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void GetRecordFormatsL(); williamr@2: williamr@2: /** williamr@2: Returns the uri schemes of this plugin. williamr@2: williamr@2: @return The array of uri schemes. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: IMPORT_C const CDesC8Array& SupportedUriSchemes() const; williamr@2: williamr@2: /** williamr@2: Tests whether the plugin supports aUriScheme. williamr@2: williamr@2: @param aUriScheme williamr@2: The required Uri Scheme. williamr@2: williamr@2: @return A boolean indicating if the plugin supports aUriScheme. ETrue if this plugin supports aUriScheme, EFalse if not. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: IMPORT_C TBool SupportsUriScheme(const TDesC8& aUriScheme) const; williamr@2: williamr@2: /** williamr@2: Tests whether the controller plugin supports url williamr@2: williamr@2: @return A boolean indicating if the plugin supports url. ETrue for uri supporting controller, EFalse if not. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: IMPORT_C TBool SupportsNetworkCapability() const; williamr@2: williamr@2: /** williamr@2: Sets the uri priority of this controller williamr@2: williamr@2: @param aUriPriority williamr@2: The Uri priority to be assigned. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: IMPORT_C void SetUriPriority(TInt aUriPriority); williamr@2: williamr@2: /** williamr@2: Retrieves the uri priority of this controller. williamr@2: Higher priority implies greater number. ie UriPriority() returning 3 williamr@2: has higher prioirty than UriPriority() returning 1. williamr@2: williamr@2: @return The assigned Uri priority. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: IMPORT_C TInt UriPriority() const; williamr@2: williamr@2: /** williamr@2: Check whether the controller plugin supports secure DRM process mode williamr@2: williamr@2: @return A boolean indicating if the plugin supports secure DRM process mode. williamr@2: ETrue for secure DRM process mode supporting controller, EFalse if not. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: IMPORT_C TBool SupportsSecureDRMProcessMode() const; williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: CMMFControllerImplementationInformation(); williamr@2: williamr@2: /** williamr@2: 2nd phase constructor. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void ConstructL(const CImplementationInformation& aImplInfo); williamr@2: williamr@2: /** williamr@2: Parses aData to get the collection UID of the play formats supported by this controller. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void SetPlayFormatCollectionUidL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: Parses aData to get the collection UID of the record formats supported by this controller. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void SetRecordFormatCollectionUidL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: Parses aData to get the size of the stack the controller requires. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void SetHeapSizeL(const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: From MTaggedDataParserClient. williamr@2: */ williamr@2: void ProcessTaggedDataL(const TDesC8& aTag, const TDesC8& aData); williamr@2: williamr@2: /** williamr@2: Queries the ECom registry for: williamr@2: - all registry entries with an interface UID of aFormatCollectionUid williamr@2: - all format plugins with an interface UID of aFormatPluginCollectionUid (ie CMMFFormatEncode williamr@2: or CMMFFormatDecode) that have the UID of this controller plugin in the default_data field williamr@2: of their ECom resource file. williamr@2: williamr@2: CMMFFormatImplementationInformation objects are created for each entry returned, and appended to williamr@2: aFormatArray. williamr@2: williamr@2: @param aFormatCollectionUid williamr@2: See above. williamr@2: @param aFormatPluginCollectionUid williamr@2: See above. williamr@2: @param aFormatArray williamr@2: See above. williamr@2: williamr@2: @internalTechnology williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: void GetFormatsL(TUid aFormatCollectionUid, TUid aFormatPluginCollectionUid, RMMFFormatImplInfoArray& aFormatArray); williamr@2: williamr@2: /** williamr@2: Creates CMMFFormatImplementationInformation objects for all CImplementationInformation objects williamr@2: in aEcomArray. Any corrupt objects are ignored. The objects created are added to aFormatArray. williamr@2: williamr@2: @param aEcomArray williamr@2: See above. williamr@2: @param aFormatArray williamr@2: See above. williamr@2: williamr@2: @internalTechnology williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: void AddFormatsSwallowCorruptL(RImplInfoPtrArray& aEcomArray, RMMFFormatImplInfoArray& aFormatArray); williamr@2: williamr@2: /** williamr@2: Sets the Uri Scheme found in opaque data williamr@2: williamr@2: @param aUriScheme williamr@2: Gives the uri scheme supported by the controller williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void SetUriSchemeL(const TDesC8& aUriScheme); williamr@2: williamr@2: /** williamr@2: Sets the Network capability found in opaque data williamr@2: williamr@2: @param aNetworkCapable williamr@2: Declares the incapability to support uri if matches to 'yes'. williamr@2: If this is the case, iIsNetworkCtrl is set to EFalse williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: void SetNetworkCapabilityL(const TDesC8& aNetworkCapable); williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: The play formats supported by this controller. williamr@2: */ williamr@2: RMMFFormatImplInfoArray iPlayFormats; williamr@2: williamr@2: /** williamr@2: The record formats supported by this controller. williamr@2: */ williamr@2: RMMFFormatImplInfoArray iRecordFormats; williamr@2: williamr@2: /** williamr@2: The interface uid of the resource file definitions of the play formats supported directly by this controller. williamr@2: */ williamr@2: TUid iPlayFormatCollectionUid; williamr@2: williamr@2: /** williamr@2: The interface uid of the resource file definitions of the record formats supported directly by this controller. williamr@2: */ williamr@2: TUid iRecordFormatCollectionUid; williamr@2: williamr@2: /** williamr@2: The heap space required by this controller williamr@2: */ williamr@2: TUint iHeapSpaceRequired; williamr@2: williamr@2: /** williamr@2: The Uri scheme supported by this plugin williamr@2: */ williamr@2: CDesC8Array* iUriSchemes; williamr@2: williamr@2: /** williamr@2: The uri priority acquired by this controller williamr@2: */ williamr@2: TInt iUriPriority; williamr@2: williamr@2: /** williamr@2: The uri support provided by this controller williamr@2: */ williamr@2: TBool iIsNetworkCtrl; williamr@2: williamr@2: /** williamr@2: Secure DRM process model supported by this controller williamr@2: */ williamr@2: TBool iSupportsSecureDRMProcessMode; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: williamr@2: Contains the parameters used to select mmf plugins from the ECOM registry. williamr@2: williamr@2: @released williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFPluginSelectionParameters : public CBase williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Describes the type of preferred supplier match to be performed on the plugins return from williamr@2: the ECOM registry. williamr@2: */ williamr@2: enum TPreferredSupplierMatchType williamr@2: { williamr@2: williamr@2: /** No preferred supplier match will be performed. williamr@2: */ williamr@2: ENoPreferredSupplierMatch, williamr@2: williamr@2: /** Plugins from all suppliers will be returned, but those from the preferred supplier will be first in the list. williamr@2: */ williamr@2: EPreferredSupplierPluginsFirstInList, williamr@2: williamr@2: /** Only plugins from the preferred supplier will be returned. williamr@2: */ williamr@2: EOnlyPreferredSupplierPluginsReturned williamr@2: }; williamr@2: /** williamr@2: Describes the type of media ID match to be performed on the plugins return from williamr@2: the ECOM registry. williamr@2: */ williamr@2: enum TMediaIdMatchType williamr@2: { williamr@2: williamr@2: /** No media ID match will be performed. williamr@2: */ williamr@2: ENoMediaIdMatch, williamr@2: williamr@2: /** All plugins that support the media ID supplied will be returned, even those that support williamr@2: other media IDs. For example, if an audio plugin is requested, plugins that support williamr@2: audio and video will also be returned. williamr@2: */ williamr@2: EAllowOtherMediaIds, williamr@2: williamr@2: /** Only plugins that support the exact media IDs supplied will be returned. For example, if an williamr@2: audio plugin is requested, plugins that only support audio will be returned williamr@2: (ie. no audio/video plugins). williamr@2: */ williamr@2: EAllowOnlySuppliedMediaIds williamr@2: }; williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: Destructor. Resets and destroys all member data. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual ~CMMFPluginSelectionParameters(); williamr@2: williamr@2: williamr@2: /** williamr@2: Sets the preferred supplier of the plugin. williamr@2: williamr@2: @param aPreferredSupplier williamr@2: The preferred supplier of the plugin. williamr@2: @param aMatchType williamr@2: The type of match to be made. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetPreferredSupplierL(const TDesC& aPreferredSupplier, TPreferredSupplierMatchType aMatchType); williamr@2: williamr@2: /** williamr@2: Sets the media IDs that must be supported by the plugin, for example audio, video etc. williamr@2: williamr@2: @param aMediaIds williamr@2: An array of the media IDs that the selected plugins must support. williamr@2: @param aMatchType williamr@2: The type of match to be made. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetMediaIdsL(const RArray& aMediaIds, TMediaIdMatchType aMatchType); williamr@2: williamr@2: /** williamr@2: Returns the preferred supplier. If no preferred supplier has been set, a blank williamr@2: string will be returned. williamr@2: williamr@2: @return The preferred supplier williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const TDesC& PreferredSupplier() const; williamr@2: williamr@2: /** williamr@2: Returns the type of preferred supplier match to perform. williamr@2: williamr@2: @return The preferred supplier match type. williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TPreferredSupplierMatchType PreferredSupplierMatchType() const; williamr@2: williamr@2: /** williamr@2: Returns the list of media IDs that must be supported by the plugin. williamr@2: williamr@2: @return The list of media IDs. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const RArray& MediaIds() const; williamr@2: williamr@2: /** williamr@2: Returns the type of preferred supplier match to perform. williamr@2: williamr@2: @return The preferred supplier match type. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TMediaIdMatchType MediaIdMatchType() const; williamr@2: williamr@2: /** williamr@2: Returns the uid of the interface to be searched for plugin matches. williamr@2: williamr@2: @return The interface uid. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TUid InterfaceUid() const; williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: Protected constructor. williamr@2: williamr@2: Defaults to setting the TPreferredSupplierMatchType enum to ENoPreferredSupplierMatch and TMediaIdMatchType williamr@2: to ENoMediaIdMatch. williamr@2: williamr@2: @param aPluginInterfaceUid williamr@2: The plugin's interface UID. williamr@2: */ williamr@2: CMMFPluginSelectionParameters(TUid aPluginInterfaceUid); williamr@2: williamr@2: /** williamr@2: Tests whether the specified media is supported by the plugin. williamr@2: williamr@2: @param aPlugin williamr@2: The media to test. williamr@2: williamr@2: @return A boolean indicating if the specified media is supported by the plugin. ETrue if the specified williamr@2: media is supported by the plugin. EFalse if the specified media is not supported by the plugin. williamr@2: */ williamr@2: TBool CheckMediaIdSupportL(const CMMFPluginImplementationInformation& aPlugin) const; williamr@2: private: williamr@2: TUid iPluginInterfaceUid; williamr@2: HBufC* iPreferredSupplier; williamr@2: TPreferredSupplierMatchType iPreferredSupplierMatchType; williamr@2: RArray iMediaIds; williamr@2: TMediaIdMatchType iMediaIdMatchType; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: williamr@2: Defines the format support required. williamr@2: williamr@2: On construction, the selection parameters are blank, causing all plugins to be returned. williamr@2: williamr@2: @released williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFFormatSelectionParameters : public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Describes the type of match to be performed. williamr@2: The match types are mutually exclusive. williamr@2: */ williamr@2: enum TMatchDataType williamr@2: { williamr@2: williamr@2: /** All plugins will be selected. This is the default option. williamr@2: */ williamr@2: EMatchAny, williamr@2: williamr@2: /** The match will be based on a file extension. williamr@2: */ williamr@2: EMatchFileExtension, williamr@2: williamr@2: /** The match will be based on a mime type. williamr@2: */ williamr@2: EMatchMimeType, williamr@2: williamr@2: /** The match will be based on a header data. williamr@2: */ williamr@2: EMatchHeaderData, williamr@2: williamr@2: /** williamr@2: @publishedPartner williamr@2: @prototype williamr@2: williamr@2: The match will be based on Uri details. williamr@2: */ williamr@2: EMatchUri williamr@2: }; williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: Allocates and constructs a new format selection parameter object with blank parameters. williamr@2: williamr@2: Calls NewLC(). williamr@2: williamr@2: @return A new format selection parameter object. williamr@2: */ williamr@2: IMPORT_C static CMMFFormatSelectionParameters* NewL(); williamr@2: williamr@2: /** williamr@2: Allocates and constructs a new format selection parameter object with blank parameters, placing it on the williamr@2: cleanup stack. williamr@2: williamr@2: @return A new format selection parameter object. williamr@2: */ williamr@2: IMPORT_C static CMMFFormatSelectionParameters* NewLC(); williamr@2: williamr@2: /** williamr@2: Allocates and constructs a new format selection parameter object with the specified parameters. williamr@2: williamr@2: @param aParams williamr@2: The required parameters. williamr@2: @return A new format selection parameter object. williamr@2: */ williamr@2: static CMMFFormatSelectionParameters* NewL(const CMMFFormatSelectionParameters& aParams); williamr@2: williamr@2: /** williamr@2: Sets this object to match to a file extension. williamr@2: williamr@2: aFileName can be a full filename or just an extension. If there is no dot in the filename williamr@2: and it is 5 characters or less in length then it is assumed to be an extension. If the first williamr@2: character of the filename is a dot, it assumed to be an extension. Otherwise, the filename williamr@2: is parsed using TParse to reveal the extension. williamr@2: williamr@2: Once the extension has been extracted, it is converted from unicode to utf8 and copied into williamr@2: iMatchData. williamr@2: williamr@2: @param aFileName williamr@2: The file name to be matched. Must include the extension. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetMatchToFileNameL(const TDesC& aFileName); williamr@2: williamr@2: /** williamr@2: Sets this object to match to a file extension specified by a URI williamr@2: williamr@2: Once the extension has been extracted, it is copied into iMatchData. williamr@2: williamr@2: @param aUri williamr@2: The URI containing the file name to be matched. Must include the extension. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetMatchToUriL(const TDesC& aUri); williamr@2: williamr@2: /** williamr@2: @publishedPartner williamr@2: @prototype williamr@2: williamr@2: Sets this object to match to uri scheme and file extension specified by a URI. williamr@2: williamr@2: The Uri scheme and extension are saved in iMatchReqData. Further,iMatchData contains uri extension, williamr@2: iMatchUriScheme contains uri scheme. williamr@2: williamr@2: @param aUri williamr@2: The URI containing the scheme and uri extension to be matched. williamr@2: williamr@2: */ williamr@2: IMPORT_C void SetMatchToUriSupportL(const TDesC& aUri); williamr@2: williamr@2: /** williamr@2: Sets this object to match to a MIME type. williamr@2: williamr@2: @param aMimeType williamr@2: The mime type to match. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetMatchToMimeTypeL(const TDesC8& aMimeType); williamr@2: williamr@2: /** williamr@2: Sets this object to match to a pattern in header data. williamr@2: williamr@2: @param aHeaderData williamr@2: The header of the file in question. This header data will be matched williamr@2: against the match patterns provided by the plugins. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetMatchToHeaderDataL(const TDesC8& aHeaderData); williamr@2: williamr@2: /** williamr@2: Returns the data used to perform the plugin match. williamr@2: williamr@2: @return The match data. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C const TDesC8& MatchData() const; williamr@2: williamr@2: /** williamr@2: @publishedPartner williamr@2: @prototype williamr@2: williamr@2: Returns the uri scheme used to perform the plugin match. williamr@2: williamr@2: @return The uri scheme. williamr@2: williamr@2: */ williamr@2: IMPORT_C const TDesC8& MatchUriScheme() const; williamr@2: williamr@2: /** williamr@2: Returns the type of the data used to perform the plugin match. williamr@2: williamr@2: @return The match data type. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C TMatchDataType MatchDataType() const; williamr@2: williamr@2: /** williamr@2: Destructor. williamr@2: */ williamr@2: virtual ~CMMFFormatSelectionParameters(); williamr@2: protected: williamr@2: williamr@2: /** williamr@2: Protected constructor. williamr@2: */ williamr@2: CMMFFormatSelectionParameters(); williamr@2: void ConstructL(const CMMFFormatSelectionParameters& aParams); williamr@2: williamr@2: private: williamr@2: CMatchData* iMatchReqData; williamr@2: TMatchDataType iMatchDataType; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Contains the parameters used to select controller plugins from the ECOM registry. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFControllerPluginSelectionParameters : public CMMFPluginSelectionParameters williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Constructs a new controller selection parameters object. williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFControllerPluginSelectionParameters* NewL(); williamr@2: williamr@2: /** williamr@2: Construct a new controller selection parameters object. williamr@2: williamr@2: @return The new object created. Note that the new object will be left on the cleanup stack. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFControllerPluginSelectionParameters* NewLC(); williamr@2: williamr@2: /** williamr@2: Sets the play format support required. williamr@2: williamr@2: Note: williamr@2: The play formats supported by the controller plugins will only be retrieved if williamr@2: this method is called. To get all the play formats supported by the system, call this williamr@2: with a 'blank' CMMFFormatSelectionParameters object. williamr@2: williamr@2: @param aRequiredSupport williamr@2: The play format support required. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetRequiredPlayFormatSupportL(const CMMFFormatSelectionParameters& aRequiredSupport); williamr@2: williamr@2: /** williamr@2: Sets the record format support required. williamr@2: williamr@2: Note: williamr@2: The record formats supported by the controller plugins will only be retrieved if williamr@2: this method is called. To get all the record formats supported by the system, call this williamr@2: with a 'blank' CMMFFormatSelectionParameters object. williamr@2: williamr@2: @param aRequiredSupport williamr@2: The record format support required. williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetRequiredRecordFormatSupportL(const CMMFFormatSelectionParameters& aRequiredSupport); williamr@2: williamr@2: /** williamr@2: Retrieves all controller plugins that support the requirements of the caller. williamr@2: williamr@2: @param aImplementations williamr@2: After this method returns, this array will contain all the williamr@2: controller plugins that support the caller's requirements. williamr@2: Note: The array will be emptied by this method. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C virtual void ListImplementationsL(RMMFControllerImplInfoArray& aImplementations) const; williamr@2: williamr@2: /** williamr@2: Destructor williamr@2: */ williamr@2: virtual ~CMMFControllerPluginSelectionParameters(); williamr@2: protected: williamr@2: CMMFControllerPluginSelectionParameters(); williamr@2: void MatchImplementationToSelectParamsL(RMMFControllerImplInfoArray& aImplementations, const CMMFControllerImplementationInformation& aPlugin, TInt& aArrayPos) const; williamr@2: TInt CheckPreferredSupplierL(RMMFControllerImplInfoArray& aImplementations, const CMMFControllerImplementationInformation& aPlugin) const; williamr@2: TBool CheckFormatSupportL(CMMFFormatSelectionParameters* aSelectParams, const RMMFFormatImplInfoArray& aFormats) const; williamr@2: /** williamr@2: Checks the given Controller for uri support. Uri support may be there williamr@2: if either requiredscheme or extension matches with that given controller williamr@2: williamr@2: @param aSelectParams williamr@2: Describes the selection parameter which a controller needs to williamr@2: support in order to be selected williamr@2: williamr@2: @param aPlugin williamr@2: The controller plugin which is checked for uri support williamr@2: williamr@2: @param aFormats williamr@2: The play or record formats looked for extension match williamr@2: */ williamr@2: TBool CheckUriSupport(CMMFFormatSelectionParameters* aSelectParams, CMMFControllerImplementationInformation* aPlugin, const RMMFFormatImplInfoArray& aFormats) const; williamr@2: williamr@2: protected: williamr@2: /** williamr@2: The required play format support williamr@2: */ williamr@2: CMMFFormatSelectionParameters* iRequiredPlayFormatSupport; williamr@2: williamr@2: /** williamr@2: The required record format support williamr@2: */ williamr@2: CMMFFormatSelectionParameters* iRequiredRecordFormatSupport; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Contains the parameters used to select controller plugins which support SecureDRM model williamr@2: from the ECOM registry. Controller plugins which support SecureDRM model allow play back of DRM-protected williamr@2: content by client processes without DRM capability. In such case the controller will be loaded in a separate secure DRM process. williamr@2: */ williamr@2: class CMMFControllerSecureDrmPluginSelectionParameters : public CMMFControllerPluginSelectionParameters williamr@2: { williamr@2: williamr@2: public: williamr@2: /** williamr@2: Constructs a new controller selection parameters object. williamr@2: williamr@2: @return The new object created. williamr@2: */ williamr@2: IMPORT_C static CMMFControllerSecureDrmPluginSelectionParameters* NewL(); williamr@2: williamr@2: /** williamr@2: Construct a new controller selection parameters object. williamr@2: williamr@2: @return The new object created. Note that the new object will be left on the cleanup stack. williamr@2: */ williamr@2: IMPORT_C static CMMFControllerSecureDrmPluginSelectionParameters* NewLC(); williamr@2: williamr@2: /** williamr@2: Retrieves all controller plugins that support SecureDRM model and the requirements of the caller. williamr@2: williamr@2: @param aImplementations williamr@2: After this method returns, this array will contain all the williamr@2: controller plugins that support the caller's requirements. williamr@2: Note: The array will be emptied by this method and SecureDRM model. williamr@2: */ williamr@2: IMPORT_C virtual void ListImplementationsL(RMMFControllerImplInfoArray& aImplementations) const; williamr@2: williamr@2: /** williamr@2: Destructor williamr@2: */ williamr@2: virtual ~CMMFControllerSecureDrmPluginSelectionParameters() {}; williamr@2: protected: williamr@2: CMMFControllerSecureDrmPluginSelectionParameters(); williamr@2: }; williamr@2: williamr@2: class CMmfRecognizerUtil; // declared here. williamr@2: /** williamr@2: @internalAll williamr@2: williamr@2: MMF utility class used by MMF recognizer williamr@2: Maintains an array of CMMFControllerImplementationInformation objects williamr@2: so that data headers can be speedily matched against. williamr@2: Updates the array when notified by ECOM of a change to the global williamr@2: interface implementation registration data. williamr@2: */ williamr@2: NONSHARABLE_CLASS( CMmfRecognizerUtil ): public CBase williamr@2: { williamr@2: public: williamr@2: enum TMatchLevel williamr@2: { williamr@2: EMatchNone, //no match williamr@2: EMatchData, //data match only williamr@2: EMatchName //suffix and data match williamr@2: }; williamr@2: public: williamr@2: IMPORT_C static void GetMimeTypesL(CDesC8Array* aMimeTypes); williamr@2: williamr@2: IMPORT_C static CMmfRecognizerUtil* NewL(); williamr@2: williamr@2: ~CMmfRecognizerUtil(); williamr@2: IMPORT_C TMatchLevel GetMimeTypeL(const TDesC& aFileName, const TDesC8& aImageData, TDes8& aMimeType); williamr@2: williamr@2: private: williamr@2: CMmfRecognizerUtil(); williamr@2: void ConstructL(); williamr@2: williamr@2: private: williamr@2: class CBody; williamr@2: CBody* iBody; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Abstract class used to contain the parameters used to select format plugins from the ECOM registry. williamr@2: williamr@2: Note: williamr@2: The classes CMMFFormatEncodePluginSelectionParamters and CMMFFormatDecodePluginSelectionParameters williamr@2: should be used to list and select format plugin implementations. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFFormatPluginSelectionParameters : public CMMFPluginSelectionParameters williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Retrieves all format plugins that support the requirements of the caller. williamr@2: williamr@2: @param aImplementations williamr@2: After this function returns, this array will contain all the williamr@2: format plugins that support the caller's requirements. williamr@2: Note: The array will be emptied by this method. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void ListImplementationsL(RMMFFormatImplInfoArray& aImplementations) const; williamr@2: williamr@2: /** williamr@2: Sets the format support required. williamr@2: williamr@2: @param aRequiredSupport williamr@2: The format support required. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C void SetRequiredFormatSupportL(const CMMFFormatSelectionParameters& aRequiredSupport); williamr@2: williamr@2: /** williamr@2: Destructor. williamr@2: */ williamr@2: virtual ~CMMFFormatPluginSelectionParameters(); williamr@2: protected: williamr@2: /** williamr@2: Protected constructor. williamr@2: */ williamr@2: CMMFFormatPluginSelectionParameters(TUid aInterfaceUid); williamr@2: williamr@2: void MatchImplementationToSelectParamsL(RMMFFormatImplInfoArray& aImplementations, const CMMFFormatImplementationInformation& aPlugin, TInt& aArrayPos) const; williamr@2: TInt CheckPreferredSupplierL(RMMFFormatImplInfoArray& aImplementations, const CMMFFormatImplementationInformation& aPlugin) const; williamr@2: TBool CheckFormatSupportL(const CMMFFormatImplementationInformation& aPlugin) const; williamr@2: protected: williamr@2: /** williamr@2: The format support required williamr@2: */ williamr@2: CMMFFormatSelectionParameters* iRequiredFormatSupport; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Class used to list and select plugins implementing the CMMFFormatEncode interface. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFFormatEncodePluginSelectionParameters : public CMMFFormatPluginSelectionParameters williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Construct a new format encode selection parameters object. williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFFormatEncodePluginSelectionParameters* NewL(); williamr@2: williamr@2: /** williamr@2: Constructs a new format encode selection parameters object. williamr@2: williamr@2: @return The new object created. Note that the new object will be left on the cleanup stack. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFFormatEncodePluginSelectionParameters* NewLC(); williamr@2: protected: williamr@2: /** williamr@2: Protected constructor. williamr@2: */ williamr@2: CMMFFormatEncodePluginSelectionParameters(); williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Class used to list and select plugins implementing the CMMFFormatDecode interface. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFFormatDecodePluginSelectionParameters : public CMMFFormatPluginSelectionParameters williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Constructs a new format decode selection parameters object. williamr@2: williamr@2: @return The new object created. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFFormatDecodePluginSelectionParameters* NewL(); williamr@2: williamr@2: /** williamr@2: Constructs a new format decode selection parameters object. williamr@2: williamr@2: @return The new object created. Note that the new object will be left on the cleanup stack. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: IMPORT_C static CMMFFormatDecodePluginSelectionParameters* NewLC(); williamr@2: protected: williamr@2: /** williamr@2: Protected constructor. williamr@2: */ williamr@2: CMMFFormatDecodePluginSelectionParameters(); williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Template class CleanupResetAndDestroy to clean up the array williamr@2: of implementation information from the cleanup stack. williamr@2: */ williamr@2: williamr@2: template williamr@2: class CleanupResetAndDestroy williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Puts an item on the cleanup stack. williamr@2: williamr@2: @param aRef williamr@2: The implementation information to be put on the cleanup stack. williamr@2: */ williamr@2: inline static void PushL(T& aRef); williamr@2: private: williamr@2: static void ResetAndDestroy(TAny *aPtr); williamr@2: }; williamr@2: template williamr@2: inline void CleanupResetAndDestroyPushL(T& aRef); williamr@2: template williamr@2: inline void CleanupResetAndDestroy::PushL(T& aRef) williamr@2: {CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));} williamr@2: template williamr@2: void CleanupResetAndDestroy::ResetAndDestroy(TAny *aPtr) williamr@2: {(STATIC_CAST(T*,aPtr))->ResetAndDestroy();} williamr@2: template williamr@2: inline void CleanupResetAndDestroyPushL(T& aRef) williamr@2: {CleanupResetAndDestroy::PushL(aRef);} williamr@2: williamr@2: williamr@2: #endif