os/mm/mmlibs/mmfw/src/Plugin/Controller/Audio/MmfAudioController.h
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/mm/mmlibs/mmfw/src/Plugin/Controller/Audio/MmfAudioController.h	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,240 @@
     1.4 +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of "Eclipse Public License v1.0"
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +//
    1.18 +
    1.19 +#ifndef __MMF_AUDIOCONTROLLER_H__
    1.20 +#define __MMF_AUDIOCONTROLLER_H__
    1.21 +
    1.22 +// Standard EPOC32 includes required by this header file
    1.23 +#include <e32base.h>
    1.24 +#include <e32std.h>
    1.25 +#include <ecom/implementationproxy.h>
    1.26 +
    1.27 +// Public Media Server includes
    1.28 +#include <mmf/common/mmfcontroller.h>
    1.29 +#include <mmf/server/mmfdatasink.h>
    1.30 +#include <mmf/server/mmfdatasource.h>
    1.31 +
    1.32 +#include <mmf/server/mmfdatapathproxy.h>
    1.33 +#include <mmf/common/mmfaudio.h>
    1.34 +#include <mmf/server/mmfaudiooutput.h>
    1.35 +#include <mmf/server/mmfaudioinput.h>
    1.36 +#include <mmf/common/mmfstandardcustomcommands.h>
    1.37 +#include <mmf/common/mmfdrmcustomcommands.h>
    1.38 +
    1.39 +const TInt KOneSecondInMicroSeconds(1000000);
    1.40 +
    1.41 +//forward declaration
    1.42 +class CMMFDataPath2;
    1.43 +
    1.44 +class CMMFMessageHolder : public CBase
    1.45 +	{
    1.46 +public:
    1.47 +	static CMMFMessageHolder* NewL(TMMFMessage& aMessage)
    1.48 +		{return new(ELeave) CMMFMessageHolder(aMessage);}
    1.49 +	void Complete(TInt a) {iMessage.Complete(a);}
    1.50 +private:
    1.51 +	CMMFMessageHolder(TMMFMessage& aMessage): CBase(), iMessage(aMessage) {}
    1.52 +	TMMFMessage iMessage;
    1.53 +	};
    1.54 +
    1.55 +
    1.56 +/**
    1.57 +*
    1.58 +* The public API for clients of the MMFAudioController
    1.59 +*            
    1.60 +*/
    1.61 +
    1.62 +class CMMFAudioController : public CMMFController, 
    1.63 +							public MAsyncEventHandler,
    1.64 +							public MMMFAudioPlayDeviceCustomCommandImplementor,
    1.65 +							public MMMFAudioRecordDeviceCustomCommandImplementor,
    1.66 +							public MMMFAudioPlayControllerCustomCommandImplementor,
    1.67 +							public MMMFAudioRecordControllerCustomCommandImplementor,
    1.68 +							public MMMFAudioControllerCustomCommandImplementor,
    1.69 +							public MMMFDRMCustomCommandImplementor,
    1.70 +							public MMMFResourceNotificationCustomCommandImplementor,
    1.71 +							public MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
    1.72 +	{
    1.73 +public:
    1.74 +	static CMMFController* NewL();
    1.75 +	virtual ~CMMFAudioController();
    1.76 +
    1.77 +	//implement CMMFController ecom plugin interface
    1.78 +	virtual void AddDataSourceL(MDataSource& aDataSource);
    1.79 +	virtual void AddDataSinkL(MDataSink& aDataSink);
    1.80 +	virtual void RemoveDataSourceL(MDataSource& aDataSource);
    1.81 +	virtual void RemoveDataSinkL(MDataSink& aDataSink);
    1.82 +
    1.83 +	virtual void ResetL();
    1.84 +	virtual void PrimeL();
    1.85 +	virtual void PlayL();
    1.86 +	virtual void PauseL();
    1.87 +	virtual void StopL() {} //not required
    1.88 +	virtual void StopL(TMMFMessage& aMessage);
    1.89 +
    1.90 +	virtual TTimeIntervalMicroSeconds PositionL() const;
    1.91 +	virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
    1.92 +	virtual TTimeIntervalMicroSeconds DurationL() const;
    1.93 +	virtual void CustomCommand(TMMFMessage& aMessage);
    1.94 +	virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
    1.95 +	virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
    1.96 +	virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex);
    1.97 +
    1.98 +	//from MAsyncEventHandler
    1.99 +	virtual TInt SendEventToClient(const TMMFEvent& aEvent);
   1.100 +
   1.101 +	//from MMMFAudioPlayDeviceCustomCommandImplementor
   1.102 +	virtual void MapdSetVolumeL(TInt aVolume);
   1.103 +	virtual void MapdGetMaxVolumeL(TInt& aMaxVolume);
   1.104 +	virtual void MapdGetVolumeL(TInt& aVolume);
   1.105 +	virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration);
   1.106 +	virtual void MapdSetBalanceL(TInt aBalance);
   1.107 +	virtual void MapdGetBalanceL(TInt& aBalance);
   1.108 +
   1.109 +	//from MMMFAudioRecordDeviceCustomCommandImplementor
   1.110 +	virtual void MardSetGainL(TInt aGain);
   1.111 +	virtual void MardGetMaxGainL(TInt& aMaxGain);
   1.112 +	virtual void MardGetGainL(TInt& aGain);
   1.113 +	virtual void MardSetBalanceL(TInt aBalance);
   1.114 +	virtual void MardGetBalanceL(TInt& aBalance);
   1.115 +
   1.116 +	//from MMMFAudioPlayControllerCustomCommandImplementor
   1.117 +	virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd);
   1.118 +	virtual void MapcDeletePlaybackWindowL();
   1.119 +	virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete);
   1.120 +
   1.121 +	//from MMMFAudioRecordControllerCustomCommandImplementor
   1.122 +	virtual void MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime);
   1.123 +	virtual void MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& aMaxDuration);
   1.124 +	virtual void MarcSetMaxFileSizeL(TInt aFileSize);
   1.125 +	virtual void MarcCropL(TBool aToEnd);
   1.126 +	virtual void MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry);
   1.127 +	virtual void MarcRemoveMetaDataEntryL(TInt aIndex);
   1.128 +	virtual void MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry);
   1.129 +
   1.130 +	//from MMMFAudioControllerCustomCommandImplementor
   1.131 +	virtual void MacSetSourceSampleRateL(TUint aSampleRate);
   1.132 +	virtual void MacSetSourceNumChannelsL(TUint aNumChannels);
   1.133 +	virtual void MacSetSourceFormatL(TUid aFormatUid);
   1.134 +	virtual void MacSetSinkSampleRateL(TUint aSampleRate);
   1.135 +	virtual void MacSetSinkNumChannelsL(TUint aNumChannels);
   1.136 +	virtual void MacSetSinkFormatL(TUid aFormatUid);
   1.137 +	virtual void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType);
   1.138 +	virtual void MacSetSourceBitRateL(TUint aBitRate);
   1.139 +	virtual void MacSetSourceDataTypeL(TFourCC aDataType);
   1.140 +	virtual void MacSetSinkBitRateL(TUint aRate);
   1.141 +	virtual void MacSetSinkDataTypeL(TFourCC aDataType);
   1.142 +	virtual void MacGetSourceSampleRateL(TUint& aRate);
   1.143 +	virtual void MacGetSourceBitRateL(TUint& aRate);
   1.144 +	virtual void MacGetSourceNumChannelsL(TUint& aNumChannels);
   1.145 +	virtual void MacGetSourceFormatL(TUid& aFormat);
   1.146 +	virtual void MacGetSourceDataTypeL(TFourCC& aDataType);
   1.147 +	virtual void MacGetSinkSampleRateL(TUint& aRate);
   1.148 +	virtual void MacGetSinkBitRateL(TUint& aRate);
   1.149 +	virtual void MacGetSinkNumChannelsL(TUint& aNumChannels);
   1.150 +	virtual void MacGetSinkFormatL(TUid& aFormat);
   1.151 +	virtual void MacGetSinkDataTypeL(TFourCC& aDataType);
   1.152 +	virtual void MacGetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates);
   1.153 +	virtual void MacGetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates);
   1.154 +	virtual void MacGetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels);
   1.155 +	virtual void MacGetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
   1.156 +	virtual void MacGetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates);
   1.157 +	virtual void MacGetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates);
   1.158 +	virtual void MacGetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels);
   1.159 +	virtual void MacGetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
   1.160 +
   1.161 +	// resource notification 
   1.162 +	virtual void MarnRegisterAsClientL(TUid aEventType,const TDesC8& aNotificationRegistrationData);
   1.163 +	virtual void MarnCancelRegisterAsClientL(TUid aEventType);
   1.164 +	virtual void MarnGetResourceNotificationDataL(TUid aEventType,TDes8& aNotificationData);
   1.165 +	virtual void MarnWillResumePlayL();
   1.166 +	
   1.167 +	// from MMMFDRMCustomCommandImplementor
   1.168 +	virtual TInt MdcExecuteIntent(ContentAccess::TIntent aIntent);
   1.169 +	virtual TInt MdcEvaluateIntent(ContentAccess::TIntent aIntent);
   1.170 +	virtual TInt MdcDisableAutomaticIntent(TBool aDisableAutoIntent);
   1.171 +	virtual TInt MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue);
   1.172 +
   1.173 +	//from MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
   1.174 +	virtual TInt MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
   1.175 +public:
   1.176 +
   1.177 +/**
   1.178 + TControllerState is an enumeration within the namespace  CMMFAudioController
   1.179 + The enumeration provides a set of control states:
   1.180 + EStopped is the initial state the controller resides in after it has been loaded
   1.181 + EPrimed is the state the controller is in when it has been associated with datapaths but is not streaming data
   1.182 + EPlaying is the state the controller is in when it is streaming data
   1.183 +*/
   1.184 +	enum TControllerState
   1.185 +		{
   1.186 +		EStopped,
   1.187 +		EPrimed,
   1.188 +		EPlaying
   1.189 +		};
   1.190 +
   1.191 +protected:
   1.192 +	CMMFAudioController();
   1.193 +
   1.194 +protected:
   1.195 +	void ConstructL();
   1.196 +	void NegotiateL();
   1.197 +
   1.198 +	void ConvertFromDevSoundCapsToSampleRatesL(const TMMFCapabilities& aDevSoundCaps,
   1.199 +											   RArray<TUint>& aSampleRates);
   1.200 +	void ConvertFromDevSoundCapsToNumChannelsL(const TMMFCapabilities& aDevSoundCaps,
   1.201 +											   RArray<TUint>& aNumChannels);
   1.202 +	void ConvertFromDevSoundCapsToDataTypesL(const TMMFCapabilities& aDevSoundCaps,
   1.203 +											 RArray<TFourCC>& aDataTypes);
   1.204 +	void ConvertFromSampleRateToDevSoundCapsL(TUint aSampleRate, TMMFCapabilities& aDevSoundCaps);
   1.205 +	void ConvertFromNumChannelsToDevSoundCapsL(TUint aNumChannels, TMMFCapabilities& aDevSoundCaps);
   1.206 +	void ConvertFromDataTypeToDevSoundCapsL(TFourCC aDataType, TMMFCapabilities& aDevSoundCaps);
   1.207 +
   1.208 +	// state accessor functions
   1.209 +    TBool 				SetState( TControllerState aState );
   1.210 +	TControllerState 	State() const ;
   1.211 +	TBool            	IsValidStateTransition( TControllerState aState ) const;
   1.212 +	TBool            	Invariant() const;
   1.213 +	TBool            	IsValidState( TControllerState aState ) const ;
   1.214 +	TBool            	ResetPostCondition() const;
   1.215 +	TBool			 	SinkFormatRequired( MDataSink& aDataSink) const;
   1.216 +	TBool            	SourceFormatRequired(MDataSource& aDataSource) const;
   1.217 +	void             	CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const;
   1.218 +	void			 	CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const;
   1.219 +
   1.220 +	//This method is used to assist testing of the audio controller
   1.221 +	virtual TBool IsUnderTest(){return EFalse;}
   1.222 +
   1.223 +private:
   1.224 +	MDataSource*            iDataSource;
   1.225 +	MDataSink*              iDataSink;
   1.226 +	CMMFDataPath2*          iDataPath;
   1.227 +	CMMFFormatDecode*       iSourceFormat;
   1.228 +	CMMFFormatEncode*       iSinkFormat;
   1.229 +	TMediaId                iMediaId;
   1.230 +	TBool					iDisableAutoIntent;
   1.231 +	TControllerState        iState;
   1.232 +	TMMFPrioritySettings    iPrioritySettings;
   1.233 +	TBool                   iSourceAndSinkAdded;
   1.234 +	TBool                   iStoppingRecording;
   1.235 +	CMMFMessageHolder*		iStoppingMessage;
   1.236 +	TBool					iIsPaused; // used to determine DRM command to send on PlayL()
   1.237 +	TBool					iSourceFormatSupportsCustomInterfaces;
   1.238 +	TBool                   iRegisterARN;//CR
   1.239 +	TBool                   iIsPreemptionPause;//CR
   1.240 +	};
   1.241 +
   1.242 +
   1.243 +#endif