mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/UseOldCodecAudioController/TestUseOldCodecAudioController.h
changeset 0 40261b775718
equal deleted inserted replaced
-1:000000000000 0:40261b775718
       
     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".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef __TESTUSEOLDCODECAUDIOCONTROLLER_H__
       
    17 #define __TESTUSEOLDCODECAUDIOCONTROLLER_H__
       
    18 
       
    19 // Standard EPOC32 includes required by this header file
       
    20 
       
    21 #include <e32base.h>
       
    22 #include <e32std.h>
       
    23 #include <ecom/implementationproxy.h>
       
    24 
       
    25 // Public Media Server includes
       
    26 #include <mmf/common/mmfcontroller.h>
       
    27 #include <mmf/server/mmfdatasink.h>
       
    28 #include <mmf/server/mmfdatasource.h>
       
    29 
       
    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>
       
    35 
       
    36 
       
    37 const TInt KOneSecondInMicroSeconds(1000000);
       
    38 
       
    39 
       
    40 class CMMFMessageHolder : public CBase
       
    41 	{
       
    42 public:
       
    43 	static CMMFMessageHolder* NewL(TMMFMessage& aMessage)
       
    44 		{return new(ELeave) CMMFMessageHolder(aMessage);}
       
    45 	void Complete(TInt a) {iMessage.Complete(a);}
       
    46 private:
       
    47 	CMMFMessageHolder(TMMFMessage& aMessage): CBase(), iMessage(aMessage) {}
       
    48 	TMMFMessage iMessage;
       
    49 	};
       
    50 
       
    51 /**
       
    52 *
       
    53 * The public API for clients of the MMFAudioController
       
    54 *            
       
    55 */
       
    56 
       
    57 class CMMFTestUseOldCodecAudioController : public CMMFController, 
       
    58 							public MAsyncEventHandler,
       
    59 							public MMMFAudioPlayDeviceCustomCommandImplementor,
       
    60 							public MMMFAudioRecordDeviceCustomCommandImplementor,
       
    61 							public MMMFAudioPlayControllerCustomCommandImplementor,
       
    62 							public MMMFAudioRecordControllerCustomCommandImplementor,
       
    63 							public MMMFAudioControllerCustomCommandImplementor
       
    64 	{
       
    65 public:
       
    66 	static CMMFController* NewL();
       
    67 	virtual ~CMMFTestUseOldCodecAudioController();
       
    68 
       
    69 	void DevSoundInitialised(TInt aError);
       
    70 	
       
    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);
       
    76 
       
    77 	virtual void ResetL();
       
    78 	virtual void PrimeL();
       
    79 	virtual void PlayL();
       
    80 	virtual void PauseL();
       
    81 	virtual void StopL() {} //not required
       
    82 	virtual void StopL(TMMFMessage& aMessage);
       
    83 
       
    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);
       
    91 	
       
    92 	//from MAsyncEventHandler
       
    93 	virtual TInt SendEventToClient(const TMMFEvent& aEvent);
       
    94 
       
    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);
       
   102 
       
   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);
       
   109 
       
   110 	//from MMMFAudioPlayControllerCustomCommandImplementor
       
   111 	virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd);
       
   112 	virtual void MapcDeletePlaybackWindowL();
       
   113 	virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete);
       
   114 
       
   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);
       
   123 
       
   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);
       
   154 
       
   155 public:
       
   156 
       
   157 /**
       
   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
       
   163 */
       
   164 	enum TControllerState
       
   165 		{
       
   166 		EStopped,
       
   167 		EPrimed,
       
   168 		EPlaying
       
   169 		};
       
   170 
       
   171 protected:
       
   172 	CMMFTestUseOldCodecAudioController();
       
   173 protected:
       
   174 	void ConstructL();
       
   175 	void NegotiateL();
       
   176 
       
   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);
       
   186 
       
   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;
       
   198 
       
   199 
       
   200 	//This method is used to assist testing of the audio controller
       
   201 	virtual TBool IsUnderTest(){return EFalse;}
       
   202 
       
   203 private:
       
   204 	/**
       
   205 	* 
       
   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.
       
   211 	* 
       
   212 	*/
       
   213 	class TDevSoundEventHandler : public MDevSoundObserver
       
   214 		{
       
   215 	public:
       
   216 		TDevSoundEventHandler();
       
   217 		
       
   218 		void SetInterceptedDevSoundObserver(MDevSoundObserver* aObserver);
       
   219 		void SetEventObserver(CMMFTestUseOldCodecAudioController* aObserver);
       
   220 		
       
   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);
       
   230 		
       
   231 	private:
       
   232 		MDevSoundObserver* iInterceptedDevSoundObserver;	//Not owned
       
   233 		CMMFTestUseOldCodecAudioController* iEventObserver; //Not owned
       
   234 		};
       
   235 	
       
   236 private:
       
   237 	MDataSource*             iDataSource;
       
   238 	MDataSink*               iDataSink;
       
   239 	CMMFDataPath*            iDataPath;
       
   240 	CMMFFormatDecode*        iSourceFormat;
       
   241 	CMMFFormatEncode*        iSinkFormat;
       
   242 	TMediaId                 iMediaId;
       
   243 	TControllerState         iState;
       
   244 	TMMFPrioritySettings     iPrioritySettings;
       
   245 	TBool                    iSourceAndSinkAdded;
       
   246 
       
   247 	TBool                    iStoppingRecording;
       
   248 
       
   249 	CMMFMessageHolder*       iStoppingMessage;
       
   250 	TDevSoundEventHandler	 iDevSoundEventHandler;
       
   251 	CActiveSchedulerWait*	 iWaitForAsyncService;
       
   252 	};
       
   253 
       
   254 
       
   255 #endif