Update contrib.
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".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
17 #ifndef MMFCLIENTAUDIOPLAY_H
18 #define MMFCLIENTAUDIOPLAY_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>
32 static const TUid KUidMmfAudioController = {KMmfUidControllerAudio};
35 Mixin class to allow notification that the timed silence has finished.
37 class MRepeatTrailingSilenceTimerObs
40 virtual void RepeatTrailingSilenceTimerComplete() = 0;
44 CTimer-based active object that waits the requested time before notifying its observer.
46 class CRepeatTrailingSilenceTimer : public CTimer
49 static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs);
52 CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs);
54 MRepeatTrailingSilenceTimerObs& iObs;
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.
61 class CMMFMdaAudioPlayerCallBack : public CActive
65 ECallbackInitComplete,
71 static CMMFMdaAudioPlayerCallBack* NewL(MMdaAudioPlayerCallback& aCallback);
72 ~CMMFMdaAudioPlayerCallBack();
73 void InitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
74 void PlayComplete(TInt aError);
76 CMMFMdaAudioPlayerCallBack(MMdaAudioPlayerCallback& aCallback);
80 MMdaAudioPlayerCallback& iCallback;
82 TTimeIntervalMicroSeconds iDuration;
83 TCallbackState iState;
87 Concrete implementation of the CMdaAudioPlayerUtility API.
88 @see CMdaAudioPlayerUtility
90 class CMMFMdaAudioPlayerUtility;
91 NONSHARABLE_CLASS( CMMFMdaAudioPlayerUtility ): public CBase,
92 public MMMFControllerEventMonitorObserver,
93 public MRepeatTrailingSilenceTimerObs,
94 public MMMFFindAndOpenControllerObserver
96 friend class CMdaAudioPlayerUtility;
97 // friends for Unit testing only
98 friend class CTestStepUnitMMFAudClient;
101 enum TMMFAudioPlayerState
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);
125 static CMMFMdaAudioPlayerUtility* NewL(MMdaAudioPlayerCallback& aCallback,
126 TInt aPriority = EMdaPriorityNormal,
127 TInt aPref = EMdaPriorityPreferenceTimeAndQuality);
132 ~CMMFMdaAudioPlayerUtility();
134 void UseSharedHeap();
136 void OpenFileL(const TDesC& aFileName);
137 void OpenFileL(const RFile& aFile);
138 void OpenFileL(const TMMSource& aSource);
140 void OpenDesL(const TDesC8& aDescriptor);
141 void OpenUrlL(const TDesC& aUrl, TInt aIapId=KUseDefaultIap, const TDesC8& aMimeType = KNullDesC8);
144 TInt SetVolume(TInt aVolume);
145 void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
146 void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
147 const TTimeIntervalMicroSeconds& Duration();
150 // API Additions since version 7.0
153 TInt GetPosition(TTimeIntervalMicroSeconds& aPosition);
154 void SetPosition(const TTimeIntervalMicroSeconds& aPosition);
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);
167 void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback);
168 void GetAudioLoadingProgressL(TInt& aPercentageProgress);
169 const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
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);
179 MMMFDRMCustomCommand* GetDRMCustomCommand();
181 TInt SetThreadPriority(const TThreadPriority& aThreadPriority) const;
183 TMMFDurationInfo Duration(TTimeIntervalMicroSeconds& aDuration);
185 // from MMMFControllerEventMonitorObserver
186 virtual void HandleEvent(const TMMFEvent& aEvent);
187 // from MRepeatTrailingSilenceTimerObs
188 virtual void RepeatTrailingSilenceTimerComplete();
190 // from MMMFFindAndOpenControllerObserver
191 virtual void MfaocComplete(
193 RMMFController* aController,
195 TMMFMessageDestination* aSourceHandle,
196 TMMFMessageDestination* aSinkHandle);
199 CMMFMdaAudioPlayerUtility(MMdaAudioPlayerCallback& aCallback, TInt aPriority, TInt aPref);
207 // last play window command
208 enum TPlayWindowCommand
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;
225 TInt iNumberOfTimesPlayed;
226 TInt iNumberOfTimesToRepeat;
227 TTimeIntervalMicroSeconds iTrailingSilence;
228 TTimeIntervalMicroSeconds iTrailingSilenceLeftToPlay;
229 CRepeatTrailingSilenceTimer* iRepeatTrailingSilenceTimer;
231 // Source and sink handle info
232 TMMFMessageDestination iSourceHandle;
233 TMMFMessageDestination iSinkHandle;
235 // Custom command handlers
236 RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCommands;
237 RMMFAudioPlayControllerCustomCommands iAudioPlayControllerCommands;
238 RMMFResourceNotificationCustomCommands iNotificationRegistrationCommands;
239 RMMFDRMCustomCommands iDRMCustomCommands;
240 RMMFAudioPlayControllerSetRepeatsCustomCommands iAudioPlayControllerSetRepeatsCommands;
242 // Current playback time so we can resume from where we were stopped
243 TTimeIntervalMicroSeconds iPosition;
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;
251 CMMFControllerImplementationInformation* iControllerImplementationInformation;
254 // utility class to find and open a suitable controller asynchronously
255 CMMFFindAndOpenController* iFindAndOpenController;
257 TBuf8<256> iNotificationDataHolder;
258 TBool iRepeatCancelled;