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