multimediacommsengine/tsrc/mccstub/src/mmcccodecamrwb.cpp
changeset 0 1bce908db942
--- /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 <delimitedpathsegment8.h>
+
+#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<TUint>& 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