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

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