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