breakdeps/mmfclientaudioplayer.h
changeset 125 657f02e590f1
child 129 4a58d534bdaa
equal deleted inserted replaced
124:320024dcf7b6 125:657f02e590f1
       
     1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 
       
    17 #ifndef MMFCLIENTAUDIOPLAY_H
       
    18 #define MMFCLIENTAUDIOPLAY_H
       
    19 
       
    20 #include <e32std.h>
       
    21 #include <e32base.h>
       
    22 #include <mdaaudiosampleplayer.h>
       
    23 #include <mmf/common/mmfcontroller.h>
       
    24 #include <mmf/server/mmffile.h>
       
    25 #include <mmf/server/mmfdes.h>
       
    26 #include <mmfcontrollerimplementationuids.hrh>
       
    27 #include <mmf/common/mmfstandardcustomcommands.h>
       
    28 #include <mmf/common/mmfdrmcustomcommands.h>
       
    29 #include "mmfclientutility.h"
       
    30 #include <mmf/common/mmfdurationinfocustomcommands.h>
       
    31 
       
    32 static const TUid KUidMmfAudioController = {KMmfUidControllerAudio}; 
       
    33 
       
    34 /**
       
    35 Mixin class to allow notification that the timed silence has finished.
       
    36 */
       
    37 class MRepeatTrailingSilenceTimerObs
       
    38 	{
       
    39 public:
       
    40 	virtual void RepeatTrailingSilenceTimerComplete() = 0;
       
    41 	};
       
    42 
       
    43 /**
       
    44 CTimer-based active object that waits the requested time before notifying its observer.
       
    45 */
       
    46 class CRepeatTrailingSilenceTimer : public CTimer
       
    47 	{
       
    48 public:
       
    49 	static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs);
       
    50 	void RunL();
       
    51 private:
       
    52 	CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs);
       
    53 private:
       
    54 	MRepeatTrailingSilenceTimerObs& iObs;
       
    55 	};
       
    56 
       
    57 /**
       
    58 Active object utility class to allow the callback to be called asynchronously.
       
    59 This should help prevent re-entrant code in clients of the mediaframework.
       
    60 */
       
    61 class CMMFMdaAudioPlayerCallBack : public CActive
       
    62 	{
       
    63 public:
       
    64 	enum TCallbackState {
       
    65 		ECallbackInitComplete,
       
    66 		ECallbackPlayComplete
       
    67 		};
       
    68 
       
    69 		
       
    70 public:
       
    71 	static CMMFMdaAudioPlayerCallBack* NewL(MMdaAudioPlayerCallback& aCallback);
       
    72 	~CMMFMdaAudioPlayerCallBack();
       
    73 	void InitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
       
    74 	void PlayComplete(TInt aError);
       
    75 private:
       
    76 	CMMFMdaAudioPlayerCallBack(MMdaAudioPlayerCallback& aCallback);
       
    77 	void RunL();
       
    78 	void DoCancel();
       
    79 private:
       
    80 	MMdaAudioPlayerCallback& iCallback;
       
    81 	TInt iError;
       
    82 	TTimeIntervalMicroSeconds iDuration;
       
    83 	TCallbackState iState;
       
    84 	};
       
    85 
       
    86 /**
       
    87 Concrete implementation of the CMdaAudioPlayerUtility API.
       
    88 @see CMdaAudioPlayerUtility
       
    89 */
       
    90 class CMMFMdaAudioPlayerUtility;
       
    91 NONSHARABLE_CLASS( CMMFMdaAudioPlayerUtility ): public CBase, 
       
    92 								  				public MMMFControllerEventMonitorObserver,
       
    93 								  				public MRepeatTrailingSilenceTimerObs,
       
    94 								  				public MMMFFindAndOpenControllerObserver
       
    95 	{
       
    96 friend class CMdaAudioPlayerUtility;
       
    97 // friends for Unit testing only
       
    98 friend class CTestStepUnitMMFAudClient;
       
    99 
       
   100 public:
       
   101 	enum TMMFAudioPlayerState
       
   102 		{
       
   103 		EStopped,
       
   104 		EOpening,
       
   105 		EPaused,
       
   106 		EPlaying		
       
   107 		};
       
   108 public:
       
   109 	static CMMFMdaAudioPlayerUtility* NewFilePlayerL(const TDesC& aFileName, 
       
   110 								MMdaAudioPlayerCallback& aCallback, 
       
   111 								TInt aPriority = EMdaPriorityNormal, 
       
   112 								TInt aPref = EMdaPriorityPreferenceTimeAndQuality,
       
   113 								CMdaServer* aServer = NULL);
       
   114 	static CMMFMdaAudioPlayerUtility* NewDesPlayerL(const TDesC8& aData, 
       
   115 								MMdaAudioPlayerCallback& aCallback, 
       
   116 								TInt aPriority = EMdaPriorityNormal, 
       
   117 								TInt aPref = EMdaPriorityPreferenceTimeAndQuality,
       
   118 								CMdaServer* aServer = NULL);
       
   119 	static CMMFMdaAudioPlayerUtility* NewDesPlayerReadOnlyL(const TDesC8& aData, 
       
   120 								MMdaAudioPlayerCallback& aCallback, 
       
   121 								TInt aPriority = EMdaPriorityNormal, 
       
   122 								TInt aPref = EMdaPriorityPreferenceTimeAndQuality,
       
   123 								CMdaServer* aServer = NULL);
       
   124 
       
   125 	static CMMFMdaAudioPlayerUtility* NewL(MMdaAudioPlayerCallback& aCallback,
       
   126 								TInt aPriority = EMdaPriorityNormal,
       
   127 								TInt aPref = EMdaPriorityPreferenceTimeAndQuality);
       
   128 
       
   129 /**
       
   130 	Destructor
       
   131 */
       
   132 	~CMMFMdaAudioPlayerUtility();
       
   133 	
       
   134 	void UseSharedHeap();
       
   135 
       
   136 	void OpenFileL(const TDesC& aFileName);
       
   137 	void OpenFileL(const RFile& aFile);
       
   138 	void OpenFileL(const TMMSource& aSource);
       
   139 
       
   140 	void OpenDesL(const TDesC8& aDescriptor);
       
   141 	void OpenUrlL(const TDesC& aUrl, TInt aIapId=KUseDefaultIap, const TDesC8& aMimeType = KNullDesC8);
       
   142 	void Play();
       
   143 	void Stop();
       
   144 	TInt SetVolume(TInt aVolume);
       
   145 	void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
       
   146 	void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
       
   147 	const TTimeIntervalMicroSeconds& Duration();
       
   148 	TInt MaxVolume();
       
   149 
       
   150 	// API Additions since version 7.0	
       
   151 	TInt Pause();
       
   152 	void Close();
       
   153 	TInt GetPosition(TTimeIntervalMicroSeconds& aPosition);
       
   154 	void SetPosition(const TTimeIntervalMicroSeconds& aPosition);
       
   155 
       
   156 	TInt SetPriority(TInt aPriority, TInt aPref);
       
   157 	TInt GetVolume(TInt& aVolume);
       
   158 	TInt GetNumberOfMetaDataEntries(TInt& aNumEntries);
       
   159 	CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex);
       
   160 	TInt SetPlayWindow(const TTimeIntervalMicroSeconds& aStart,
       
   161 								const TTimeIntervalMicroSeconds& aEnd);
       
   162 	TInt ClearPlayWindow();
       
   163 	TInt SetBalance(TInt aBalance = KMMFBalanceCenter);
       
   164 	TInt GetBalance(TInt& aBalance);
       
   165 	TInt GetBitRate(TUint& aBitRate);
       
   166 	
       
   167 	void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback);
       
   168 	void GetAudioLoadingProgressL(TInt& aPercentageProgress);
       
   169 	const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
       
   170 	
       
   171 	TInt RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback,TUid aNotificationEventUid,const TDesC8& aNotificationRegistrationData = KNullDesC8);
       
   172 	TInt CancelRegisterAudioResourceNotification(TUid aNotificationEventId);
       
   173 	TInt WillResumePlay();
       
   174 	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom);
       
   175 	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2);
       
   176 	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus);
       
   177 	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus);
       
   178 	
       
   179 	MMMFDRMCustomCommand* GetDRMCustomCommand();
       
   180 
       
   181 	TInt SetThreadPriority(const TThreadPriority& aThreadPriority) const;
       
   182 	
       
   183 	TMMFDurationInfo Duration(TTimeIntervalMicroSeconds& aDuration);
       
   184 	
       
   185 	// from MMMFControllerEventMonitorObserver
       
   186 	virtual void HandleEvent(const TMMFEvent& aEvent);
       
   187 	// from MRepeatTrailingSilenceTimerObs
       
   188 	virtual void RepeatTrailingSilenceTimerComplete();
       
   189 
       
   190 	// from MMMFFindAndOpenControllerObserver 
       
   191 	virtual void MfaocComplete(
       
   192 		TInt& aError, 
       
   193 		RMMFController* aController, 
       
   194 		TUid aControllerUid, 
       
   195 		TMMFMessageDestination* aSourceHandle, 
       
   196 		TMMFMessageDestination* aSinkHandle);
       
   197 
       
   198 protected:
       
   199 	CMMFMdaAudioPlayerUtility(MMdaAudioPlayerCallback& aCallback, TInt aPriority, TInt aPref);
       
   200 	void ConstructL();
       
   201 	void DoPlay();
       
   202 
       
   203 private:
       
   204 	void PlaySilence();
       
   205 
       
   206 private:
       
   207 	// last play window command
       
   208 	enum TPlayWindowCommand
       
   209 		{
       
   210 		ENone,
       
   211 		ESet,
       
   212 		EClear
       
   213 		};
       
   214 
       
   215 	MMdaAudioPlayerCallback& iCallback;
       
   216 	CMMFMdaAudioPlayerCallBack* iAsyncCallBack;
       
   217 	MAudioLoadingObserver* iLoadingObserver;
       
   218 	MMMFAudioResourceNotificationCallback* iAudioResourceNotificationCallBack;
       
   219 	RMMFController iController;
       
   220 	CMMFControllerEventMonitor* iControllerEventMonitor;
       
   221 	TMMFAudioPlayerState iState;
       
   222 	TTimeIntervalMicroSeconds iDuration; // Needed because of api "Duration()" that returns a reference
       
   223 	TMMFPrioritySettings iPrioritySettings;
       
   224 
       
   225 	TInt iNumberOfTimesPlayed;
       
   226 	TInt iNumberOfTimesToRepeat;
       
   227 	TTimeIntervalMicroSeconds iTrailingSilence;
       
   228 	TTimeIntervalMicroSeconds iTrailingSilenceLeftToPlay;	
       
   229 	CRepeatTrailingSilenceTimer* iRepeatTrailingSilenceTimer;
       
   230 
       
   231 	// Source and sink handle info
       
   232 	TMMFMessageDestination iSourceHandle;
       
   233 	TMMFMessageDestination iSinkHandle;
       
   234 
       
   235 	// Custom command handlers
       
   236 	RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCommands;
       
   237 	RMMFAudioPlayControllerCustomCommands iAudioPlayControllerCommands;
       
   238 	RMMFResourceNotificationCustomCommands iNotificationRegistrationCommands;
       
   239 	RMMFDRMCustomCommands iDRMCustomCommands;
       
   240 	RMMFAudioPlayControllerSetRepeatsCustomCommands iAudioPlayControllerSetRepeatsCommands;
       
   241 	
       
   242 	// Current playback time so we can resume from where we were stopped
       
   243 	TTimeIntervalMicroSeconds iPosition;
       
   244 
       
   245 	// Play window start and end times and whether it has been set
       
   246 	TTimeIntervalMicroSeconds iPlayStart;
       
   247 	TTimeIntervalMicroSeconds iPlayEnd;
       
   248 	TPlayWindowCommand iPlayWindowSet;
       
   249 	RArray<TUid> iMediaIds;
       
   250 	
       
   251 	CMMFControllerImplementationInformation* iControllerImplementationInformation;
       
   252 	TUid iControllerUid;
       
   253 
       
   254 	// utility class to find and open a suitable controller asynchronously
       
   255 	CMMFFindAndOpenController* iFindAndOpenController;
       
   256 	TUid iEventHolder;
       
   257 	TBuf8<256> iNotificationDataHolder;
       
   258 	TBool iRepeatCancelled;
       
   259 	}; 
       
   260 
       
   261 #endif