--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccamrpayloadformat/src/AmrPayloadDecoderOA.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: PayloadFormat plugin capable to read RTP payload containing
+* Amr audio.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "amrpayloaddecoderoa.h"
+#include "amrcommonutil.h"
+
+// ---------------------------------------------------------------------------
+// CAmrPayloadDecoderOA::CAmrPayloadDecoderOA
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CAmrPayloadDecoderOA::CAmrPayloadDecoderOA( TBool aIsNb ) : CAmrPayloadDecoder( aIsNb )
+ {
+ DP_AMR_DECODE( "CAmrPayloadDecoderOA::CAmrPayloadDecoderOA" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAmrPayloadDecoderOA::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CAmrPayloadDecoderOA::ConstructL( )
+ {
+ DP_AMR_DECODE( "CAmrPayloadDecoderOA::ConstructL" );
+
+ // Allocate memory for iHeaderDecoder and iTocEntryDecoder and
+ // set them to NULL to avoid codescanner errors
+ delete iHeaderDecoder;
+ iHeaderDecoder = NULL;
+ delete iTocEntryDecoder;
+ iTocEntryDecoder = NULL;
+
+ iHeaderDecoder = CAmrPayloadHeaderOA::NewL();
+ iTocEntryDecoder = CAmrTocEntryOA::NewL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAmrPayloadDecoderOA::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CAmrPayloadDecoderOA* CAmrPayloadDecoderOA::NewL( TBool aIsNb )
+ {
+ DP_AMR_DECODE( "CAmrPayloadDecoderOA::NewL" );
+
+ CAmrPayloadDecoderOA* self = new( ELeave ) CAmrPayloadDecoderOA( aIsNb );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAmrPayloadDecoderOA::~CAmrPayloadDecoderOA
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAmrPayloadDecoderOA::~CAmrPayloadDecoderOA()
+ {
+ DP_AMR_DECODE( "CAmrPayloadDecoderOA::~CAmrPayloadDecoderOA" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAmrPayloadDecoderOA::DecodePayload
+// Decode payload data received in the payload buffer.
+// ---------------------------------------------------------------------------
+//
+TInt CAmrPayloadDecoderOA::DecodePayload( TUint32& aTimeStamp,
+ TUint32 aTimeStampInc )
+ {
+ DP_AMR_DECODE( "CAmrPayloadDecoderOA::DecodePayloadL" );
+
+ iTimeStamp = aTimeStamp;
+ iTimeStampInc = aTimeStampInc;
+ CAmrPayloadDecoder::Decode( iPayload, iPayloadSize );
+ aTimeStamp = iTimeStamp;
+ iFrameIndex = 0;
+ return iDecodedFrames;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAmrPayloadDecoderOA::CalculateFramePosition
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+void CAmrPayloadDecoderOA::CalculateFramePosition( const TUint8* aBuffer,
+ TInt aFrameCount )
+ {
+ DP_AMR_DECODE( "CAmrPayloadDecoderOA::CalculateFramePosition" );
+
+ TUint bitCount;
+
+ // Number of bytes for CMR and TOC entries
+ TUint frameByteIndex = ( 1 + TUint( aFrameCount ) );
+ if ( aFrameCount > KMaxFrameCountPerPacket )
+ {
+ DP_AMR_DECODE3("CAmrPayloadDecoderOA::CalculateFramePosition, aFrameCount: %d > KMaxFrameCountPerPacket: %d", \
+ aFrameCount, KMaxFrameCountPerPacket);
+ }
+ for ( TInt i = 0; i < aFrameCount; i++ )
+ {
+
+ if ( EAmrFrameNoData == iFrames[i].iFrameType )
+ {
+ iFrames[i].iBitIndex = 0;
+ iFrames[i].iFrameData = NULL;
+ }
+ else
+ {
+ // Set frame byte and bit positions
+ iFrames[i].iBitIndex = 0;
+ iFrames[i].iFrameData = const_cast<TUint8*>( aBuffer ) + frameByteIndex;
+ }
+
+ bitCount = TUint( SpeechBitCount( iFrames[i].iFrameType ) );
+ frameByteIndex += bitCount >> KNumValue3;
+ if ( bitCount & KBitIndex7 )
+ {
+ frameByteIndex++;
+ }
+ }
+ }
+
+
+
+
+