os/mm/devsound/sounddevbt/src/Plugin/HwDevice/Audio/Gsm610/BtGsm610.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 __BTGSM610_H__
sl@0
    17
#define __BTGSM610_H__
sl@0
    18
sl@0
    19
#include <mmfbtswcodecwrapper.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
const TUint KNumFramesInABuffer  = 50;
sl@0
    27
const TInt  KGsmFrameSize = 65;
sl@0
    28
const TUint	KGsmEncodedFrameSize = KNumFramesInABuffer * KGsmFrameSize ;   //50 * 65 encoded frames
sl@0
    29
const TUint	KPcmEncodedFrameSize = KNumFramesInABuffer * 320;  // 50 times 160*2
sl@0
    30
const TInt  KPcmDataForGsmFrame = 640;
sl@0
    31
const TUint	KPcmInputFrameSize   = KPcmEncodedFrameSize*2;	// cache 2 frames
sl@0
    32
sl@0
    33
/**
sl@0
    34
*
sl@0
    35
*class CMmfGsmToPcm16HwDevice 
sl@0
    36
*
sl@0
    37
*/
sl@0
    38
class CMmfGsm610ToPcm16HwDevice : public CMMFSwCodecWrapper
sl@0
    39
	{	
sl@0
    40
public:
sl@0
    41
	static  CMmfGsm610ToPcm16HwDevice* NewL();
sl@0
    42
	virtual CMMFSwCodec& Codec();
sl@0
    43
	~CMmfGsm610ToPcm16HwDevice(); 
sl@0
    44
private:
sl@0
    45
	void ConstructL();
sl@0
    46
	};
sl@0
    47
sl@0
    48
/**
sl@0
    49
*
sl@0
    50
* CMmfPcmHwDevicePcm16ToGsm610 
sl@0
    51
*
sl@0
    52
*/	  
sl@0
    53
class CMmfPcm16ToGsm610HwDevice : public CMMFSwCodecWrapper
sl@0
    54
	{	
sl@0
    55
public:
sl@0
    56
	static  CMmfPcm16ToGsm610HwDevice* NewL();
sl@0
    57
	virtual CMMFSwCodec& Codec();
sl@0
    58
	~CMmfPcm16ToGsm610HwDevice(); 
sl@0
    59
private:
sl@0
    60
	void ConstructL();
sl@0
    61
	};
sl@0
    62
sl@0
    63
/**
sl@0
    64
*
sl@0
    65
* class CMMFGsm610ToPcm16Codec coverts Gsm610 to PCM16
sl@0
    66
*  
sl@0
    67
*/
sl@0
    68
class CGSM610FR_Decoder;
sl@0
    69
sl@0
    70
class CMMFGsm610ToPcm16Codec : public CMMFSwCodec
sl@0
    71
	{
sl@0
    72
public:
sl@0
    73
	CMMFGsm610ToPcm16Codec();
sl@0
    74
	virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSrc, CMMFBuffer& aDest);
sl@0
    75
	virtual TUint SourceBufferSize() {return KGsmEncodedFrameSize;};
sl@0
    76
	virtual TUint SinkBufferSize() {return KPcmInputFrameSize;};
sl@0
    77
	static  CMMFGsm610ToPcm16Codec* NewL();
sl@0
    78
	void ConstructL();
sl@0
    79
	~CMMFGsm610ToPcm16Codec();
sl@0
    80
private:
sl@0
    81
	TBool CheckInputBuffers( CMMFDataBuffer& aSrc, CMMFDataBuffer& aDest );
sl@0
    82
	TInt  NumBuffersToProcess( const CMMFDataBuffer& aSrc );
sl@0
    83
	TBool ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& result );
sl@0
    84
	// do not provide an implmentation for these two methods
sl@0
    85
	const CMMFGsm610ToPcm16Codec& operator=( const CMMFGsm610ToPcm16Codec& );
sl@0
    86
	CMMFGsm610ToPcm16Codec( const CMMFGsm610ToPcm16Codec& );
sl@0
    87
private:
sl@0
    88
	CGSM610FR_Decoder* iGsmDecoder;
sl@0
    89
	};
sl@0
    90
sl@0
    91
/**
sl@0
    92
*
sl@0
    93
* class CMMFPcm16ToGsm610Codec coverts PCM16 to GSM610
sl@0
    94
*  
sl@0
    95
*/  
sl@0
    96
class CGSM610FR_Encoder;
sl@0
    97
class CMMFPcm16ToGsm610Codec : public CMMFSwCodec
sl@0
    98
	{
sl@0
    99
public:
sl@0
   100
	CMMFPcm16ToGsm610Codec();
sl@0
   101
	virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSrc, CMMFBuffer& aDest);
sl@0
   102
	virtual TUint SourceBufferSize() {return KPcmInputFrameSize;};
sl@0
   103
	virtual TUint SinkBufferSize() {return  KGsmEncodedFrameSize;};	
sl@0
   104
	static  CMMFPcm16ToGsm610Codec* NewL();
sl@0
   105
	~CMMFPcm16ToGsm610Codec();
sl@0
   106
	void ConstructL();
sl@0
   107
private:
sl@0
   108
    TBool CheckInputBuffers( CMMFDataBuffer& aSrc, CMMFDataBuffer& aDest );
sl@0
   109
	TInt NumBuffersToProcess( const CMMFDataBuffer& aSrc );
sl@0
   110
	inline TBool ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& result );
sl@0
   111
sl@0
   112
	// do not supply implementations
sl@0
   113
	const CMMFPcm16ToGsm610Codec& operator=( const CMMFPcm16ToGsm610Codec& );
sl@0
   114
	CMMFPcm16ToGsm610Codec( const CMMFPcm16ToGsm610Codec &);
sl@0
   115
private:
sl@0
   116
	CGSM610FR_Encoder* iGsmEncoder;
sl@0
   117
	};
sl@0
   118
sl@0
   119
/**
sl@0
   120
*
sl@0
   121
* class TMmfAudioAudioCodecPanics provides a name space for audio codec
sl@0
   122
* panics
sl@0
   123
*
sl@0
   124
**/
sl@0
   125
class TMmfGsmCodecPanicsNameSpace
sl@0
   126
	{
sl@0
   127
public:
sl@0
   128
	/*
sl@0
   129
	A list of panic codes for Codecs
sl@0
   130
	@internalTechnology
sl@0
   131
	EBadArgument indicates a bad argument
sl@0
   132
	EBadState indicates a state viaolation
sl@0
   133
	EBadInvariant indicates an invariant violation
sl@0
   134
	EPostConditionViolation indicates a post condition violation
sl@0
   135
		*/
sl@0
   136
	enum TMmfGsmCodecPanics
sl@0
   137
		{
sl@0
   138
		EBadArgument,
sl@0
   139
		EBadState,
sl@0
   140
		EBadInvariant,
sl@0
   141
		EBadReset,
sl@0
   142
		EPostConditionViolation
sl@0
   143
		};
sl@0
   144
public:
sl@0
   145
	inline static void Panic(const TMmfGsmCodecPanicsNameSpace::TMmfGsmCodecPanics aPanic);		
sl@0
   146
	};
sl@0
   147
sl@0
   148
/**
sl@0
   149
*
sl@0
   150
* Panic
sl@0
   151
* @param aPanic is the panic code for the codec
sl@0
   152
*
sl@0
   153
*/
sl@0
   154
inline void TMmfGsmCodecPanicsNameSpace::Panic(const TMmfGsmCodecPanicsNameSpace::TMmfGsmCodecPanics aPanic)
sl@0
   155
	{
sl@0
   156
	_LIT(KGsmCodecPanicCategory, "GsmCodec");
sl@0
   157
	User::Panic(KGsmCodecPanicCategory, aPanic);
sl@0
   158
	}
sl@0
   159
sl@0
   160
/**
sl@0
   161
*
sl@0
   162
* ProcessPostCondition
sl@0
   163
* @param aResult
sl@0
   164
* @return TBool Etrue if the post condition is satisfied
sl@0
   165
*
sl@0
   166
**/
sl@0
   167
inline TBool CMMFPcm16ToGsm610Codec::ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& aResult )
sl@0
   168
	{
sl@0
   169
     TBool status = ETrue;
sl@0
   170
	 if( (aResult.iSrcBytesProcessed / KPcmDataForGsmFrame ) != (aResult.iDstBytesAdded / KGsmFrameSize  ) )
sl@0
   171
		 {
sl@0
   172
		 status = EFalse;
sl@0
   173
		 }
sl@0
   174
	 return status;
sl@0
   175
	}
sl@0
   176
#endif  //__BTGSM610_H__