mmfenh/advancedaudiocontroller/wavplaycontrollerplugin/src/MmfAudioController.h
changeset 0 71ca22bcf22a
equal deleted inserted replaced
-1:000000000000 0:71ca22bcf22a
       
     1 /*
       
     2 * Copyright (c) 2005-2006 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: mmf audio controller header file
       
    15 *  Version     : %version: bh1mmcf#5.1.11 % 
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #ifndef __MMF_AUDIOCONTROLLER_H__
       
    21 #define __MMF_AUDIOCONTROLLER_H__
       
    22 
       
    23 // Standard EPOC32 includes required by this header file
       
    24 #include <e32base.h>
       
    25 #include <e32std.h>
       
    26 #include <implementationproxy.h>
       
    27 
       
    28 // Public Media Server includes
       
    29 #include <mmf/common/mmfcontroller.h>
       
    30 #include <mmf/server/mmfdatasink.h>
       
    31 #include <mmf/server/mmfdatasource.h>
       
    32 
       
    33 #include <mmf/server/mmfdatapathproxy.h>
       
    34 #include <mmf/common/mmfaudio.h>
       
    35 #include <mmf/server/mmfaudiooutput.h>
       
    36 #include <mmf/server/mmfaudioinput.h>
       
    37 #include <mmf/common/mmfstandardcustomcommands.h>
       
    38 #include <mmf/common/mmfdrmcustomcommands.h>
       
    39 #include "MCustomInterfaceCustomCommandImplementor.h"
       
    40 
       
    41 class CConfigurationComponentsFactory;
       
    42 class CAudioOutputControlUtility;  
       
    43 
       
    44 const TInt KOneSecondInMicroSeconds(1000000);
       
    45 
       
    46 class CCustomInterfaceBuilder;
       
    47 class CMMFDataPath2;
       
    48 
       
    49 class CMMFMessageHolder : public CBase
       
    50 	{
       
    51 public:
       
    52 	static CMMFMessageHolder* NewL(TMMFMessage& aMessage)
       
    53 		{return new(ELeave) CMMFMessageHolder(aMessage);}
       
    54 	void Complete(TInt a) {iMessage.Complete(a);}
       
    55 private:
       
    56 	CMMFMessageHolder(TMMFMessage& aMessage): CBase(), iMessage(aMessage) {}
       
    57 	TMMFMessage iMessage;
       
    58 	};
       
    59 
       
    60 
       
    61 /**
       
    62 *
       
    63 * The public API for clients of the MMFAudioController
       
    64 *
       
    65 */
       
    66 
       
    67 class CMMFAudioController : public CMMFController,
       
    68 							public MAsyncEventHandler,
       
    69 							public MMMFAudioPlayDeviceCustomCommandImplementor,
       
    70 							public MMMFAudioRecordDeviceCustomCommandImplementor,
       
    71 							public MMMFAudioPlayControllerCustomCommandImplementor,
       
    72 							public MMMFAudioRecordControllerCustomCommandImplementor,
       
    73 							public MCustomInterfaceCustomCommandImplementor,
       
    74 							public MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor,
       
    75 #ifndef SYMBIAN_CAF_V2
       
    76 							public MMMFAudioControllerCustomCommandImplementor
       
    77 #else
       
    78 							public MMMFAudioControllerCustomCommandImplementor,
       
    79 							public MMMFDRMCustomCommandImplementor,
       
    80 							public MMMFResourceNotificationCustomCommandImplementor
       
    81 #endif
       
    82 	{
       
    83 public:
       
    84 	static CMMFController* NewL();
       
    85 	virtual ~CMMFAudioController();
       
    86 
       
    87 	//implement CMMFController ecom plugin interface
       
    88 	virtual void AddDataSourceL(MDataSource& aDataSource);
       
    89 	virtual void AddDataSinkL(MDataSink& aDataSink);
       
    90 	virtual void RemoveDataSourceL(MDataSource& aDataSource);
       
    91 	virtual void RemoveDataSinkL(MDataSink& aDataSink);
       
    92 
       
    93 	virtual void ResetL();
       
    94 	virtual void PrimeL();
       
    95 	virtual void PlayL();
       
    96 	virtual void PauseL();
       
    97 	virtual void StopL() {} //not required
       
    98 	virtual void StopL(TMMFMessage& aMessage);
       
    99 
       
   100 	virtual TTimeIntervalMicroSeconds PositionL() const;
       
   101 	virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
       
   102 	virtual TTimeIntervalMicroSeconds DurationL() const;
       
   103 	virtual void CustomCommand(TMMFMessage& aMessage);
       
   104 	virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
       
   105 	virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
       
   106 	virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex);
       
   107 
       
   108 	//from MAsyncEventHandler
       
   109 	virtual TInt SendEventToClient(const TMMFEvent& aEvent);
       
   110 
       
   111 	//from MMMFAudioPlayDeviceCustomCommandImplementor
       
   112 	virtual void MapdSetVolumeL(TInt aVolume);
       
   113 	virtual void MapdGetMaxVolumeL(TInt& aMaxVolume);
       
   114 	virtual void MapdGetVolumeL(TInt& aVolume);
       
   115 	virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration);
       
   116 	virtual void MapdSetBalanceL(TInt aBalance);
       
   117 	virtual void MapdGetBalanceL(TInt& aBalance);
       
   118 
       
   119 	//from MMMFAudioRecordDeviceCustomCommandImplementor
       
   120 	virtual void MardSetGainL(TInt aGain);
       
   121 	virtual void MardGetMaxGainL(TInt& aMaxGain);
       
   122 	virtual void MardGetGainL(TInt& aGain);
       
   123 	virtual void MardSetBalanceL(TInt aBalance);
       
   124 	virtual void MardGetBalanceL(TInt& aBalance);
       
   125 
       
   126 	//from MMMFAudioPlayControllerCustomCommandImplementor
       
   127 	virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd);
       
   128 	virtual void MapcDeletePlaybackWindowL();
       
   129 	virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete);
       
   130 
       
   131 	//from MMMFAudioRecordControllerCustomCommandImplementor
       
   132 	virtual void MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime);
       
   133 	virtual void MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& aMaxDuration);
       
   134 	virtual void MarcSetMaxFileSizeL(TInt aFileSize);
       
   135 	virtual void MarcCropL(TBool aToEnd);
       
   136 	virtual void MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry);
       
   137 	virtual void MarcRemoveMetaDataEntryL(TInt aIndex);
       
   138 	virtual void MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry);
       
   139 
       
   140 	//from MMMFAudioControllerCustomCommandImplementor
       
   141 	virtual void MacSetSourceSampleRateL(TUint aSampleRate);
       
   142 	virtual void MacSetSourceNumChannelsL(TUint aNumChannels);
       
   143 	virtual void MacSetSourceFormatL(TUid aFormatUid);
       
   144 	virtual void MacSetSinkSampleRateL(TUint aSampleRate);
       
   145 	virtual void MacSetSinkNumChannelsL(TUint aNumChannels);
       
   146 	virtual void MacSetSinkFormatL(TUid aFormatUid);
       
   147 	virtual void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType);
       
   148 	virtual void MacSetSourceBitRateL(TUint aBitRate);
       
   149 	virtual void MacSetSourceDataTypeL(TFourCC aDataType);
       
   150 	virtual void MacSetSinkBitRateL(TUint aRate);
       
   151 	virtual void MacSetSinkDataTypeL(TFourCC aDataType);
       
   152 	virtual void MacGetSourceSampleRateL(TUint& aRate);
       
   153 	virtual void MacGetSourceBitRateL(TUint& aRate);
       
   154 	virtual void MacGetSourceNumChannelsL(TUint& aNumChannels);
       
   155 	virtual void MacGetSourceFormatL(TUid& aFormat);
       
   156 	virtual void MacGetSourceDataTypeL(TFourCC& aDataType);
       
   157 	virtual void MacGetSinkSampleRateL(TUint& aRate);
       
   158 	virtual void MacGetSinkBitRateL(TUint& aRate);
       
   159 	virtual void MacGetSinkNumChannelsL(TUint& aNumChannels);
       
   160 	virtual void MacGetSinkFormatL(TUid& aFormat);
       
   161 	virtual void MacGetSinkDataTypeL(TFourCC& aDataType);
       
   162 	virtual void MacGetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates);
       
   163 	virtual void MacGetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates);
       
   164 	virtual void MacGetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels);
       
   165 	virtual void MacGetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
       
   166 	virtual void MacGetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates);
       
   167 	virtual void MacGetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates);
       
   168 	virtual void MacGetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels);
       
   169 	virtual void MacGetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
       
   170 
       
   171 	// resource notification
       
   172 	virtual void MarnRegisterAsClientL(TUid aEventType,const TDesC8& aNotificationRegistrationData);
       
   173 	virtual void MarnCancelRegisterAsClientL(TUid aEventType);
       
   174 	virtual void MarnGetResourceNotificationDataL(TUid aEventType,TDes8& aNotificationData);
       
   175 	virtual void MarnWillResumePlayL();
       
   176 
       
   177 #ifdef SYMBIAN_CAF_V2
       
   178 	// from MMMFDRMCustomCommandImplementor
       
   179 	virtual TInt MdcExecuteIntent(ContentAccess::TIntent aIntent);
       
   180 	virtual TInt MdcEvaluateIntent(ContentAccess::TIntent aIntent);
       
   181 	virtual TInt MdcDisableAutomaticIntent(TBool aDisableAutoIntent);
       
   182 	virtual TInt MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue);
       
   183 #endif
       
   184 
       
   185 	//from MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
       
   186 	virtual TInt MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
       
   187 public:
       
   188 
       
   189 /**
       
   190  TControllerState is an enumeration within the namespace  CMMFAudioController
       
   191  The enumeration provides a set of control states:
       
   192  EStopped is the initial state the controller resides in after it has been loaded
       
   193  EPrimed is the state the controller is in when it has been associated with datapaths but is not streaming data
       
   194  EPlaying is the state the controller is in when it is streaming data
       
   195 */
       
   196 	enum TControllerState
       
   197 		{
       
   198 		EStopped,
       
   199 		EPrimed,
       
   200 		EPlaying
       
   201 		};
       
   202 
       
   203 protected:
       
   204 	CMMFAudioController();
       
   205 
       
   206 protected:
       
   207 	void ConstructL();
       
   208 	void NegotiateL();
       
   209 
       
   210 	void ConvertFromDevSoundCapsToSampleRatesL(const TMMFCapabilities& aDevSoundCaps,
       
   211 											   RArray<TUint>& aSampleRates);
       
   212 	void ConvertFromDevSoundCapsToNumChannelsL(const TMMFCapabilities& aDevSoundCaps,
       
   213 											   RArray<TUint>& aNumChannels);
       
   214 	void ConvertFromDevSoundCapsToDataTypesL(const TMMFCapabilities& aDevSoundCaps,
       
   215 											 RArray<TFourCC>& aDataTypes);
       
   216 	void ConvertFromSampleRateToDevSoundCapsL(TUint aSampleRate, TMMFCapabilities& aDevSoundCaps);
       
   217 	void ConvertFromNumChannelsToDevSoundCapsL(TUint aNumChannels, TMMFCapabilities& aDevSoundCaps);
       
   218 	void ConvertFromDataTypeToDevSoundCapsL(TFourCC aDataType, TMMFCapabilities& aDevSoundCaps);
       
   219 
       
   220 	virtual const TMMFMessageDestination& GetCustomInterfaceBuilderL();
       
   221 
       
   222 	// state accessor functions
       
   223     TBool 				SetState( TControllerState aState );
       
   224 	TControllerState 	State() const ;
       
   225 	TBool            	IsValidStateTransition( TControllerState aState ) const;
       
   226 	TBool            	Invariant() const;
       
   227 	TBool            	IsValidState( TControllerState aState ) const ;
       
   228 	TBool            	ResetPostCondition() const;
       
   229 	TBool			 	SinkFormatRequired( MDataSink& aDataSink) const;
       
   230 	TBool            	SourceFormatRequired(MDataSource& aDataSource) const;
       
   231 	void             	CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const;
       
   232 	void			 	CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const;
       
   233 
       
   234 	//This method is used to assist testing of the audio controller
       
   235 	virtual TBool IsUnderTest(){return EFalse;}
       
   236 
       
   237 private:
       
   238 	MDataSource*            iDataSource;
       
   239 	MDataSink*              iDataSink;
       
   240 	CMMFDataPath2*          iDataPath;
       
   241 	CMMFFormatDecode*       iSourceFormat;
       
   242 	CMMFFormatEncode*       iSinkFormat;
       
   243 	TMediaId                iMediaId;
       
   244 #ifdef SYMBIAN_CAF_V2
       
   245 	TBool					iDisableAutoIntent;
       
   246 #endif
       
   247 	TControllerState        iState;
       
   248 	TMMFPrioritySettings    iPrioritySettings;
       
   249 	TBool                   iSourceAndSinkAdded;
       
   250 	TBool                   iStoppingRecording;
       
   251 	TBool                   iStoppingPlaying;
       
   252 	CMMFMessageHolder*		iStoppingMessage;
       
   253 	TBool					iIsPaused; // used to determine DRM command to send on PlayL()
       
   254 	CCustomInterfaceBuilder* iCustomInterfaceBuilder;
       
   255 	TBool					iSourceFormatSupportsCustomInterfaces;
       
   256 	TBool                   iRegisterARN;
       
   257 	TBool                   iIsPreemptionPause;
       
   258 
       
   259 	CConfigurationComponentsFactory*   iFactory;
       
   260 	CAudioOutputControlUtility*        iAudioOutputControlUtility; // used for audio routing for DRM files  
       
   261 	};
       
   262 
       
   263 
       
   264 #endif