mmlibs/mmfw/src/Client/Audio/mmfclientaudioconverter.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/src/Client/Audio/mmfclientaudioconverter.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,205 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __MMFCLIENTAUDIOCONVERTER_H
+#define __MMFCLIENTAUDIOCONVERTER_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <mdaaudiosampleeditor.h>
+#include <mmf/server/mmffile.h>
+#include <mmf/server/mmfdes.h>
+#include <mmf/server/mmfurl.h>
+#include <mmf/common/mmfcontroller.h>
+#include "mmfclientutility.h"
+
+/**
+Concrete implementation of the CMdaAudioConvertUtility API.
+@see CMdaAudioConvertUtility
+*/
+class CMMFMdaAudioConvertUtility;
+NONSHARABLE_CLASS( CMMFMdaAudioConvertUtility ): public CBase,
+								   				 public MMMFControllerEventMonitorObserver,
+								   				 public MMMFFindAndOpenControllerObserver
+	{
+friend class CMdaAudioConvertUtility;
+// for testing only
+friend class CTestStepUnitMMFAudClient;
+
+public:
+	~CMMFMdaAudioConvertUtility();
+
+	void OpenL(const TDesC& aPrimaryFile, const TDesC& aSecondaryFile);
+	// Open existing file and new/existing secondary
+	void OpenL(const TDesC& aPrimaryFile,
+			   TMdaClipLocation* aLocation,	// Normally file or descriptor
+			   TMdaClipFormat* aFormat,		// Data format
+			   TMdaPackage* aArg1 = NULL,	// Normally codec to use
+			   TMdaPackage* aArg2 = NULL);	// Normally audio settings
+
+	void OpenL(TMdaClipLocation* aPriLocation, 
+			   TMdaClipLocation* aSecLocation, 
+			   TMdaClipFormat* aPriFormat, 
+			   TMdaClipFormat* aSecFormat, 
+			   TMdaPackage* aPriArg1 = NULL, // Normally source codec to use
+			   TMdaPackage* aPriArg2 = NULL, // Normally source audio settings
+			   TMdaPackage* aSecArg1 = NULL, // Normally sink codec to use
+			   TMdaPackage* aSecArg2 = NULL);// Normally sink audio settings
+
+	// new controller based open
+	void OpenL(TMdaClipLocation* aPriLocation, 
+			   TMdaClipLocation* aSecLocation, 
+			   TUid aControllerUid, // the controller to use
+			   TUid aDestFormatUid,
+			   TFourCC aDestDataType);	
+	//from MMMFControllerEventMonitorObserver
+	void HandleEvent(const TMMFEvent& aEvent);
+
+	// from MMMFFindAndOpenControllerObserver 
+	virtual void MfaocComplete(
+		TInt& aError, 
+		RMMFController* aController, 
+		TUid aControllerUid, 
+		TMMFMessageDestination* aSourceHandle, 
+		TMMFMessageDestination* aSinkHandle);
+	
+	void UseSharedHeap();
+
+protected:
+	CMMFMdaAudioConvertUtility(CMdaAudioConvertUtility* aParent, MMdaObjectStateChangeObserver& aCallback);
+	void ConstructL(TInt aPriority, TInt aPref);
+private:
+
+	CMdaAudioClipUtility::TState State();
+	void Close();
+	void PlayL();		// N.B. ConvertL should be used in preference to PlayL
+	void RecordL();		// N.B. ConvertL should be used in preference to RecordL
+	void ConvertL();
+	void Stop();
+	void CropL(TBool aCropToEnd = ETrue);
+	void SetPosition(const TTimeIntervalMicroSeconds& aPosition);
+	const TTimeIntervalMicroSeconds& Position();
+	const TTimeIntervalMicroSeconds& RecordTimeAvailable();
+	const TTimeIntervalMicroSeconds& Duration();
+	void SetPlayWindow(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd);
+	void ClearPlayWindow();
+	void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
+	void SetMaxWriteLength(TInt aMaxWriteLength /*= KMdaClipLocationMaxWriteLengthNone*/);
+	void SetPriority(TInt aPriority, TInt aPref);  
+	void CropL(const TTimeIntervalMicroSeconds & aCropBegin, 
+			   const TTimeIntervalMicroSeconds & aCropEnd);
+
+	// Codec support
+	void GetSupportedDestinationDataTypesL(RArray<TFourCC>& aSupportedDestinationDataTypes);
+	void SetSourceDataTypeL(TFourCC aDataType)	;
+	void SetDestinationDataTypeL(TFourCC aCodec);
+	TFourCC DestinationDataTypeL();
+	TFourCC SourceDataTypeL();
+
+	// Bit rate support	
+	void SetDestinationBitRateL(TUint aBitRate);
+	TUint DestinationBitRateL();
+	void GetSupportedConversionBitRatesL(RArray<TUint>& aSupportedBitRates);
+	TUint SourceBitRateL();
+
+	// Sample rate support
+	void SetSourceSampleRateL(TUint aSampleRate);
+	void SetDestinationSampleRateL(TUint aSampleRate);
+	TUint DestinationSampleRateL();
+	void GetSupportedConversionSampleRatesL(RArray<TUint>& aSupportedSampleRates);
+	TUint SourceSampleRateL();
+	
+	// Format support
+	void SetSourceFormatL(TUid aRecordFormat);
+	void SetDestinationFormatL(TUid aFormatUid);
+	TUid DestinationFormatL();
+	TUid SourceFormatL();
+
+	// Number of channels
+	void SetSourceNumberOfChannelsL(TUint aNumberOfChannels);
+	void SetDestinationNumberOfChannelsL(TUint aNumberOfChannels);
+	TUint DestinationNumberOfChannelsL();
+	void GetSupportedConversionNumberOfChannelsL(RArray<TUint>& aSupportedNumChannels);
+	TUint SourceNumberOfChannelsL();
+	
+	const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
+	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom);
+	TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2);
+	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus);
+	void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus);
+
+	CMdaAudioConvertUtility* Parent() const;
+
+	void Reset();
+	TInt ControllerOpen();
+	void ConfigureSourceSinkL(TMdaClipLocation* aPriLocation, TMdaClipLocation* aSecLocation);
+
+	TInt SetThreadPriority(const TThreadPriority& aThreadPriority) const;
+private:
+	MMdaObjectStateChangeObserver& iCallback;
+	CMMFMdaObjectStateChangeObserverCallback* iAsyncCallback;
+
+	RMMFController iController;
+	CMMFControllerEventMonitor* iControllerEventMonitor;
+
+	// Source and sink handle info
+	TMMFMessageDestination iSourceHandle;
+	TMMFMessageDestination iSinkHandle;
+	// Custom commands
+	RMMFAudioControllerCustomCommands iAudioControllerCustomCommands;
+	RMMFAudioPlayControllerCustomCommands iAudioPlayControllerCustomCommands;
+	RMMFAudioRecordControllerCustomCommands iAudioRecordControllerCustomCommands;
+
+	TMMFPrioritySettings iPrioritySettings;
+
+	TTimeIntervalMicroSeconds iPosition;
+	TTimeIntervalMicroSeconds iPositionTemp;
+	TTimeIntervalMicroSeconds iDuration;
+	TTimeIntervalMicroSeconds iRecordTimeAvailable;
+
+	CMdaAudioClipUtility::TState iState;
+
+	// Convert window start and end times and whether it has been set
+	TTimeIntervalMicroSeconds iConvertStart;
+	TTimeIntervalMicroSeconds iConvertEnd;
+	TBool iConvertWindowSet;
+
+	// parent class for callback
+	CMdaAudioConvertUtility* iParent;
+	RArray<TUid> iMediaIds;
+
+	// keeping track of cropped clip duration
+	TBool iHasCropped;
+	TTimeIntervalMicroSeconds iCroppedDuration;
+	CMMFControllerImplementationInformation* iControllerImplementationInformation;
+	TUid iControllerUid;
+
+	// utility class to find and open a suitable controller asynchronously
+	CMMFFindAndOpenController* iFindAndOpenController;
+
+	TUid iSourceFormatUid;		// for SetSourceFormat()
+	TUid iSinkFormatUid;		// for SetSinkFormat()
+
+	TFourCC iSourceDataType;	// for SetSourceDataType()
+	TFourCC iSinkDataType;		// for SetSinkDataType()
+
+	TInt iSourceSampleRate;		// for SetSourceSampleRateL()
+	TInt iSinkSampleRate;		// for SetDestinationSampleRateL()
+
+	TInt iSourceChannels;		// for SetSourceNumberOfChannelsL()
+	TInt iSinkChannels;			// for SetDestinationNumberOfChannelsL()
+	};
+
+#endif