devsoundextensions/drmaudioplayer/DRMPlayUtility/src/mmfclientdrmaudioplayer.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/drmaudioplayer/DRMPlayUtility/src/mmfclientdrmaudioplayer.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,248 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   DRM Client AudioPlay Utility
+*
+*/
+
+
+
+#ifndef __MMFCLIENTAUDIOPLAY_H__
+#define __MMFCLIENTAUDIOPLAY_H__
+
+#include <e32std.h>
+#include <e32base.h>
+#include <mdaaudiosampleplayer.h>
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/server/mmffile.h>
+#include <mmf/server/mmfdes.h>
+#include <mmfcontrollerimplementationuids.hrh>
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include "mmfdrm.h"
+//#include "MmfClientUtility.h"
+
+static const TUid KUidMmfAudioController = {KMmfUidControllerAudio}; 
+
+/**
+Mixin class to allow notification that the timed silence has finished.
+*/
+class MRepeatTrailingSilenceTimerObs
+	{
+public:
+	virtual void RepeatTrailingSilenceTimerComplete() = 0;
+	};
+
+/**
+CTimer-based active object that waits the requested time before notifying its observer.
+*/
+class CRepeatTrailingSilenceTimer : public CTimer
+	{
+public:
+	static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs);
+	void RunL();
+private:
+	CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs);
+private:
+	MRepeatTrailingSilenceTimerObs& iObs;
+	};
+
+
+
+/**
+Concrete implementation of the CDRMPlayerUtility API.
+@see CDRMPlayerUtility
+*/
+class CMMFDrmAudioPlayerUtility : public CActive
+	{
+	enum TDRMUtilityState {
+		EIdle,
+		EInitializing,
+		EPlaying,
+		EPaused
+		};
+
+friend class CDrmPlayerUtility;
+
+public:
+	static CMMFDrmAudioPlayerUtility* NewFilePlayerL(const TDesC& aFileName, 
+								MDrmAudioPlayerCallback& aCallback, 
+								TInt aPriority = EMdaPriorityNormal, 
+								TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+	static CMMFDrmAudioPlayerUtility* NewDesPlayerL(const TDesC8& aData, 
+								MDrmAudioPlayerCallback& aCallback, 
+								TInt aPriority = EMdaPriorityNormal, 
+								TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+	static CMMFDrmAudioPlayerUtility* NewDesPlayerReadOnlyL(const TDesC8& aData, 
+								MDrmAudioPlayerCallback& aCallback, 
+								TInt aPriority = EMdaPriorityNormal, 
+								TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+
+	static CMMFDrmAudioPlayerUtility* NewL(MDrmAudioPlayerCallback& aCallback,
+								TInt aPriority = EMdaPriorityNormal,
+								TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+
+	~CMMFDrmAudioPlayerUtility();
+	void Play();
+	void Stop();
+	void SetVolume(TInt aVolume);
+	void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
+	void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
+	const TTimeIntervalMicroSeconds& Duration();
+	TInt MaxVolume();
+	void OpenFileL(const TDesC& aFileName);
+	void OpenFileL(const RFile& aFile);
+	void OpenFileL(const TMMSource& aSource);
+	void OpenDesL(const TDesC8& aDescriptor);
+	void OpenUrlL(const TDesC& aUrl, TInt aIapId = KUseDefaultIap, const TDesC8& aMimeType=KNullDesC8);
+
+	// API Additions since version 7.0	
+	TInt Pause();
+	void Close();
+	TInt GetPosition(TTimeIntervalMicroSeconds& aPosition);
+	void SetPosition(const TTimeIntervalMicroSeconds& aPosition);
+
+	TInt SetPriority(TInt aPriority, TMdaPriorityPreference aPref);
+	TInt GetVolume(TInt& aVolume);
+	TInt GetNumberOfMetaDataEntries(TInt& aNumEntries);
+	CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex);
+	TInt SetPlayWindow(const TTimeIntervalMicroSeconds& aStart,
+								const TTimeIntervalMicroSeconds& aEnd);
+	TInt ClearPlayWindow();
+	TInt SetBalance(TInt aBalance = KMMFBalanceCenter);
+	TInt GetBalance(TInt& aBalance);
+	TInt GetBitRate(TUint& aBitRate);
+	
+    void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aLoadingObserver);
+
+	void GetAudioLoadingProgressL(TInt& aPercentageProgress);
+	const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
+	
+	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom);
+	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2);
+	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus);
+	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus);
+
+
+protected:
+	CMMFDrmAudioPlayerUtility(MDrmAudioPlayerCallback& aCallback, TInt aActivePriority);
+	void DoPlay();
+	void RunL();
+	void DoCancel();
+
+private:
+	void ConstructL(TInt aPriority = EMdaPriorityNormal,
+					TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+
+	void ConstructL(const TDesC& aFileName, 
+					TInt aPriority = EMdaPriorityNormal, 
+					TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+
+	void ConstructL(const TDesC8& aData, 
+					TInt aPriority = EMdaPriorityNormal, 
+					TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+
+	void ConstructReadOnlyL(const TDesC8& aData, 
+					TInt aPriority = EMdaPriorityNormal, 
+					TMdaPriorityPreference aPref = EMdaPriorityPreferenceTimeAndQuality);
+
+	void ConnectL();
+	
+	//Returns True if Destination CustomCommand needs to be blocked
+	TBool IsValidCustomCommandDestination(TUid aDestinationUid, const TDesC8& aParam);
+    TBool CheckCustomInterfaceBuilderImplL(const TDesC8& aParam);
+    
+	// last play window command
+	enum TPlayWindowCommand
+		{
+		ENone,
+		ESet,
+		EClear
+		};
+
+	MDrmAudioPlayerCallback& iCallback;
+	TDRMUtilityState iState;
+	TTimeIntervalMicroSeconds iDuration; // Needed because of api "Duration()" that returns a reference
+
+	
+	CMMFControllerImplementationInformation* iControllerImplementationInformation;
+	CDrm*						iDrm;
+	RDrmSession*				iDrmSession;
+	TInt						iError;
+	TFileName iFileName;
+	CBufFlat*					iMetaDataBuffer;
+	MAudioLoadingObserver*		iLoadingObserver;
+	TAsyncCallbackStatePckgBuf	iAsyncCallback;
+	TErrorDurationStructPckgBuf	iErrorDurationStruct;
+	TRequestStatus*				iRequestStatus;
+	TDes8*						iDataPointer;
+	TDRMCustomCommand			iCustomCommand;
+	TPckgCustomCommand			iCustomCommandPckg;
+
+    struct TCustomCommands
+       {
+       const TMMFMessageDestinationPckg* iDestination;
+       TInt iFunction;
+       const TDesC8* iDataTo1;
+       const TDesC8* iDataTo2; 
+       const TDes8* iDataFrom;
+
+       TCustomCommands(const TMMFMessageDestinationPckg& aDestination, TInt aFunction,const TDesC8& aDataTo1,const TDesC8& aDataTo2,TDes8& aDataFrom)
+          {
+          iDestination = &aDestination;
+          iFunction = aFunction;
+          iDataTo1 = &aDataTo1;
+          iDataTo2 = &aDataTo2;
+          iDataFrom = &aDataFrom;
+          };
+       };
+     struct TCustomCommandsAsync
+       {
+       const TMMFMessageDestinationPckg* iDestination;
+       TInt iFunction;
+       const TDesC8* iDataTo1;
+       const TDesC8* iDataTo2; 
+       TDes8* iDataFrom;
+       TRequestStatus* iRequestStatus;
+
+       TCustomCommandsAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction,const TDesC8& aDataTo1,const TDesC8& aDataTo2, TDes8& aDataFrom,TRequestStatus& aStatus)
+          {
+          iDestination = &aDestination;
+          iFunction = aFunction;
+          iDataTo1 = &aDataTo1;
+          iDataTo2 = &aDataTo2;
+          iDataFrom = &aDataFrom;
+          iRequestStatus = &aStatus;
+          };
+       };
+     struct TCustomCommandsAsyncNoData
+       {
+       const TMMFMessageDestinationPckg* iDestination;
+       TInt iFunction;
+       const TDesC8* iDataTo1;
+       const TDesC8* iDataTo2; 
+       TRequestStatus* iRequestStatus;
+
+       TCustomCommandsAsyncNoData(const TMMFMessageDestinationPckg& aDestination, TInt aFunction,const TDesC8& aDataTo1,const TDesC8& aDataTo2,TRequestStatus& aStatus)
+          {
+          iDestination = &aDestination;
+          iFunction = aFunction;
+          iDataTo1 = &aDataTo1;
+          iDataTo2 = &aDataTo2;
+          iRequestStatus = &aStatus;
+          };
+       };
+
+    typedef TPckg<TCustomCommands> TPckgTCustomCommandStructure;
+	}; 
+
+#endif