mmappfw_plat/mpx_playback_utility_api/inc/mpxplaybackutility.h
changeset 0 a2952bb97e68
child 9 bee149131e4b
equal deleted inserted replaced
-1:000000000000 0:a2952bb97e68
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Interface to playback
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef MMPXPLAYBACKUTILITY_H
       
    20 #define MMPXPLAYBACKUTILITY_H
       
    21 
       
    22 #include <mpxplaybackframeworkdefs.h>
       
    23 #include <mpxcommonframeworkdefs.h>
       
    24 #include <badesca.h>
       
    25 #include <mpxattribute.h>
       
    26 #include <mpxcommand.h>
       
    27 #include <mpxattributespecs.h>
       
    28 
       
    29 class RFile;
       
    30 class CMPXMedia;
       
    31 class MMPXPlayer;
       
    32 class MMPXSource;
       
    33 class MMPXPlayerManager;
       
    34 class MMPXPlaybackObserver;
       
    35 class MMPXPlaybackCallback;
       
    36 class CMPXCollectionPlaylist;
       
    37 class CMPXSubscription;
       
    38 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
       
    39 class RFile64;
       
    40 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
       
    41 
       
    42 /**
       
    43 *  Main client interface for playback. Some terms used in the documentation of
       
    44 *  this interface:
       
    45 *
       
    46 *    Engine - it is the 'engine' which manages the playback and maintains the
       
    47 *             state. An abstract concept for where the playback functionality
       
    48 *             is somehow implemented, but is completely hidden from the client.
       
    49 *
       
    50 *    Player - the engine may access of a number of 'players' for playback,
       
    51 *             using only one at a time. A player is an abstract concept
       
    52 *             representing the knowledge to play either a 'specific kind of item',
       
    53 *             or 'play in a specific way', or both. The player may therefore
       
    54 *             automatically change between items if required
       
    55 *             ('specific kind of item'), or the client may choose the players
       
    56 *             that are used ('play in a specific way').
       
    57 *
       
    58 *    Sub player - a player may support 0 or more 'sub' players, a logical
       
    59 *             concept whereby the client,having chosen a player, can select
       
    60 *             options within this player identified by name (text)
       
    61 *
       
    62 *    Playlist - an abstract list of items. A collection path allows the client
       
    63 *             to cross reference the playlist with a collection, for example to
       
    64 *             iterate through the playlist, extract user-supplied metadata etc.
       
    65 *
       
    66 *    @lib mpxplaybackutility.lib
       
    67 *
       
    68 */
       
    69 class MMPXPlaybackUtility
       
    70     {
       
    71 public:
       
    72     /**
       
    73     *  Creates the interface for the client. This interface is bound to (i.e.
       
    74     *  controls and recieves events from) either an existing engine or a new
       
    75     *  one, according to:
       
    76     *
       
    77     *    aModeId=KPbModeDefault - bound to the same engine as any other player
       
    78     *                           running in same thread, or KPbModeNewPlayer if none.
       
    79     *    aModeId=KPbModeActivePlayer - bound to whichever engine has audio access,
       
    80     *                           else whichever is running, provided the category 
       
    81 	*							of client and engine match. Else KPbModeNewPlayer if none.
       
    82     *    aModeId=KPbModeNewPlayer - new engine created specifically for client,
       
    83     *                            may be shared later.
       
    84     *    aModeId=Application UID - bound to the same engine as the stand alone
       
    85     *                            Application.
       
    86     *	When no category is supplied (as with this API), EMPXCategoryMusic is assumed.
       
    87 	*	For category description, refer to next API. 
       
    88 	*
       
    89     *  @since S60 3.2.3
       
    90     *  @param aModeId playback mode
       
    91     *  @param aObs plabyback observer
       
    92     *  @return playback utility object
       
    93     */
       
    94     IMPORT_C static MMPXPlaybackUtility* NewL(
       
    95                                         const TUid& aModeId = KPbModeDefault,
       
    96                                         MMPXPlaybackObserver* aObs=NULL);
       
    97 
       
    98 
       
    99     /**
       
   100     *  Creates the interface for the client. This interface is bound to (i.e.
       
   101     *  controls and recieves events from) either an existing engine or a new
       
   102     *  one, according to:
       
   103     *
       
   104     *    aModeId=KPbModeDefault - bound to the same engine as any other player
       
   105     *                           running in same thread, or KPbModeNewPlayer if none.
       
   106     *    aModeId=KPbModeActivePlayer - bound to whichever engine has audio access,
       
   107     *                           else whichever is running, provided the category 
       
   108 	*							of client and engine match. Else KPbModeNewPlayer if none.
       
   109     *    aModeId=KPbModeNewPlayer - new engine created specifically for client,
       
   110     *                            may be shared later.
       
   111     *    aModeId=Application UID - bound to the same engine as the stand alone
       
   112     *                            Application.
       
   113     *		
       
   114 	*	 aCategory - a client can associate itself with a category (TMPXCategory).
       
   115 	*	 Category is used primarily with the KPbModeActivePlayer mode. The client gets 
       
   116 	*	 EActivePlayerChanged message only when an engine with the same category becomes  
       
   117 	*	 active. If a new engine (player) is created, the engine is tagged 
       
   118 	*	 with the category. When no category is supplied, EMPXCategoryMusic is assumed.
       
   119 	*	 
       
   120     *  @since S60 3.2.3
       
   121     *  @param aCategory engine category (TMPXCategory)
       
   122     *  @param aModeId playback mode
       
   123     *  @param aObs plabyback observer
       
   124     *  @return playback utility object
       
   125     */
       
   126     IMPORT_C static MMPXPlaybackUtility* NewL(
       
   127                                             const TMPXCategory aCategory,
       
   128                                             const TUid& aModeId = KPbModeDefault,
       
   129                                             MMPXPlaybackObserver* aObs=NULL);
       
   130 
       
   131     /*
       
   132     * Gets the interface for the client, or creates a new one.
       
   133     * This interface could be a singleton.
       
   134     *
       
   135     * @since S60 3.2.3
       
   136     */
       
   137     IMPORT_C static MMPXPlaybackUtility* UtilityL(
       
   138                                         const TUid& aModeId = KPbModeDefault );
       
   139 
       
   140     /*
       
   141     * Gets the interface for the client, or creates a new one.
       
   142     * This interface could be a singleton.
       
   143     * Variant of API with supplied category
       
   144 	*
       
   145     * @since S60 3.2.3
       
   146     */
       
   147     IMPORT_C static MMPXPlaybackUtility* UtilityL(
       
   148                                         const TMPXCategory aCategory,
       
   149                                         const TUid& aModeId = KPbModeDefault );
       
   150 
       
   151 
       
   152     /**
       
   153     *  Add a Observer. Clients only receive events from the engine corresponding
       
   154     *  to the specific mode the interface was created in.
       
   155     *
       
   156     *  @since S60 3.2.3
       
   157     *  @param aObs observer to be added
       
   158     */
       
   159     virtual void AddObserverL(MMPXPlaybackObserver& aObs)=0;
       
   160 
       
   161     /**
       
   162     *  Remove a observer.
       
   163     *
       
   164     *  @since S60 3.2.3
       
   165     *  @param aObs observer to be removed
       
   166     */
       
   167     virtual void RemoveObserverL(MMPXPlaybackObserver& aObs)=0;
       
   168 
       
   169     /**
       
   170     *  Returns PIds of clients that are using the engine in the mode this
       
   171     *  interface was created in. For example, if a client was interested in all
       
   172     *  the clients' pids with an active engine, they would:
       
   173     *
       
   174     *       MMPXPlaybackUtility* m=MMPXPlaybackUtility::NewL(EActivePlayer);
       
   175     *       RArray<TProcessId> pids;
       
   176     *       m->GetClients(pids);
       
   177     *       .........
       
   178     *       pids->Close();
       
   179     *       m->Close();
       
   180     *  From the Array of clients returned, the first one will be the
       
   181     *  last active one.
       
   182     *
       
   183     *  @since S60 3.2.3
       
   184     *  @param aClients Array of Pids returned.
       
   185     */
       
   186     virtual void GetClientsL(RArray<TProcessId>& aClients)=0;
       
   187 
       
   188     /**
       
   189     *  Initializes a track given by aCollectionPath.
       
   190     *
       
   191     *  @since S60 3.2.3
       
   192     *  @param aCollectionPath collection path
       
   193     *  @param aPlay Whether to initialize for playback, or
       
   194     *               else just to setup the engine first
       
   195     */
       
   196     virtual void InitL(const CMPXCollectionPlaylist& aPlaylist,
       
   197                        TBool aPlay=ETrue)=0;
       
   198 
       
   199     /**
       
   200     *  Inititialises with a single item, may not be part of any collection.
       
   201     *
       
   202     *  @since S60 3.2.3
       
   203     *  @param aUri URI of the item
       
   204     *  @param aType the mime type of the item
       
   205     */
       
   206     virtual void InitL(const TDesC& aUri, const TDesC8* aType=NULL)=0;
       
   207 
       
   208     /**
       
   209     *  Inititialises with a single item, may not be part of any collection
       
   210     *  Before this function can be called, the file server session which owns
       
   211     *  this file handle must first be marked as shareable by calling
       
   212     *  RFs::ShareProtected().
       
   213     *
       
   214     *  @since S60 3.2.3
       
   215     *  @param aShareableFile shareable file handle
       
   216     */
       
   217     virtual void InitL(RFile& aShareableFile)=0;
       
   218 
       
   219     /**
       
   220     *  Frees up client side resources only; a player is freed when there are no
       
   221     *  clients using it, and all resources are freed when the last client closed.
       
   222     *
       
   223     *  @since S60 3.2.3
       
   224     */
       
   225     virtual void Close()=0;
       
   226 
       
   227     /**
       
   228     *  Stops any async operations that are currently under way.
       
   229     *
       
   230     *  @since S60 3.2.3
       
   231     */
       
   232     virtual void CancelRequest()=0;
       
   233 
       
   234     /** 
       
   235     *  Issue player commands, with optional data. ECommandReceived and
       
   236     *  ECommandComplete events should follow.
       
   237     *
       
   238     *  @since S60 3.2.3
       
   239     *  @param aCmd the command
       
   240     *  @param aData optional data
       
   241     *  @deprecated Use method MMPXPlaybackUtility::CommandL(CMPXCommand& aCmd,
       
   242     *             MMPXPlaybackCallback* aCallback=NULL) instead.
       
   243     */
       
   244     virtual void CommandL(TMPXPlaybackCommand aCmd, TInt aData=0)=0;
       
   245 
       
   246     /**
       
   247      *  Send a command to the playback server.
       
   248      *
       
   249      *  @since S60 3.2.3
       
   250      *  @param aCmd reference to command object
       
   251      *  @param aCallback call back when command exection completed.
       
   252      *                    Asynchronously command only
       
   253      */
       
   254     virtual void CommandL(CMPXCommand& aCmd,
       
   255                           MMPXPlaybackCallback* aCallback=NULL)=0;
       
   256 
       
   257     /**
       
   258     *  Current state of player.
       
   259     *
       
   260     *  @since S60 3.2.3
       
   261     *  @return current state
       
   262     */
       
   263     virtual TMPXPlaybackState StateL() const=0;
       
   264 
       
   265     /**
       
   266     *  Current source of playlist being played, NULL if none was supplied.
       
   267     *
       
   268     *  @since S60 3.2.3
       
   269     *  @return source object
       
   270     */
       
   271     virtual MMPXSource* Source()=0;
       
   272 
       
   273     /**
       
   274     *  Player manager.
       
   275     *
       
   276     *  @since S60 3.2.3
       
   277     *  @return reference to player manager
       
   278     */
       
   279     virtual MMPXPlayerManager& PlayerManager()=0;
       
   280 
       
   281     /**
       
   282     *  Set playback property, EPropertyChanged event when complete.
       
   283     *
       
   284     *  @since S60 3.2.3
       
   285     *  @param aProperty the property to be set
       
   286     *  @param aValue the the value of the property
       
   287     */
       
   288     virtual void SetL(TMPXPlaybackProperty aProperty, TInt aValue)=0;
       
   289 
       
   290     /** 
       
   291     *  Get value of a playback property, Asyc.
       
   292     *
       
   293     *  @since S60 3.2.3
       
   294     *  @param aCallback playback callback
       
   295     *  @param aProperty the property
       
   296     *  @deprecated Use method MMPXPlaybackUtility::PropertyL(
       
   297     *       MMPXPlaybackCallback& aCallback, 
       
   298     *       TMPXPlaybackProperty aProperty) instead.
       
   299     */
       
   300     virtual void ValueL(MMPXPlaybackCallback& aCallback,
       
   301                         TMPXPlaybackProperty aProperty)=0;
       
   302 
       
   303     /**
       
   304      *  Get value of a playback property, Asyc.
       
   305      *  Result will be called back in HandleProperty.
       
   306      *
       
   307      *  @since S60 3.2.3
       
   308      *  @param aCallback playback callback
       
   309      *  @param aProperty the property
       
   310      */
       
   311     virtual void PropertyL(MMPXPlaybackCallback& aCallback,
       
   312                            TMPXPlaybackProperty aProperty)=0;
       
   313 
       
   314 
       
   315     /**
       
   316     *  Return a list of mime types supported by playback framework.
       
   317     *
       
   318     *  @since S60 3.2.3
       
   319     *  @return an array of mime types
       
   320     */
       
   321     virtual CDesCArray* SupportedMimeTypes()=0;
       
   322 
       
   323     /**
       
   324     *  Return a list of file extensions supported by playback framework.
       
   325     *
       
   326     *  @since S60 3.2.3
       
   327     *  @return an array of extensions
       
   328     */
       
   329     virtual CDesCArray* SupportedExtensions()=0;
       
   330 
       
   331     /**
       
   332     *  Return a list of schemas supported by playback framework.
       
   333     *
       
   334     *  @since S60 3.2.3
       
   335     *  @return an array of schemas
       
   336     */
       
   337     virtual CDesCArray* SupportedSchemas()=0;
       
   338 
       
   339     /**
       
   340     *  Sets the priority of the playback utility.
       
   341     *
       
   342     *  @since S60 3.2.3
       
   343     *  @param aPriority Priority to set
       
   344     */
       
   345     virtual void SetPriority( TInt aPriority )=0;
       
   346 
       
   347     /**
       
   348     * Adds a message subscription for this client.
       
   349     *
       
   350     * @since S60 3.2.3
       
   351     * @param aSubscription subscription to be added
       
   352     */
       
   353     virtual void AddSubscriptionL(const CMPXSubscription& aSubscription) = 0;
       
   354 
       
   355     /**
       
   356     * Removes a message subscription for this client.
       
   357     *
       
   358     * @since S60 3.2.3
       
   359     * @param aSubscription subscription to be removed.
       
   360     */
       
   361     virtual void RemoveSubscriptionL(const CMPXSubscription& aSubscription) = 0;
       
   362 
       
   363     /**
       
   364     * Removes all message subscriptions for this client.
       
   365     *
       
   366     * @since S60 3.2.3
       
   367     */
       
   368     virtual void ClearSubscriptionsL() = 0;
       
   369     
       
   370     /**
       
   371     *  Inititialises for streaming with URI and Access Point
       
   372     *
       
   373     *  @since S60 9.2
       
   374     *  @param aUri URI of the item
       
   375     *  @param aType the mime type of the item
       
   376     *  @param aAccessPoint the access point of the item
       
   377     */
       
   378     virtual void InitStreamingL(const TDesC& aUri, const TDesC8* aType, const TInt aAccessPoint)=0;
       
   379 
       
   380     /**
       
   381     *  Inititialises for streaming with URI and Access Point, the file may not be part of any collection
       
   382     *  Before this function can be called, the file server session which owns
       
   383     *  this file handle must first be marked as shareable by calling
       
   384     *  RFs::ShareProtected().
       
   385     *
       
   386     *  @since S60 9.2
       
   387     *  @param aShareableFile shareable file handle
       
   388     *  @param aAccessPoint the access point of the item
       
   389     */
       
   390     virtual void InitStreamingL(RFile& aShareableFile, const TInt aAccessPoint)=0;
       
   391     
       
   392 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
       
   393     /** 
       
   394     *  Inititialises with a single item, may not be part of any collection 
       
   395     *  Before this function can be called, the file server session which owns 
       
   396     *  this file handle must first be marked as shareable by calling 
       
   397     *  RFs::ShareProtected(). 
       
   398     * 
       
   399     *  @since S60 9.2 
       
   400     *  @param aShareableFile shareable RFile64 file handle 
       
   401     */ 
       
   402     virtual void Init64L(RFile64& /*aShareableFile*/) {};
       
   403      
       
   404     /** 
       
   405      *  Inititialises for streaming with URI and Access Point, the file may not be part of any collection 
       
   406      *  Before this function can be called, the file server session which owns 
       
   407      *  this file handle must first be marked as shareable by calling 
       
   408      *  RFs::ShareProtected(). 
       
   409      * 
       
   410      *  @since S60 9.2 
       
   411      *  @param aShareableFile shareable RFile64 file handle 
       
   412      *  @param aAccessPoint the access point of the item 
       
   413      */ 
       
   414     virtual void InitStreaming64L(RFile64& /*aShareableFile*/, const TInt /*aAccessPoint*/) {};
       
   415 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
       
   416     };
       
   417 
       
   418 /**
       
   419 *  Manages the players. Golden rules: by default, all players of type EPbLocal
       
   420 *  are tried and the first one found which can handle the content is used; when
       
   421 *  a specific player is selected by uid, (i.e. SelectPlayerL(TUid aPlayer))
       
   422 *  then only that player will be considered in the search; when players are
       
   423 *  selected by type (i.e. SelectPlayersL(TMPXPlaybackPlayerType aType)), then only
       
   424 *  players with that type are considered; When a sub player is explicitly
       
   425 *  selected (i.e. SelectSubPlayerL()), then only that player and its sub player
       
   426 *  are considered.
       
   427 *
       
   428 *  @lib mpxplaybackutility.lib
       
   429 */
       
   430 class MMPXPlayerManager
       
   431     {
       
   432 public:
       
   433     /**
       
   434     *  Typically, a client will obtain the list of all the (non-duplicated)
       
   435     *  player 'types' in the system from GetPlayerTypesL and present localized
       
   436     *  type names (e.g. "Local","Home network", if possible, else if
       
   437     *  non-standard type,should use PlayerTypeDisplayNameL to get text from
       
   438     *  player).
       
   439     *
       
   440     *  User should be given opportunity to choose IF there is more than one
       
   441     *  type available, or if there is one type but more than one sub players,
       
   442     *  the user could be presented with the sub player list.
       
   443     *
       
   444     *  @since S60 3.2.3
       
   445     *  @param aTypes the list of player types
       
   446     */
       
   447     virtual void GetPlayerTypesL(RArray<TMPXPlaybackPlayerType>& aTypes)=0;
       
   448 
       
   449     /**
       
   450     *  Returns display name for custom types; standard types should be
       
   451     *  recognized by client and localized - calling this method would then not
       
   452     *  be required.
       
   453     *
       
   454     *  @since S60 3.2.3
       
   455     *  @param aType playback type
       
   456     */
       
   457     virtual HBufC* PlayerTypeDisplayNameL(TMPXPlaybackPlayerType aType)=0;
       
   458 
       
   459     /**
       
   460     *  Get the list of UIDs of all players.
       
   461     *
       
   462     *  @since S60 3.2.3
       
   463     *  @param aPlayers All the players' uids in the system
       
   464     */
       
   465     virtual void GetPlayerListL(RArray<TUid>& aPlayers)=0;
       
   466 
       
   467     /**
       
   468     *  Get the list of UIDs of players with the specific type.
       
   469     *
       
   470     *  @since S60 3.2.3
       
   471     *  @param aPlayers All the players' uids with the same type
       
   472     *  @param aType the type of players
       
   473     */
       
   474     virtual void GetPlayerListL(RArray<TUid>& aPlayers,
       
   475                                TMPXPlaybackPlayerType aType)=0;
       
   476 
       
   477     /**
       
   478     *  Get the list of sub player names, Async.
       
   479     *
       
   480     *  @since S60 3.2.3
       
   481     *  @param aCallback sub players returned in call back interface
       
   482     *  @param aPlayer UID of the player
       
   483     */
       
   484     virtual void SubPlayerNamesL(MMPXPlaybackCallback& aCallback,
       
   485                                  TUid aPlayer)=0;
       
   486 
       
   487     /**
       
   488     *  Client selects all players with the type aType, the specific player used
       
   489     *  then being resolved on the basis of the content.
       
   490     *
       
   491     *  @since S60 3.2.3
       
   492     *  @param aType the type of player
       
   493     */
       
   494     virtual void SelectPlayersL(TMPXPlaybackPlayerType aType)=0;
       
   495 
       
   496     /**
       
   497     *  Client selects specific player aPlayer and sub player aSubPlayerIndex
       
   498     *  from array returned by SubPlayerNamesL.
       
   499     *  NOTE: Once a player is manually selected by UID, all subsequent
       
   500     *        InitL() will continue to use that player, it will not
       
   501     *        try to resolve a plugin.  If the client later wants
       
   502     *        the engine to auto resolve the proper plugin, the client must
       
   503     *        call ClearSelectPlayersL() to reset the engine.
       
   504     *
       
   505     *  @since S60 3.2.3
       
   506     *  @param aPlayer the UID of player
       
   507     *  @param aSubPlayerIndex the index of the sub player
       
   508     */
       
   509     virtual void SelectSubPlayerL(TUid aPlayer, TInt aSubPlayerIndex)=0;
       
   510 
       
   511     /**
       
   512     *  Client selects a specific player.
       
   513     *  NOTE: Once a player is manually selected by UID, all subsequent
       
   514     *        InitL() will continue to use that player, it will not
       
   515     *        try to resolve a plugin.  If the client later wants
       
   516     *        the engine to auto resolve the proper plugin, the client must
       
   517     *        call ClearSelectPlayersL() to reset the engine.
       
   518     *
       
   519     *  @since S60 3.2.3
       
   520     *  @param aPlayer the UID of the player
       
   521     */
       
   522     virtual void SelectPlayerL(TUid aPlayer)=0;
       
   523 
       
   524     /**
       
   525     *  Clears all selection criteria. Essentially the same as
       
   526     *  SelectPlayersL(EPbLocal).
       
   527     *
       
   528     *  @since S60 3.2.3
       
   529     */
       
   530     virtual void ClearSelectPlayersL()=0;
       
   531 
       
   532     /**
       
   533     *  Retreives the current selection: KNullUid and KErrNotFound are possible
       
   534     *  return values for aPlayer and aSubPlayerIndex respectively if none are
       
   535     *  explicitly selected.
       
   536     *
       
   537     *  @since S60 3.2.3
       
   538     *  @param aType player type
       
   539     *  @param aPlayer the UID of player
       
   540     *  @param aSubPlayerIndex index of the subplayer
       
   541     *  @param aSubPlayerName friendly name of the subplayer.
       
   542     *         Notes: Client owns the returned aSubPlayerName object.
       
   543     */
       
   544     virtual void GetSelectionL(TMPXPlaybackPlayerType& aType,
       
   545                                TUid& aPlayer,
       
   546                                TInt& aSubPlayerIndex,
       
   547                                HBufC*& aSubPlayerName)=0;
       
   548 
       
   549     /**
       
   550     *  The current player, may change with each item, NULL if none found.
       
   551     *
       
   552     *  @since S60 3.2.3
       
   553     *  @return object of current player
       
   554     */
       
   555     virtual MMPXPlayer* CurrentPlayer()=0;
       
   556     };
       
   557 
       
   558 
       
   559 /**
       
   560 *  Player functionality specific to selected player.
       
   561 *
       
   562 *  @lib mpxplaybackutility.lib
       
   563 */
       
   564 class MMPXPlayer
       
   565     {
       
   566 public:
       
   567     /**
       
   568     *  The 'type' of the player. Built-in types are EPbLocal and EPbRemote, but
       
   569     *  the plug-ins could extend this if they desire to be a different type
       
   570     *  which can be selected by the user.
       
   571     *
       
   572     *  @since S60 3.2.3
       
   573     *  @return player type
       
   574     */
       
   575     virtual TMPXPlaybackPlayerType TypeL()=0;
       
   576 
       
   577     /**
       
   578     *  If TypeL returns a value that is not known to the UI (and therefore
       
   579     *  can't localize it),then TypeNameL can be used for unlocalized display
       
   580     *  purposes.
       
   581     *
       
   582     *  @since S60 3.2.3
       
   583     *  @return player name.
       
   584     */
       
   585     virtual HBufC* TypeNameL()=0;
       
   586 
       
   587     /**
       
   588     *  If the player supports other 'players', else array count == 0.
       
   589     *
       
   590     *  @since S60 3.2.3
       
   591     *  @param aCallback sub players returned in the callback
       
   592     */
       
   593     virtual void SubPlayerNamesL(MMPXPlaybackCallback& aCallback)=0;
       
   594 
       
   595     /**
       
   596     *  Selected sub player index, corresponding to sub player names array.
       
   597     *
       
   598     *  @since S60 3.2.3
       
   599     *  @return sub player index. KErrNotFound if none
       
   600     */
       
   601     virtual TInt SubPlayerL() const=0;
       
   602 
       
   603     /**
       
   604     *  The UID identifying this player.
       
   605     *
       
   606     *  @since S60 3.2.3
       
   607     *  @return UID of the player
       
   608     */
       
   609     virtual TUid UidL() const=0;
       
   610     };
       
   611 
       
   612 /**
       
   613 *  Media functionality. Each media is identified by its index into a container,
       
   614 *  which is the same as supplied in InitL(const CMPXCollectionPlaylist& aPlaylist).
       
   615 *
       
   616 *  @lib mpxplaybackutility.lib
       
   617 */
       
   618 class MMPXSource
       
   619     {
       
   620 public:
       
   621     /**
       
   622     *  Path to the collection, or NULL if not in any collection.
       
   623     *  Ownership transferred.
       
   624     *
       
   625     *  @since S60 3.2.3
       
   626     *  @return collection path
       
   627     */
       
   628     virtual CMPXCollectionPlaylist* PlaylistL()=0;
       
   629 
       
   630     /**
       
   631     *  File passed in, or NULL if none passed in.
       
   632     *
       
   633     *  @since S60 3.2.3
       
   634     *  @return pointer to file handle
       
   635     */
       
   636     virtual RFile* FileL()=0;
       
   637 
       
   638     /**
       
   639     *  URI of current item.
       
   640     *
       
   641     *  @since S60 3.2.3
       
   642     *  @return URI of the item
       
   643     */
       
   644     virtual HBufC* UriL()=0;
       
   645 
       
   646     /**
       
   647     *  
       
   648     *  Request for media properties of current playing item
       
   649     *  HandleMediaL of the callback.
       
   650     *
       
   651     *  @since S60 3.2.3
       
   652     *  @param aAttrs attributes requested
       
   653     *  @param aCallback playback callback
       
   654     *  @deprecated Use method MMPXPlaybackUtility::MediaL(
       
   655     *                   const TArray<TMPXAttribute>& aAttrs,
       
   656     *                   MMPXPlaybackCallback& aCallback,
       
   657     *                   CMPXAttributeSpecs* aSpecs) instead.
       
   658     */
       
   659     virtual void MediaL(const TArray<TMPXAttribute>& aAttrs,
       
   660                         MMPXPlaybackCallback& aCallback)=0;
       
   661 
       
   662     /**
       
   663     *  Request for media properties of current playing item
       
   664     *  HandleMediaL of the callback.
       
   665     *
       
   666     *  @since S60 3.2.3
       
   667     *  @param aAttrs attributes requested
       
   668     *  @param aCallback playback callback
       
   669     *  @param aSpecs specifications for attributes
       
   670     */
       
   671     virtual void MediaL(const TArray<TMPXAttribute>& aAttrs,
       
   672                         MMPXPlaybackCallback& aCallback,
       
   673                         CMPXAttributeSpecs* aSpecs)=0;
       
   674 
       
   675 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
       
   676     /**
       
   677     *  File passed in, or NULL if none passed in.
       
   678     *
       
   679     *  @since S60 9.2
       
   680     *  @return pointer to file handle
       
   681     */
       
   682     virtual RFile64* File64L() {return NULL;};
       
   683 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
       
   684     };
       
   685 
       
   686 #endif      // MMPXPLAYBACKUTILITY_H
       
   687 
       
   688 // End of File