os/mm/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/UseOldCodecAudioController/TestUseOldCodecAudioController.h
Update contrib.
1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #ifndef __TESTUSEOLDCODECAUDIOCONTROLLER_H__
17 #define __TESTUSEOLDCODECAUDIOCONTROLLER_H__
19 // Standard EPOC32 includes required by this header file
23 #include <ecom/implementationproxy.h>
25 // Public Media Server includes
26 #include <mmf/common/mmfcontroller.h>
27 #include <mmf/server/mmfdatasink.h>
28 #include <mmf/server/mmfdatasource.h>
30 #include <mmf/server/mmfdatapathproxy.h>
31 #include <mmf/common/mmfaudio.h>
32 #include <mmf/server/mmfaudiooutput.h>
33 #include <mmf/server/mmfaudioinput.h>
34 #include <mmf/common/mmfstandardcustomcommands.h>
37 const TInt KOneSecondInMicroSeconds(1000000);
40 class CMMFMessageHolder : public CBase
43 static CMMFMessageHolder* NewL(TMMFMessage& aMessage)
44 {return new(ELeave) CMMFMessageHolder(aMessage);}
45 void Complete(TInt a) {iMessage.Complete(a);}
47 CMMFMessageHolder(TMMFMessage& aMessage): CBase(), iMessage(aMessage) {}
53 * The public API for clients of the MMFAudioController
57 class CMMFTestUseOldCodecAudioController : public CMMFController,
58 public MAsyncEventHandler,
59 public MMMFAudioPlayDeviceCustomCommandImplementor,
60 public MMMFAudioRecordDeviceCustomCommandImplementor,
61 public MMMFAudioPlayControllerCustomCommandImplementor,
62 public MMMFAudioRecordControllerCustomCommandImplementor,
63 public MMMFAudioControllerCustomCommandImplementor
66 static CMMFController* NewL();
67 virtual ~CMMFTestUseOldCodecAudioController();
69 void DevSoundInitialised(TInt aError);
71 //implement CMMFController ecom plugin interface
72 virtual void AddDataSourceL(MDataSource& aDataSource);
73 virtual void AddDataSinkL(MDataSink& aDataSink);
74 virtual void RemoveDataSourceL(MDataSource& aDataSource);
75 virtual void RemoveDataSinkL(MDataSink& aDataSink);
77 virtual void ResetL();
78 virtual void PrimeL();
80 virtual void PauseL();
81 virtual void StopL() {} //not required
82 virtual void StopL(TMMFMessage& aMessage);
84 virtual TTimeIntervalMicroSeconds PositionL() const;
85 virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
86 virtual TTimeIntervalMicroSeconds DurationL() const;
87 virtual void CustomCommand(TMMFMessage& aMessage);
88 virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
89 virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
90 virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex);
92 //from MAsyncEventHandler
93 virtual TInt SendEventToClient(const TMMFEvent& aEvent);
95 //from MMMFAudioPlayDeviceCustomCommandImplementor
96 virtual void MapdSetVolumeL(TInt aVolume);
97 virtual void MapdGetMaxVolumeL(TInt& aMaxVolume);
98 virtual void MapdGetVolumeL(TInt& aVolume);
99 virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration);
100 virtual void MapdSetBalanceL(TInt aBalance);
101 virtual void MapdGetBalanceL(TInt& aBalance);
103 //from MMMFAudioRecordDeviceCustomCommandImplementor
104 virtual void MardSetGainL(TInt aGain);
105 virtual void MardGetMaxGainL(TInt& aMaxGain);
106 virtual void MardGetGainL(TInt& aGain);
107 virtual void MardSetBalanceL(TInt aBalance);
108 virtual void MardGetBalanceL(TInt& aBalance);
110 //from MMMFAudioPlayControllerCustomCommandImplementor
111 virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd);
112 virtual void MapcDeletePlaybackWindowL();
113 virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete);
115 //from MMMFAudioRecordControllerCustomCommandImplementor
116 virtual void MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime);
117 virtual void MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& aMaxDuration);
118 virtual void MarcSetMaxFileSizeL(TInt aFileSize);
119 virtual void MarcCropL(TBool aToEnd);
120 virtual void MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry);
121 virtual void MarcRemoveMetaDataEntryL(TInt aIndex);
122 virtual void MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry);
124 //from MMMFAudioControllerCustomCommandImplementor
125 virtual void MacSetSourceSampleRateL(TUint aSampleRate);
126 virtual void MacSetSourceNumChannelsL(TUint aNumChannels);
127 virtual void MacSetSourceFormatL(TUid aFormatUid);
128 virtual void MacSetSinkSampleRateL(TUint aSampleRate);
129 virtual void MacSetSinkNumChannelsL(TUint aNumChannels);
130 virtual void MacSetSinkFormatL(TUid aFormatUid);
131 virtual void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType);
132 virtual void MacSetSourceBitRateL(TUint aBitRate);
133 virtual void MacSetSourceDataTypeL(TFourCC aDataType);
134 virtual void MacSetSinkBitRateL(TUint aRate);
135 virtual void MacSetSinkDataTypeL(TFourCC aDataType);
136 virtual void MacGetSourceSampleRateL(TUint& aRate);
137 virtual void MacGetSourceBitRateL(TUint& aRate);
138 virtual void MacGetSourceNumChannelsL(TUint& aNumChannels);
139 virtual void MacGetSourceFormatL(TUid& aFormat);
140 virtual void MacGetSourceDataTypeL(TFourCC& aDataType);
141 virtual void MacGetSinkSampleRateL(TUint& aRate);
142 virtual void MacGetSinkBitRateL(TUint& aRate);
143 virtual void MacGetSinkNumChannelsL(TUint& aNumChannels);
144 virtual void MacGetSinkFormatL(TUid& aFormat);
145 virtual void MacGetSinkDataTypeL(TFourCC& aDataType);
146 virtual void MacGetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates);
147 virtual void MacGetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates);
148 virtual void MacGetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels);
149 virtual void MacGetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
150 virtual void MacGetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates);
151 virtual void MacGetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates);
152 virtual void MacGetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels);
153 virtual void MacGetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes);
158 TControllerState is an enumeration within the namespace CMMFAudioController
159 The enumeration provides a set of control states:
160 EStopped is the initial state the controller resides in after it has been loaded
161 EPrimed is the state the controller is in when it has been associated with datapaths but is not streaming data
162 EPlaying is the state the controller is in when it is streaming data
164 enum TControllerState
172 CMMFTestUseOldCodecAudioController();
177 void ConvertFromDevSoundCapsToSampleRatesL(const TMMFCapabilities& aDevSoundCaps,
178 RArray<TUint>& aSampleRates);
179 void ConvertFromDevSoundCapsToNumChannelsL(const TMMFCapabilities& aDevSoundCaps,
180 RArray<TUint>& aNumChannels);
181 void ConvertFromDevSoundCapsToDataTypesL(const TMMFCapabilities& aDevSoundCaps,
182 RArray<TFourCC>& aDataTypes);
183 void ConvertFromSampleRateToDevSoundCapsL(TUint aSampleRate, TMMFCapabilities& aDevSoundCaps);
184 void ConvertFromNumChannelsToDevSoundCapsL(TUint aNumChannels, TMMFCapabilities& aDevSoundCaps);
185 void ConvertFromDataTypeToDevSoundCapsL(TFourCC aDataType, TMMFCapabilities& aDevSoundCaps);
187 // state accessor functions
188 TBool SetState( TControllerState aState );
189 TControllerState State() const ;
190 TBool IsValidStateTransition( TControllerState aState ) const;
191 TBool Invariant() const;
192 TBool IsValidState( TControllerState aState ) const ;
193 TBool ResetPostCondition() const;
194 TBool SinkFormatRequired( MDataSink& aDataSink) const;
195 TBool SourceFormatRequired(MDataSource& aDataSource) const;
196 void CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const;
197 void CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const;
200 //This method is used to assist testing of the audio controller
201 virtual TBool IsUnderTest(){return EFalse;}
206 * This class is required to ensure that CMMFTestUseOldCodecAudioController::PrimeL() runs synchronously
207 * as in some configurations it needs to wait on DevSound initialisation. This class sits between the
208 * DevSound interface and the actual real DevSound client, propagating all the function calls to it.
209 * The only additional functionality it performs is to inform the CMMFTestUseOldCodecAudioController object
210 * when DevSound initialisation is complete.
213 class TDevSoundEventHandler : public MDevSoundObserver
216 TDevSoundEventHandler();
218 void SetInterceptedDevSoundObserver(MDevSoundObserver* aObserver);
219 void SetEventObserver(CMMFTestUseOldCodecAudioController* aObserver);
221 //from MDevSoundObserver
222 virtual void InitializeComplete(TInt aError);
223 virtual void ToneFinished(TInt aError);
224 virtual void BufferToBeFilled(CMMFBuffer* aBuffer);
225 virtual void PlayError(TInt aError);
226 virtual void BufferToBeEmptied(CMMFBuffer* aBuffer);
227 virtual void RecordError(TInt aError);
228 virtual void ConvertError(TInt aError);
229 virtual void DeviceMessage(TUid aMessageType, const TDesC8& aMsg);
232 MDevSoundObserver* iInterceptedDevSoundObserver; //Not owned
233 CMMFTestUseOldCodecAudioController* iEventObserver; //Not owned
237 MDataSource* iDataSource;
238 MDataSink* iDataSink;
239 CMMFDataPath* iDataPath;
240 CMMFFormatDecode* iSourceFormat;
241 CMMFFormatEncode* iSinkFormat;
243 TControllerState iState;
244 TMMFPrioritySettings iPrioritySettings;
245 TBool iSourceAndSinkAdded;
247 TBool iStoppingRecording;
249 CMMFMessageHolder* iStoppingMessage;
250 TDevSoundEventHandler iDevSoundEventHandler;
251 CActiveSchedulerWait* iWaitForAsyncService;