mmfenh/advancedaudiocontroller/wavplaycontrollerplugin/src/MmfAudioController.h
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/wavplaycontrollerplugin/src/MmfAudioController.h	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,264 @@
+/*
+* 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: mmf audio controller header file
+*  Version     : %version: bh1mmcf#5.1.11 % 
+*
+*/
+
+
+#ifndef __MMF_AUDIOCONTROLLER_H__
+#define __MMF_AUDIOCONTROLLER_H__
+
+// Standard EPOC32 includes required by this header file
+#include <e32base.h>
+#include <e32std.h>
+#include <implementationproxy.h>
+
+// Public Media Server includes
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/server/mmfdatasink.h>
+#include <mmf/server/mmfdatasource.h>
+
+#include <mmf/server/mmfdatapathproxy.h>
+#include <mmf/common/mmfaudio.h>
+#include <mmf/server/mmfaudiooutput.h>
+#include <mmf/server/mmfaudioinput.h>
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include <mmf/common/mmfdrmcustomcommands.h>
+#include "MCustomInterfaceCustomCommandImplementor.h"
+
+class CConfigurationComponentsFactory;
+class CAudioOutputControlUtility;  
+
+const TInt KOneSecondInMicroSeconds(1000000);
+
+class CCustomInterfaceBuilder;
+class CMMFDataPath2;
+
+class CMMFMessageHolder : public CBase
+	{
+public:
+	static CMMFMessageHolder* NewL(TMMFMessage& aMessage)
+		{return new(ELeave) CMMFMessageHolder(aMessage);}
+	void Complete(TInt a) {iMessage.Complete(a);}
+private:
+	CMMFMessageHolder(TMMFMessage& aMessage): CBase(), iMessage(aMessage) {}
+	TMMFMessage iMessage;
+	};
+
+
+/**
+*
+* The public API for clients of the MMFAudioController
+*
+*/
+
+class CMMFAudioController : public CMMFController,
+							public MAsyncEventHandler,
+							public MMMFAudioPlayDeviceCustomCommandImplementor,
+							public MMMFAudioRecordDeviceCustomCommandImplementor,
+							public MMMFAudioPlayControllerCustomCommandImplementor,
+							public MMMFAudioRecordControllerCustomCommandImplementor,
+							public MCustomInterfaceCustomCommandImplementor,
+							public MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor,
+#ifndef SYMBIAN_CAF_V2
+							public MMMFAudioControllerCustomCommandImplementor
+#else
+							public MMMFAudioControllerCustomCommandImplementor,
+							public MMMFDRMCustomCommandImplementor,
+							public MMMFResourceNotificationCustomCommandImplementor
+#endif
+	{
+public:
+	static CMMFController* NewL();
+	virtual ~CMMFAudioController();
+
+	//implement CMMFController ecom plugin interface
+	virtual void AddDataSourceL(MDataSource& aDataSource);
+	virtual void AddDataSinkL(MDataSink& aDataSink);
+	virtual void RemoveDataSourceL(MDataSource& aDataSource);
+	virtual void RemoveDataSinkL(MDataSink& aDataSink);
+
+	virtual void ResetL();
+	virtual void PrimeL();
+	virtual void PlayL();
+	virtual void PauseL();
+	virtual void StopL() {} //not required
+	virtual void StopL(TMMFMessage& aMessage);
+
+	virtual TTimeIntervalMicroSeconds PositionL() const;
+	virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
+	virtual TTimeIntervalMicroSeconds DurationL() const;
+	virtual void CustomCommand(TMMFMessage& aMessage);
+	virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
+	virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
+	virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex);
+
+	//from MAsyncEventHandler
+	virtual TInt SendEventToClient(const TMMFEvent& aEvent);
+
+	//from MMMFAudioPlayDeviceCustomCommandImplementor
+	virtual void MapdSetVolumeL(TInt aVolume);
+	virtual void MapdGetMaxVolumeL(TInt& aMaxVolume);
+	virtual void MapdGetVolumeL(TInt& aVolume);
+	virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration);
+	virtual void MapdSetBalanceL(TInt aBalance);
+	virtual void MapdGetBalanceL(TInt& aBalance);
+
+	//from MMMFAudioRecordDeviceCustomCommandImplementor
+	virtual void MardSetGainL(TInt aGain);
+	virtual void MardGetMaxGainL(TInt& aMaxGain);
+	virtual void MardGetGainL(TInt& aGain);
+	virtual void MardSetBalanceL(TInt aBalance);
+	virtual void MardGetBalanceL(TInt& aBalance);
+
+	//from MMMFAudioPlayControllerCustomCommandImplementor
+	virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd);
+	virtual void MapcDeletePlaybackWindowL();
+	virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete);
+
+	//from MMMFAudioRecordControllerCustomCommandImplementor
+	virtual void MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime);
+	virtual void MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& aMaxDuration);
+	virtual void MarcSetMaxFileSizeL(TInt aFileSize);
+	virtual void MarcCropL(TBool aToEnd);
+	virtual void MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry);
+	virtual void MarcRemoveMetaDataEntryL(TInt aIndex);
+	virtual void MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry);
+
+	//from MMMFAudioControllerCustomCommandImplementor
+	virtual void MacSetSourceSampleRateL(TUint aSampleRate);
+	virtual void MacSetSourceNumChannelsL(TUint aNumChannels);
+	virtual void MacSetSourceFormatL(TUid aFormatUid);
+	virtual void MacSetSinkSampleRateL(TUint aSampleRate);
+	virtual void MacSetSinkNumChannelsL(TUint aNumChannels);
+	virtual void MacSetSinkFormatL(TUid aFormatUid);
+	virtual void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType);
+	virtual void MacSetSourceBitRateL(TUint aBitRate);
+	virtual void MacSetSourceDataTypeL(TFourCC aDataType);
+	virtual void MacSetSinkBitRateL(TUint aRate);
+	virtual void MacSetSinkDataTypeL(TFourCC aDataType);
+	virtual void MacGetSourceSampleRateL(TUint& aRate);
+	virtual void MacGetSourceBitRateL(TUint& aRate);
+	virtual void MacGetSourceNumChannelsL(TUint& aNumChannels);
+	virtual void MacGetSourceFormatL(TUid& aFormat);
+	virtual void MacGetSourceDataTypeL(TFourCC& aDataType);
+	virtual void MacGetSinkSampleRateL(TUint& aRate);
+	virtual void MacGetSinkBitRateL(TUint& aRate);
+	virtual void MacGetSinkNumChannelsL(TUint& aNumChannels);
+	virtual void MacGetSinkFormatL(TUid& aFormat);
+	virtual void MacGetSinkDataTypeL(TFourCC& aDataType);
+	virtual void MacGetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates);
+	virtual void MacGetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates);
+	virtual void MacGetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels);
+	virtual void MacGetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
+	virtual void MacGetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates);
+	virtual void MacGetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates);
+	virtual void MacGetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels);
+	virtual void MacGetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
+
+	// resource notification
+	virtual void MarnRegisterAsClientL(TUid aEventType,const TDesC8& aNotificationRegistrationData);
+	virtual void MarnCancelRegisterAsClientL(TUid aEventType);
+	virtual void MarnGetResourceNotificationDataL(TUid aEventType,TDes8& aNotificationData);
+	virtual void MarnWillResumePlayL();
+
+#ifdef SYMBIAN_CAF_V2
+	// from MMMFDRMCustomCommandImplementor
+	virtual TInt MdcExecuteIntent(ContentAccess::TIntent aIntent);
+	virtual TInt MdcEvaluateIntent(ContentAccess::TIntent aIntent);
+	virtual TInt MdcDisableAutomaticIntent(TBool aDisableAutoIntent);
+	virtual TInt MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue);
+#endif
+
+	//from MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
+	virtual TInt MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
+public:
+
+/**
+ TControllerState is an enumeration within the namespace  CMMFAudioController
+ The enumeration provides a set of control states:
+ EStopped is the initial state the controller resides in after it has been loaded
+ EPrimed is the state the controller is in when it has been associated with datapaths but is not streaming data
+ EPlaying is the state the controller is in when it is streaming data
+*/
+	enum TControllerState
+		{
+		EStopped,
+		EPrimed,
+		EPlaying
+		};
+
+protected:
+	CMMFAudioController();
+
+protected:
+	void ConstructL();
+	void NegotiateL();
+
+	void ConvertFromDevSoundCapsToSampleRatesL(const TMMFCapabilities& aDevSoundCaps,
+											   RArray<TUint>& aSampleRates);
+	void ConvertFromDevSoundCapsToNumChannelsL(const TMMFCapabilities& aDevSoundCaps,
+											   RArray<TUint>& aNumChannels);
+	void ConvertFromDevSoundCapsToDataTypesL(const TMMFCapabilities& aDevSoundCaps,
+											 RArray<TFourCC>& aDataTypes);
+	void ConvertFromSampleRateToDevSoundCapsL(TUint aSampleRate, TMMFCapabilities& aDevSoundCaps);
+	void ConvertFromNumChannelsToDevSoundCapsL(TUint aNumChannels, TMMFCapabilities& aDevSoundCaps);
+	void ConvertFromDataTypeToDevSoundCapsL(TFourCC aDataType, TMMFCapabilities& aDevSoundCaps);
+
+	virtual const TMMFMessageDestination& GetCustomInterfaceBuilderL();
+
+	// state accessor functions
+    TBool 				SetState( TControllerState aState );
+	TControllerState 	State() const ;
+	TBool            	IsValidStateTransition( TControllerState aState ) const;
+	TBool            	Invariant() const;
+	TBool            	IsValidState( TControllerState aState ) const ;
+	TBool            	ResetPostCondition() const;
+	TBool			 	SinkFormatRequired( MDataSink& aDataSink) const;
+	TBool            	SourceFormatRequired(MDataSource& aDataSource) const;
+	void             	CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const;
+	void			 	CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const;
+
+	//This method is used to assist testing of the audio controller
+	virtual TBool IsUnderTest(){return EFalse;}
+
+private:
+	MDataSource*            iDataSource;
+	MDataSink*              iDataSink;
+	CMMFDataPath2*          iDataPath;
+	CMMFFormatDecode*       iSourceFormat;
+	CMMFFormatEncode*       iSinkFormat;
+	TMediaId                iMediaId;
+#ifdef SYMBIAN_CAF_V2
+	TBool					iDisableAutoIntent;
+#endif
+	TControllerState        iState;
+	TMMFPrioritySettings    iPrioritySettings;
+	TBool                   iSourceAndSinkAdded;
+	TBool                   iStoppingRecording;
+	TBool                   iStoppingPlaying;
+	CMMFMessageHolder*		iStoppingMessage;
+	TBool					iIsPaused; // used to determine DRM command to send on PlayL()
+	CCustomInterfaceBuilder* iCustomInterfaceBuilder;
+	TBool					iSourceFormatSupportsCustomInterfaces;
+	TBool                   iRegisterARN;
+	TBool                   iIsPreemptionPause;
+
+	CConfigurationComponentsFactory*   iFactory;
+	CAudioOutputControlUtility*        iAudioOutputControlUtility; // used for audio routing for DRM files  
+	};
+
+
+#endif