diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/mccstub/src/mmcccodecamrwb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/mccstub/src/mmcccodecamrwb.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,575 @@ +/* +* Copyright (c) 2002-2004 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: MCC AMR WB CodecInformation +* +*/ + + + + +// INCLUDE FILES +#include + +#include "mmcccodecamrwb.h" +#include "mccuids.hrh" +#include "mmccinterfacelogs.h" + + +// CONSTANTS +const TInt KUndefinedMode( -1 ); +const TInt KMaxModeSetValue( 9 ); + +const TInt KNotSet = -1; + +const TInt KNumValue2 = 2; + +// MODULE DATA STRUCTURES + +const TUint8 KAmrKAPayloadSize = 6; +const TUint8 KAmrKeepAlivePayload[KAmrKAPayloadSize] = + { + 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::CMccCodecAmrWb +// default constructor +// ----------------------------------------------------------------------------- +// +CMccCodecAmrWb::CMccCodecAmrWb() : CMccCodecAMR() + { + iBitrateMask = KMccAllowedAmrWbBitrateAll; + iMaxRed = KNotSet; + iDefaultBitrateMask = KMccAllowedAmrWbBitrateAll; + iDefaultBitrate = KAmrWbBitrate2385; + iAdditionalInfoMask = KMccAllowedAmrWbAdditionalInfo; + iMaxModeSetVal = KMaxModeSetValue; + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMccCodecAmrWb::ConstructL( ) + { + __INTERFACE( "CMccCodecAmrWb::ConstructL" ) + iSdpName.Copy( KAMRWbSdpName ); + iKeepAliveData.Copy( KAmrKeepAlivePayload ); + iFmtpAttr = HBufC8::NewL( 1 ); + TPtr8 ptr = iFmtpAttr->Des(); + ptr.Append( KNullDesC ); + + iFourCC = KMccFourCCIdAMRWB; + SetSamplingFreq( KAmrWbSamplingFreq ); + EnableVAD( EFalse ); + iHwFrameTime = KAMRDefaultHwFrameTime; // default 20ms + iFrameSize = KAmrWbDefaultFrameSize; + SetMaxPTime( KAMRDefaultMaxPTime ); // recommended "limit" 200ms + SetPTime( KAMRDefaultPTime ); // default 20ms + SetBitrate( KAmrWbBitrate2385 ); // max bitrate + SetPayloadType( KDefaultAmrWbPT ); + SetCodecMode( EBandwidthEfficient ); + iNumOfChannels = 1; + + iPayloadFormatEncoder = KImplUidAmrPayloadFormatEncode; + iPayloadFormatDecoder = KImplUidAmrPayloadFormatDecode; + + __INTERFACE( "CMccCodecAmrWb::ConstructL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::NewL +// Static constructor. +// ----------------------------------------------------------------------------- +// +CMccCodecAmrWb* CMccCodecAmrWb::NewL() + { + CMccCodecAmrWb* self = new (ELeave) CMccCodecAmrWb; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::~CMccCodecAmrWb +// Destructor +// ----------------------------------------------------------------------------- +// +CMccCodecAmrWb::~CMccCodecAmrWb() + { + __INTERFACE( "CMccCodecAmrWb::~CMccCodecAmrWb" ) + } + + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::GetBitrateModeSet +// Get the mode from the bitrate +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::GetBitrateModeSet( TUint aBitrate ) + { + __INTERFACE( "CMccCodecAmrWb::GetBitrateModeSet" ) + TInt mode( KUndefinedMode ); + + switch ( aBitrate ) + { + case KAmrWbBitrate660: + { + mode = KAMRMode0; + break; + } + case KAmrWbBitrate885: + { + mode = KAMRMode1; + break; + } + case KAmrWbBitrate1265: + { + mode = KAMRMode2; + break; + } + case KAmrWbBitrate1425: + { + mode = KAMRMode3; + break; + } + case KAmrWbBitrate1585: + { + mode = KAMRMode4; + break; + } + case KAmrWbBitrate1825: + { + mode = KAMRMode5; + break; + } + case KAmrWbBitrate1985: + { + mode = KAMRMode6; + break; + } + case KAmrWbBitrate2305: + { + mode = KAMRMode7; + break; + } + case KAmrWbBitrate2385: + { + mode = KAMRMode8; + break; + } + default: + { + break; + } + } + + __INTERFACE_INT1( "CMccCodecAmrWb::GetBitrateModeSet, exit with mode", mode ) + return mode; + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::SetBitrateModeSet +// Sets the bitrate used with AMR codec from the mode . +// ----------------------------------------------------------------------------- +// +void CMccCodecAmrWb::SetBitrateModeSet( TUint aModeSet ) + { + __INTERFACE( "CMccCodecAmrWb::SetBitrateModeSet" ) + switch ( aModeSet ) + { + case KAMRMode0: + { + SetBitrate( KAmrWbBitrate660 ); + break; + } + case KAMRMode1: + { + SetBitrate( KAmrWbBitrate885 ); + break; + } + case KAMRMode2: + { + SetBitrate( KAmrWbBitrate1265 ); + break; + } + case KAMRMode3: + { + SetBitrate( KAmrWbBitrate1425 ); + break; + } + case KAMRMode4: + { + SetBitrate( KAmrWbBitrate1585 ); + break; + } + case KAMRMode5: + { + SetBitrate( KAmrWbBitrate1825 ); + break; + } + case KAMRMode6: + { + SetBitrate( KAmrWbBitrate1985 ); + break; + } + case KAMRMode7: + { + SetBitrate( KAmrWbBitrate2305 ); + break; + } + case KAMRMode8: + { + SetBitrate( KAmrWbBitrate2385 ); + break; + } + default: + { + SetBitrate( KAmrWbBitrate660 ); + break; + } + } + __INTERFACE( "CMccCodecAmrWb::SetBitrateModeSet, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::GetBitrateMaskFromMode +// Get the bitrate mask from the mode +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::GetBitrateMaskFromMode( TUint aMode, TUint& aBitrateMask ) + { + __INTERFACE( "CMccCodecAmrWb::GetBitrateMaskFromMode" ) + switch ( aMode ) + { + case KAMRMode0: + { + aBitrateMask = KMccAllowedAmrWbBitrate660; + break; + } + case KAMRMode1: + { + aBitrateMask = KMccAllowedAmrWbBitrate885; + break; + } + case KAMRMode2: + { + aBitrateMask = KMccAllowedAmrWbBitrate1265; + break; + } + case KAMRMode3: + { + aBitrateMask = KMccAllowedAmrWbBitrate1425; + break; + } + case KAMRMode4: + { + aBitrateMask = KMccAllowedAmrWbBitrate1585; + break; + } + case KAMRMode5: + { + aBitrateMask = KMccAllowedAmrWbBitrate1825; + break; + } + case KAMRMode6: + { + aBitrateMask = KMccAllowedAmrWbBitrate1985; + break; + } + case KAMRMode7: + { + aBitrateMask = KMccAllowedAmrWbBitrate2305; + break; + } + case KAMRMode8: + { + aBitrateMask = KMccAllowedAmrWbBitrateAll; + break; + } + default: + { + __INTERFACE( "CMccCodecAmrWb::GetBitrateMaskFromMode, exit KErrNotFound" ) + return KErrNotFound; + } + } + + __INTERFACE( "CMccCodecAmrWb::GetBitrateMaskFromMode, exit" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::SetBitrate +// Sets the bitrate used with AMR codec. +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::SetBitrate( TUint aBitrate ) + { + TBool isValid( ETrue ); + + switch ( aBitrate ) + { + case KAmrWbBitrate660: + break; + case KAmrWbBitrate885: + break; + case KAmrWbBitrate1265: + break; + case KAmrWbBitrate1425: + break; + case KAmrWbBitrate1585: + break; + case KAmrWbBitrate1825: + break; + case KAmrWbBitrate1985: + break; + case KAmrWbBitrate2305: + break; + case KAmrWbBitrate2385: + break; + default: + isValid = EFalse; + break; + } + if ( isValid ) + { + iBitrate = aBitrate; + return KErrNone; + } + else + { + return KErrNotSupported; + } + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::SetBitrateFromBitrateMask +// Sets the bitrate used with AMR codec from the bitrateMask. +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::SetBitrateFromBitrateMask( TUint aBitrateMask ) + { + if ( aBitrateMask & KMccAllowedAmrWbModeChangePeriod2 ) + { + SetModeChangePeriod( KNumValue2 ); + } + + if ( aBitrateMask & KMccAllowedAmrWbModeChangeNeighbor1 ) + { + SetModeChangeNeighbor( ETrue ); + } + + if( aBitrateMask & KMccAllowedAmrWbBitrate2385 ) + { + SetBitrate( KAmrWbBitrate2385 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate2305 ) + { + SetBitrate( KAmrWbBitrate2305 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate1985 ) + { + SetBitrate( KAmrWbBitrate1985 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate1825 ) + { + SetBitrate( KAmrWbBitrate1825 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate1585 ) + { + SetBitrate( KAmrWbBitrate1585 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate1425 ) + { + SetBitrate( KAmrWbBitrate1425 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate1265 ) + { + SetBitrate( KAmrWbBitrate1265 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate885 ) + { + SetBitrate( KAmrWbBitrate885 ); + return KErrNone; + } + else if( aBitrateMask & KMccAllowedAmrWbBitrate660 ) + { + SetBitrate( KAmrWbBitrate660 ); + return KErrNone; + } + else + { + return KErrArgument; + } + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::SetSamplingFreq +// Sets the sampling frequency. +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::SetSamplingFreq( TUint32 aSamplingFreq ) + { + if ( KAmrWbSamplingFreq == aSamplingFreq ) + { + iSamplingFreq = aSamplingFreq; + return KErrNone; + } + else + { + return KErrNotSupported; + } + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::SetSdpName +// Sets the SDP name +// ----------------------------------------------------------------------------- +TInt CMccCodecAmrWb::SetSdpName( const TDesC8& aSdpName ) + { + if ( !aSdpName.CompareF( KAMRWbSdpName ) ) + { + iSdpName.Copy( aSdpName ); + } + else + { + return KErrNotSupported; + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::SetAllowedBitrates +// Set allowed bitrates +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::SetAllowedBitrates( TUint aBitrateMask ) + { + //Confirm that the bitrate mask is valid + //I.e. after all the valid bitrates are set to zero the value should be zero + if ( (aBitrateMask >> 16 ) > 0 ) + { + return KErrArgument; + } + else + { + /* + In the future the allowed bitrates will be fetched from the codec + I.e. the KMccAllowedAmrNbBitrateAll will be changed to the bitrates + supported by the codec + */ + SetBitrateMask( KMccAllowedAmrWbBitrateAll & aBitrateMask ); + SetBitrateMaskAdditionalInfo( aBitrateMask ); + + SetBitrateFromBitrateMask( iBitrateMask ); + } + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::GetAllowedBitratesArrayL +// Get allowed bitrates in an array +// ----------------------------------------------------------------------------- +// +TInt CMccCodecAmrWb::GetAllowedBitratesArrayL( RArray& aBitratesArray ) + { + if( iBitrateMask & KMccAllowedAmrWbBitrate660 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate660 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate885 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate885 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate1265 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1265 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate1425 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1425 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate1585 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1585 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate1825 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1825 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate1985 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1985 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate2305 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate2305 ) ); + } + if( iBitrateMask & KMccAllowedAmrWbBitrate2385 ) + { + User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate2385 ) ); + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::CloneDefaultsL +// Make a default setting clone from this AMR codec +// ----------------------------------------------------------------------------- +// +CMccCodecInformation* CMccCodecAmrWb::CloneDefaultsL() + { + __INTERFACE( "CMccCodecAmrWb::CloneDefaultsL" ) + return CMccCodecAmrWb::NewL(); + } + +// ----------------------------------------------------------------------------- +// CMccCodecAmrWb::CloneDetailedL +// Make a detailed clone from this AMR codec +// ----------------------------------------------------------------------------- +// +CMccCodecInformation* CMccCodecAmrWb::CloneDetailedL() + { + CMccCodecAmrWb* newCodec = CMccCodecAmrWb::NewL(); + CleanupStack::PushL( newCodec ); + newCodec->SetBitrate( this->Bitrate() ); + newCodec->SetCodecMode( this->CodecMode() ); + newCodec->SetMaxPTime( this->MaxPTime() ); + newCodec->SetPayloadType( this->PayloadType() ); + newCodec->SetPTime( this->PTime() ); + newCodec->SetSamplingFreq( this->SamplingFreq() ); + newCodec->SetSdpName( this->SdpName() ); + newCodec->SetFmtpAttrL( this->GetFmtpL(), EFalse ); + CleanupStack::Pop( newCodec ); + return newCodec; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File