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