diff -r 000000000000 -r b8ed18f6c07b mmlibs/mmfw/src/Client/Audio/mmfclientaudioconverter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/src/Client/Audio/mmfclientaudioconverter.h Thu Oct 07 22:34:12 2010 +0100 @@ -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 +#include +#include +#include +#include +#include +#include +#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& 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& aSupportedBitRates); + TUint SourceBitRateL(); + + // Sample rate support + void SetSourceSampleRateL(TUint aSampleRate); + void SetDestinationSampleRateL(TUint aSampleRate); + TUint DestinationSampleRateL(); + void GetSupportedConversionSampleRatesL(RArray& 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& 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 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