mmfenh/progressivedownload/ProgressiveDownloadUtility/src/AudioPdProperties.h
changeset 0 71ca22bcf22a
equal deleted inserted replaced
-1:000000000000 0:71ca22bcf22a
       
     1 /*
       
     2 * Copyright (c) 2004 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:  Progressive Download Utility
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef __AUDIOPDPLAYPROPERTIES_H__
       
    20 #define __AUDIOPDPLAYPROPERTIES_H__
       
    21 
       
    22 
       
    23 
       
    24 #include <e32std.h>
       
    25 #include <e32base.h>
       
    26 #include <f32file.h>
       
    27 #include "MAudioPlayUtility.h"
       
    28 #include "AudioPdPlayUtility.h"
       
    29 
       
    30 
       
    31 #include "MmfClientUtility.h"
       
    32 
       
    33 #include <mmf/common/mmcaf.h>
       
    34 
       
    35 static const TUid KUidMmfAudioController = {KMmfUidControllerAudio};
       
    36 
       
    37 /**
       
    38 Mixin class to allow notification that the timed silence has finished.
       
    39 */
       
    40 class MRepeatTrailingSilenceTimerObs
       
    41 	{
       
    42 public:
       
    43 	virtual void RepeatTrailingSilenceTimerComplete() = 0;
       
    44 	};
       
    45 
       
    46 /**
       
    47 CTimer-based active object that waits the requested time before notifying its observer.
       
    48 */
       
    49 class CRepeatTrailingSilenceTimer : public CTimer
       
    50 	{
       
    51 public:
       
    52 	static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs);
       
    53 	void RunL();
       
    54 private:
       
    55 	CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs);
       
    56 private:
       
    57 	MRepeatTrailingSilenceTimerObs& iObs;
       
    58 	};
       
    59 
       
    60 /**
       
    61 Active object utility class to allow the callback to be called asynchronously.
       
    62 This should help prevent re-entrant code in clients of the mediaframework.
       
    63 */
       
    64 class CMMFMdaAudioPlayerCallBack : public CActive
       
    65 	{
       
    66 public:
       
    67 	enum TCallbackState {
       
    68 		ECallbackInitComplete,
       
    69 		ECallbackPlayComplete,
       
    70 		ECallbackPlaying,
       
    71 		ECallbackPaused
       
    72 		};
       
    73 
       
    74 
       
    75 public:
       
    76 	static CMMFMdaAudioPlayerCallBack* NewL(MAudioPdPlayUtilityCallback& aCallback);
       
    77 	~CMMFMdaAudioPlayerCallBack();
       
    78 	void InitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
       
    79 	void PlayComplete(TInt aError);
       
    80 	void PlayingCallback();
       
    81 	void PausedCallback();
       
    82 private:
       
    83 	CMMFMdaAudioPlayerCallBack(MAudioPdPlayUtilityCallback& aCallback);
       
    84 	void RunL();
       
    85 	void DoCancel();
       
    86 private:
       
    87 	MAudioPdPlayUtilityCallback& iCallback;
       
    88 	TInt iError;
       
    89 	TTimeIntervalMicroSeconds iDuration;
       
    90 	TCallbackState iState;
       
    91 	};
       
    92 
       
    93 
       
    94 
       
    95 /**
       
    96 Concrete implementation of the CAudioPdPlayUtility API.
       
    97 @see CAudioPdPlayUtility
       
    98 */
       
    99 
       
   100 class CAudioPdProperties: public CBase,
       
   101                          // public MAudioPdPlayUtility //may not be necessary
       
   102 						 public MMMFControllerEventMonitorObserver,
       
   103 					     public MRepeatTrailingSilenceTimerObs,
       
   104 						 public MMMFFindAndOpenControllerObserver
       
   105 	{
       
   106 
       
   107 public:
       
   108 
       
   109 	friend class CAudioPdPlayUtility;
       
   110 
       
   111 
       
   112 		enum TMMFAudioPlayerState
       
   113 		{
       
   114 		EStopped,
       
   115 		EOpening,
       
   116 		EPaused,
       
   117 		EPlaying
       
   118 		};
       
   119 
       
   120 	static CAudioPdProperties* NewL(MAudioPdPlayUtilityCallback& aCallback);
       
   121 	static CAudioPdProperties* NewLC(MAudioPdPlayUtilityCallback& aCallback);
       
   122 
       
   123 	~CAudioPdProperties();
       
   124 
       
   125 
       
   126    //For Download Status
       
   127     void HandleDownloadEventL(TUint aTransactionID,
       
   128                               TBrCtlDownloadEvent aEvent,
       
   129                               TUint aValue);
       
   130 
       
   131 
       
   132 	 //For Audio control
       
   133 	void Play();
       
   134 	void Stop();
       
   135 	TInt Pause();
       
   136 	void SetVolume(TInt aVolume);
       
   137 	void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
       
   138 	void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
       
   139 	const TTimeIntervalMicroSeconds& Duration();
       
   140 	TInt MaxVolume();
       
   141 	void Close();
       
   142 	TInt GetPosition(TTimeIntervalMicroSeconds& aPosition);
       
   143 	void SetPosition(const TTimeIntervalMicroSeconds& aPosition);
       
   144 
       
   145 	TInt SetPriority(TInt aPriority, TMdaPriorityPreference aPref);
       
   146 	TInt GetVolume(TInt& aVolume);
       
   147 	TInt GetNumberOfMetaDataEntries(TInt& aNumEntries);
       
   148 	CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex);
       
   149 	TInt SetPlayWindow(const TTimeIntervalMicroSeconds& aStart,
       
   150 								const TTimeIntervalMicroSeconds& aEnd);
       
   151 	TInt ClearPlayWindow();
       
   152 	TInt SetBalance(TInt aBalance = KMMFBalanceCenter);
       
   153 	TInt GetBalance(TInt& aBalance);
       
   154 	TInt GetBitRate(TUint& aBitRate);
       
   155 
       
   156 	void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback);
       
   157 	void GetAudioLoadingProgressL(TInt& aPercentageProgress);
       
   158 	const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
       
   159 
       
   160 	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom);
       
   161 	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2);
       
   162 	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus);
       
   163 	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus);
       
   164 
       
   165 
       
   166 	MMMFDRMCustomCommand* GetDRMCustomCommand();
       
   167 
       
   168 
       
   169 	// from MMMFControllerEventMonitorObserver
       
   170 	virtual void HandleEvent(const TMMFEvent& aEvent);
       
   171 	// from MRepeatTrailingSilenceTimerObs
       
   172 	virtual void RepeatTrailingSilenceTimerComplete();
       
   173 
       
   174 	// from MMMFFindAndOpenControllerObserver
       
   175 	virtual void MfaocComplete(
       
   176 		TInt& aError,
       
   177 		RMMFController* aController,
       
   178 		TUid aControllerUid,
       
   179 		TMMFMessageDestination* aSourceHandle,
       
   180 		TMMFMessageDestination* aSinkHandle);
       
   181 
       
   182 
       
   183 	void OpenFileL(const TDesC& aFileName);
       
   184 
       
   185 
       
   186 	void OpenFileL(const RFile& aFile);
       
   187 
       
   188 	void OpenFileL(const TMMSource& aSource);
       
   189 
       
   190 
       
   191     void DlCompleteOpenFileL(const TDesC& aFileName);
       
   192 
       
   193 	TInt GetFilePosition(TInt& aFilePosition);
       
   194 	TInt SetFileSize(TInt aFileSize);
       
   195 	TInt SetBytesDownloaded(TInt aBytesDownloaded, TBool aDownloadComplete);
       
   196 
       
   197 	TInt CheckAudioPlayerState();
       
   198 
       
   199     void DoPlay();
       
   200 
       
   201 protected:
       
   202 
       
   203 private:
       
   204 	CAudioPdProperties(/*MMdaAudioPlayerCallback*/MAudioPdPlayUtilityCallback& aCallback);
       
   205 	void ConstructL(MAudioPdPlayUtilityCallback& aCallback);
       
   206 
       
   207 
       
   208 	MAudioPdPlayUtilityCallback* iAudioPdPlayCallback;
       
   209 
       
   210 	// last play window command
       
   211 	enum TPlayWindowCommand
       
   212 		{
       
   213 		ENone,
       
   214 		ESet,
       
   215 		EClear
       
   216 		};
       
   217 
       
   218 	/*MMdaAudioPlayerCallback*/MAudioPdPlayUtilityCallback& iCallback;
       
   219 	CMMFMdaAudioPlayerCallBack* iAsyncCallBack;
       
   220 	MAudioLoadingObserver* iLoadingObserver;
       
   221 	RMMFController iController;
       
   222 	CMMFControllerEventMonitor* iControllerEventMonitor;
       
   223 	TMMFAudioPlayerState iState;
       
   224 	TTimeIntervalMicroSeconds iDuration; // Needed because of api "Duration()" that returns a reference
       
   225 	TMMFPrioritySettings iPrioritySettings;
       
   226 
       
   227 	TInt iNumberOfTimesPlayed;
       
   228 	TInt iNumberOfTimesToRepeat;
       
   229 	TTimeIntervalMicroSeconds iTrailingSilence;
       
   230 	CRepeatTrailingSilenceTimer* iRepeatTrailingSilenceTimer;
       
   231 
       
   232 	// Source and sink handle info
       
   233 	TMMFMessageDestination* iSourceHandle;
       
   234 	TMMFMessageDestination iSinkHandle;
       
   235 
       
   236 	// Custom command handlers
       
   237 	RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCommands;
       
   238 	RMMFAudioPlayControllerCustomCommands iAudioPlayControllerCommands;
       
   239 
       
   240 
       
   241 	RMMFDRMCustomCommands iDRMCustomCommands;
       
   242 
       
   243 
       
   244 	// Current playback time so we can resume from where we were stopped
       
   245 	TTimeIntervalMicroSeconds iPosition;
       
   246 
       
   247 	// Play window start and end times and whether it has been set
       
   248 	TTimeIntervalMicroSeconds iPlayStart;
       
   249 	TTimeIntervalMicroSeconds iPlayEnd;
       
   250 	TPlayWindowCommand iPlayWindowSet;
       
   251 	RArray<TUid> iMediaIds;
       
   252 
       
   253 	CMMFControllerImplementationInformation* iControllerImplementationInformation;
       
   254 	TUid iControllerUid;
       
   255 
       
   256 	// utility class to find and open a suitable controller asynchronously
       
   257 	CMMFFindAndOpenController* iFindAndOpenController;
       
   258 
       
   259 
       
   260 	};
       
   261 
       
   262 #endif