os/mm/mmlibs/mmfw/inc/mmf/common/mmfhelper.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2002-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 // include\mmf\common\mmfutilities.h
    15 // 
    16 //
    17 
    18 #ifndef __MMF_COMMON_HELPER_H__
    19 #define __MMF_COMMON_HELPER_H__
    20 
    21 #include <e32base.h>
    22 #include <mmf/server/mmfdatabuffer.h>
    23 #include <mmf/common/mmffourcc.h>
    24 
    25 
    26 /**
    27 @internalAll
    28 
    29 Base utility class to change the sample rate of audio data in a buffer
    30 */
    31 class CMMFChannelAndSampleRateConverter : public CBase
    32 	{
    33 public:
    34 	/**
    35 	Reads the audio data from the source buffer,
    36 	converts the number of channels and the sample rate
    37 	and copies the result to the destination buffer
    38 
    39 	@param  aSrcBuffer
    40 	        A pointer to a source buffer containing the audio data to convert.
    41 	@param  aDstBuffer
    42 	        A pointer to a destination buffer.
    43 
    44 	@return The length of the destination buffer.
    45 	*/
    46 	virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer) =0;
    47 	virtual void Reset() {};
    48 
    49 	/*
    50 	Indicates what buffer size is required to hold the converted data.
    51 	*/
    52 	virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize) {return aSrcBufferSize;}
    53 
    54 	void SetRates(TInt aSrcRate,TInt aSrcChannels,TInt aDstRate,TInt aDstChannels);
    55 public:
    56 	/*
    57 	The sample rate of the data in the source buffer
    58 	*/
    59 	TInt iFromRate;
    60 	/*
    61 	The sample rate of the data in the destination buffer
    62 	*/
    63 	TInt iToRate;
    64 	/*
    65 	The number of channels of data in the source buffer
    66 	*/
    67 	TInt iFromChannels;
    68 	/*
    69 	The number of channels of data in the destination buffer
    70 	*/
    71 	TInt iToChannels;
    72 protected:
    73 	TReal iRatio;
    74 	TInt iFraction;
    75 	TInt iIndex;
    76 	};
    77 
    78 /**
    79 @internalAll
    80 */
    81 class CMMFStereoToMonoRateConverter : public CMMFChannelAndSampleRateConverter
    82 	{
    83 	public:
    84 		virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer);
    85 		virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize);
    86 
    87 	};
    88 
    89 /**
    90 @internalAll
    91 */
    92 class CMMFStereoToMonoConverter : public CMMFChannelAndSampleRateConverter
    93 	{
    94 	public:
    95 		virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer);
    96 		virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize);
    97 	};
    98 
    99 /**
   100 @internalAll
   101 */
   102 class CMMFStereoToStereoRateConverter : public CMMFChannelAndSampleRateConverter
   103 	{
   104 	public:
   105 		virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer);
   106 	};
   107 
   108 /**
   109 @internalAll
   110 */
   111 class CMMFMonoToMonoRateConverter : public CMMFChannelAndSampleRateConverter
   112 	{
   113 	public:
   114 		virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer);
   115 	};
   116 
   117 /**
   118 @internalAll
   119 */
   120 class CMMFMonoToStereoConverter : public CMMFChannelAndSampleRateConverter
   121 	{
   122 	public:
   123 		virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer);
   124 		virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize);
   125 	};
   126 
   127 /**
   128 @internalAll
   129 */
   130 class CMMFMonoToStereoRateConverter : public CMMFChannelAndSampleRateConverter
   131 	{
   132 	public:
   133 		virtual TInt Convert(const CMMFDataBuffer& aSrcBuffer, CMMFDataBuffer& aDstBuffer);
   134 		virtual TUint MaxConvertBufferSize(TUint aSrcBufferSize);
   135 	};
   136 
   137 /**
   138 @internalAll
   139 
   140 Factory class to create the appropriate CMMFChannelAndSampleRateConverter-derived
   141 class depending on the supplied number of channels and bit rate
   142 */
   143 class CMMFChannelAndSampleRateConverterFactory : public CBase
   144 	{
   145 
   146 public:
   147 	IMPORT_C CMMFChannelAndSampleRateConverter* CreateConverterL(TInt aFromRate,TInt aFromChannels,
   148 												 TInt aToRate,TInt aToChannels);
   149 	IMPORT_C CMMFChannelAndSampleRateConverter* CreateConverterL();
   150 	CMMFChannelAndSampleRateConverter* Converter() {return iConverter;}
   151 	IMPORT_C ~CMMFChannelAndSampleRateConverterFactory();
   152 	TInt Rate() {return iToRate;}
   153 	TInt Channels() {return iToChannels;}
   154 public:
   155 	/**
   156 	The sample rate of the data in the source buffer
   157 	*/
   158 	TInt iFromRate;
   159 	/**
   160 	The sample rate of the data in the destination buffer
   161 	*/
   162 	TInt iToRate;
   163 	/**
   164 	The number of channels of data in the source buffer
   165 	*/
   166 	TInt iFromChannels;
   167 	/**
   168 	The number of channels of data in the destination buffer
   169 	*/
   170 	TInt iToChannels;
   171 private:
   172 	CMMFChannelAndSampleRateConverter* iConverter;
   173 	};
   174 
   175 #endif //__MMF_COMMON_HELPER_H__
   176