sl@0: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // include\mmf\common\mmfutilities.h sl@0: // sl@0: // sl@0: sl@0: #ifndef __MMF_COMMON_HELPER_H__ sl@0: #define __MMF_COMMON_HELPER_H__ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: sl@0: /** sl@0: @internalAll sl@0: sl@0: Base utility class to change the sample rate of audio data in a buffer sl@0: */ sl@0: class CMMFChannelAndSampleRateConverter : public CBase sl@0: { sl@0: public: sl@0: /** sl@0: Reads the audio data from the source buffer, sl@0: converts the number of channels and the sample rate sl@0: and copies the result to the destination buffer sl@0: sl@0: @param aSrcBuffer sl@0: A pointer to a source buffer containing the audio data to convert. sl@0: @param aDstBuffer sl@0: A pointer to a destination buffer. sl@0: sl@0: @return The length of the destination buffer. sl@0: */ sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer) =0; sl@0: virtual void Reset() {}; sl@0: sl@0: /* sl@0: Indicates what buffer size is required to hold the converted data. sl@0: */ sl@0: virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize) {return aSrcBufferSize;} sl@0: sl@0: void SetRates(TInt aSrcRate,TInt aSrcChannels,TInt aDstRate,TInt aDstChannels); sl@0: public: sl@0: /* sl@0: The sample rate of the data in the source buffer sl@0: */ sl@0: TInt iFromRate; sl@0: /* sl@0: The sample rate of the data in the destination buffer sl@0: */ sl@0: TInt iToRate; sl@0: /* sl@0: The number of channels of data in the source buffer sl@0: */ sl@0: TInt iFromChannels; sl@0: /* sl@0: The number of channels of data in the destination buffer sl@0: */ sl@0: TInt iToChannels; sl@0: protected: sl@0: TReal iRatio; sl@0: TInt iFraction; sl@0: TInt iIndex; sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: */ sl@0: class CMMFStereoToMonoRateConverter : public CMMFChannelAndSampleRateConverter sl@0: { sl@0: public: sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer); sl@0: virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize); sl@0: sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: */ sl@0: class CMMFStereoToMonoConverter : public CMMFChannelAndSampleRateConverter sl@0: { sl@0: public: sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer); sl@0: virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize); sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: */ sl@0: class CMMFStereoToStereoRateConverter : public CMMFChannelAndSampleRateConverter sl@0: { sl@0: public: sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer); sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: */ sl@0: class CMMFMonoToMonoRateConverter : public CMMFChannelAndSampleRateConverter sl@0: { sl@0: public: sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer); sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: */ sl@0: class CMMFMonoToStereoConverter : public CMMFChannelAndSampleRateConverter sl@0: { sl@0: public: sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer); sl@0: virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize); sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: */ sl@0: class CMMFMonoToStereoRateConverter : public CMMFChannelAndSampleRateConverter sl@0: { sl@0: public: sl@0: virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer); sl@0: virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize); sl@0: }; sl@0: sl@0: /** sl@0: @internalAll sl@0: sl@0: Factory class to create the appropriate CMMFChannelAndSampleRateConverter-derived sl@0: class depending on the supplied number of channels and bit rate sl@0: */ sl@0: class CMMFChannelAndSampleRateConverterFactory : public CBase sl@0: { sl@0: sl@0: public: sl@0: IMPORT_C CMMFChannelAndSampleRateConverter* CreateConverterL(TInt aFromRate,TInt aFromChannels, sl@0: TInt aToRate,TInt aToChannels); sl@0: IMPORT_C CMMFChannelAndSampleRateConverter* CreateConverterL(); sl@0: CMMFChannelAndSampleRateConverter* Converter() {return iConverter;} sl@0: IMPORT_C ~CMMFChannelAndSampleRateConverterFactory(); sl@0: TInt Rate() {return iToRate;} sl@0: TInt Channels() {return iToChannels;} sl@0: public: sl@0: /** sl@0: The sample rate of the data in the source buffer sl@0: */ sl@0: TInt iFromRate; sl@0: /** sl@0: The sample rate of the data in the destination buffer sl@0: */ sl@0: TInt iToRate; sl@0: /** sl@0: The number of channels of data in the source buffer sl@0: */ sl@0: TInt iFromChannels; sl@0: /** sl@0: The number of channels of data in the destination buffer sl@0: */ sl@0: TInt iToChannels; sl@0: private: sl@0: CMMFChannelAndSampleRateConverter* iConverter; sl@0: }; sl@0: sl@0: #endif //__MMF_COMMON_HELPER_H__ sl@0: