--- /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