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