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".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
19 #include <mmf/server/mmfswcodecwrapper.h>
21 // Standard EPOC32 includes required by this header file
23 #include <mmf/server/mmfdatabuffer.h>
28 const TUint KNumFramesInABuffer = 50;
30 const TUint KNumFramesInABuffer = 6;
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
40 *class CMmfGsmToPcm16HwDevice
43 class CMmfGsm610ToPcm16HwDevice : public CMMFSwCodecWrapper
46 static CMmfGsm610ToPcm16HwDevice* NewL();
47 virtual CMMFSwCodec& Codec();
48 ~CMmfGsm610ToPcm16HwDevice();
55 * CMmfPcmHwDevicePcm16ToGsm610
58 class CMmfPcm16ToGsm610HwDevice : public CMMFSwCodecWrapper
61 static CMmfPcm16ToGsm610HwDevice* NewL();
62 virtual CMMFSwCodec& Codec();
63 ~CMmfPcm16ToGsm610HwDevice();
70 * class CMMFGsm610ToPcm16Codec coverts Gsm610 to PCM16
73 class CGSM610FR_Decoder;
75 class CMMFGsm610ToPcm16Codec : public CMMFSwCodec
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();
84 ~CMMFGsm610ToPcm16Codec();
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& );
93 CGSM610FR_Decoder* iGsmDecoder;
98 * class CMMFPcm16ToGsm610Codec coverts PCM16 to GSM610
101 class CGSM610FR_Encoder;
102 class CMMFPcm16ToGsm610Codec : public CMMFSwCodec
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();
113 TBool CheckInputBuffers( CMMFDataBuffer& aSrc, CMMFDataBuffer& aDest );
114 TInt NumBuffersToProcess( const CMMFDataBuffer& aSrc );
115 inline TBool ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& result );
117 // do not supply implementations
118 const CMMFPcm16ToGsm610Codec& operator=( const CMMFPcm16ToGsm610Codec& );
119 CMMFPcm16ToGsm610Codec( const CMMFPcm16ToGsm610Codec &);
121 CGSM610FR_Encoder* iGsmEncoder;
126 * class TMmfAudioAudioCodecPanics provides a name space for audio codec
130 class TMmfGsmCodecPanicsNameSpace
134 A list of panic codes for Codecs
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
141 enum TMmfGsmCodecPanics
147 EPostConditionViolation
150 inline static void Panic(const TMmfGsmCodecPanicsNameSpace::TMmfGsmCodecPanics aPanic);
156 * @argument aPanic is the panic code for the codec
159 inline void TMmfGsmCodecPanicsNameSpace::Panic(const TMmfGsmCodecPanicsNameSpace::TMmfGsmCodecPanics aPanic)
161 _LIT(KGsmCodecPanicCategory, "GsmCodec");
162 User::Panic(KGsmCodecPanicCategory, aPanic);
167 * ProcessPostCondition
169 * @result TBool Etrue if the post condition is satisfied
172 inline TBool CMMFPcm16ToGsm610Codec::ProcessPostCondition( const CMMFSwCodec::TCodecProcessResult& aResult )
174 TBool status = ETrue;
175 if( (aResult.iSrcBytesProcessed / KPcmDataForGsmFrame ) != (aResult.iDstBytesAdded / KGsmFrameSize ) )
181 #endif //__GSM610_H__