devsound/devsoundrefplugin/src/plugin/audio/Gsm610/GSM610.H
author hgs
Wed, 13 Oct 2010 12:08:48 +0100
changeset 3 28bdc4aca325
parent 0 79dd3e2336a0
permissions -rw-r--r--
2010wk42_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
#ifndef __GSM610_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#define __GSM610_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include <mmf/server/mmfswcodecwrapper.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
// Standard EPOC32 includes required by this header file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include <e32base.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
#include <mmf/server/mmfdatabuffer.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include <e32std.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
#ifdef EABI  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
const TUint KNumFramesInABuffer  = 50;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
#else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
const TUint KNumFramesInABuffer  = 6;	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
#endif	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
const TInt  KGsmFrameSize = 65;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
const TUint	KGsmEncodedFrameSize = KNumFramesInABuffer * KGsmFrameSize ;   //50 * 65 encoded frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
const TUint	KPcmEncodedFrameSize = KNumFramesInABuffer * 320;  // 50 times 160*2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
const TInt  KPcmDataForGsmFrame = 640;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
const TUint	KPcmInputFrameSize   = KPcmEncodedFrameSize*2;	// cache 2 frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
*class CMmfGsmToPcm16HwDevice 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
class CMmfGsm610ToPcm16HwDevice : public CMMFSwCodecWrapper
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
	{	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
	static  CMmfGsm610ToPcm16HwDevice* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
	virtual CMMFSwCodec& Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
	~CMmfGsm610ToPcm16HwDevice(); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
* CMmfPcmHwDevicePcm16ToGsm610 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
*/	  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
class CMmfPcm16ToGsm610HwDevice : public CMMFSwCodecWrapper
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
	{	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
	static  CMmfPcm16ToGsm610HwDevice* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
	virtual CMMFSwCodec& Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
	~CMmfPcm16ToGsm610HwDevice(); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
* class CMMFGsm610ToPcm16Codec coverts Gsm610 to PCM16
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
*  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
class MGSM610FR_Decoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
class CMMFGsm610ToPcm16Codec : public CMMFSwCodec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	CMMFGsm610ToPcm16Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
	virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSrc, CMMFBuffer& aDest);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
	virtual TUint SourceBufferSize() {return KGsmEncodedFrameSize;};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	virtual TUint SinkBufferSize() {return KPcmInputFrameSize;};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
	static  CMMFGsm610ToPcm16Codec* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
	~CMMFGsm610ToPcm16Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	TBool CheckInputBuffers( CMMFDataBuffer& aSrc, CMMFDataBuffer& aDest );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	TInt  NumBuffersToProcess( const CMMFDataBuffer& aSrc );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	TBool ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& result );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	// do not provide an implmentation for these two methods
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
	const CMMFGsm610ToPcm16Codec& operator=( const CMMFGsm610ToPcm16Codec& );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
	CMMFGsm610ToPcm16Codec( const CMMFGsm610ToPcm16Codec& );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	MGSM610FR_Decoder* iGsmDecoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
* class CMMFPcm16ToGsm610Codec coverts PCM16 to GSM610
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
*  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
*/  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
class MGSM610FR_Encoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
class CMMFPcm16ToGsm610Codec : public CMMFSwCodec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	CMMFPcm16ToGsm610Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSrc, CMMFBuffer& aDest);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	virtual TUint SourceBufferSize() {return KPcmInputFrameSize;};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	virtual TUint SinkBufferSize() {return  KGsmEncodedFrameSize;};	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	static  CMMFPcm16ToGsm610Codec* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
	~CMMFPcm16ToGsm610Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
    TBool CheckInputBuffers( CMMFDataBuffer& aSrc, CMMFDataBuffer& aDest );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
	TInt NumBuffersToProcess( const CMMFDataBuffer& aSrc );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
	inline TBool ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& result );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
	// do not supply implementations
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
	const CMMFPcm16ToGsm610Codec& operator=( const CMMFPcm16ToGsm610Codec& );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
	CMMFPcm16ToGsm610Codec( const CMMFPcm16ToGsm610Codec &);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
	MGSM610FR_Encoder* iGsmEncoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
  };
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
* class TMmfAudioAudioCodecPanics provides a name space for audio codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
* panics
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
class TMmfGsmCodecPanicsNameSpace
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
	/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
	A list of panic codes for Codecs
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
	@internalTechnology
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
	EBadArgument indicates a bad argument
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	EBadState indicates a state viaolation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
	EBadInvariant indicates an invariant violation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
	EPostConditionViolation indicates a post condition violation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
		*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	enum TMmfGsmCodecPanics
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
		EBadArgument,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
		EBadState,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
		EBadInvariant,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
		EBadReset,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
		EPostConditionViolation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
	inline static void Panic(const TMmfGsmCodecPanicsNameSpace::TMmfGsmCodecPanics aPanic);		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
* Panic
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
* @argument aPanic is the panic code for the codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
inline void TMmfGsmCodecPanicsNameSpace::Panic(const TMmfGsmCodecPanicsNameSpace::TMmfGsmCodecPanics aPanic)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
	_LIT(KGsmCodecPanicCategory, "GsmCodec");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
	User::Panic(KGsmCodecPanicCategory, aPanic);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
* ProcessPostCondition
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
* @param aResult
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
* @result TBool Etrue if the post condition is satisfied
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
inline TBool CMMFPcm16ToGsm610Codec::ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& aResult )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
     TBool status = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
	 if( (aResult.iSrcBytesProcessed / KPcmDataForGsmFrame ) != (aResult.iDstBytesAdded / KGsmFrameSize  ) )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
		 status = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
	 return status;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
#endif  //__GSM610_H__