multimediacommsengine/tsrc/mccstub/src/mmcccodecamrwb.cpp
changeset 0 1bce908db942
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    MCC AMR WB CodecInformation
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 // INCLUDE FILES
       
    22 #include <delimitedpathsegment8.h>
       
    23 
       
    24 #include "mmcccodecamrwb.h"
       
    25 #include "mccuids.hrh"
       
    26 #include "mmccinterfacelogs.h"
       
    27 
       
    28 
       
    29 // CONSTANTS
       
    30 const TInt KUndefinedMode( -1 );
       
    31 const TInt KMaxModeSetValue( 9 );
       
    32 
       
    33 const TInt KNotSet = -1;
       
    34 
       
    35 const TInt KNumValue2 = 2;
       
    36 
       
    37 // MODULE DATA STRUCTURES
       
    38 
       
    39 const TUint8 KAmrKAPayloadSize = 6;
       
    40 const TUint8 KAmrKeepAlivePayload[KAmrKAPayloadSize] = 
       
    41     { 
       
    42     0xF4, 0x00, 0x00, 0x00, 0x00, 0x00
       
    43     };
       
    44     
       
    45 // ============================ MEMBER FUNCTIONS ===============================
       
    46 
       
    47 // -----------------------------------------------------------------------------
       
    48 // CMccCodecAmrWb::CMccCodecAmrWb
       
    49 // default constructor
       
    50 // -----------------------------------------------------------------------------
       
    51 //
       
    52 CMccCodecAmrWb::CMccCodecAmrWb() : CMccCodecAMR()
       
    53     {
       
    54     iBitrateMask = KMccAllowedAmrWbBitrateAll;
       
    55     iMaxRed = KNotSet;
       
    56     iDefaultBitrateMask = KMccAllowedAmrWbBitrateAll;
       
    57     iDefaultBitrate = KAmrWbBitrate2385;
       
    58     iAdditionalInfoMask = KMccAllowedAmrWbAdditionalInfo;
       
    59     iMaxModeSetVal = KMaxModeSetValue;
       
    60     }
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 // CMccCodecAmrWb::ConstructL
       
    64 // Symbian 2nd phase constructor can leave.
       
    65 // -----------------------------------------------------------------------------
       
    66 //
       
    67 void CMccCodecAmrWb::ConstructL( )
       
    68     {
       
    69     __INTERFACE( "CMccCodecAmrWb::ConstructL" )      
       
    70     iSdpName.Copy( KAMRWbSdpName );
       
    71     iKeepAliveData.Copy( KAmrKeepAlivePayload );
       
    72     iFmtpAttr = HBufC8::NewL( 1 );
       
    73     TPtr8 ptr = iFmtpAttr->Des();
       
    74     ptr.Append( KNullDesC );
       
    75     
       
    76     iFourCC = KMccFourCCIdAMRWB;
       
    77     SetSamplingFreq( KAmrWbSamplingFreq );
       
    78     EnableVAD( EFalse );
       
    79     iHwFrameTime = KAMRDefaultHwFrameTime; // default 20ms
       
    80     iFrameSize = KAmrWbDefaultFrameSize;
       
    81     SetMaxPTime( KAMRDefaultMaxPTime ); // recommended "limit" 200ms
       
    82     SetPTime( KAMRDefaultPTime ); // default 20ms 
       
    83     SetBitrate( KAmrWbBitrate2385 ); // max bitrate
       
    84     SetPayloadType( KDefaultAmrWbPT );
       
    85     SetCodecMode( EBandwidthEfficient );
       
    86     iNumOfChannels = 1;
       
    87 
       
    88     iPayloadFormatEncoder = KImplUidAmrPayloadFormatEncode;
       
    89     iPayloadFormatDecoder = KImplUidAmrPayloadFormatDecode;
       
    90     
       
    91     __INTERFACE( "CMccCodecAmrWb::ConstructL, exit" )      
       
    92     }
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // CMccCodecAmrWb::NewL
       
    96 // Static constructor.
       
    97 // -----------------------------------------------------------------------------
       
    98 //
       
    99 CMccCodecAmrWb* CMccCodecAmrWb::NewL()
       
   100     {
       
   101     CMccCodecAmrWb* self = new (ELeave) CMccCodecAmrWb;
       
   102     CleanupStack::PushL( self );
       
   103     self->ConstructL();
       
   104     CleanupStack::Pop( self ); 
       
   105     return self;
       
   106     }
       
   107 
       
   108 // -----------------------------------------------------------------------------
       
   109 // CMccCodecAmrWb::~CMccCodecAmrWb
       
   110 // Destructor
       
   111 // -----------------------------------------------------------------------------
       
   112 //
       
   113 CMccCodecAmrWb::~CMccCodecAmrWb()
       
   114     {
       
   115     __INTERFACE( "CMccCodecAmrWb::~CMccCodecAmrWb" )      
       
   116     }
       
   117 
       
   118     
       
   119 // -----------------------------------------------------------------------------
       
   120 // CMccCodecAmrWb::GetBitrateModeSet
       
   121 // Get the mode from the bitrate
       
   122 // -----------------------------------------------------------------------------
       
   123 //
       
   124 TInt CMccCodecAmrWb::GetBitrateModeSet( TUint aBitrate )
       
   125     {
       
   126     __INTERFACE( "CMccCodecAmrWb::GetBitrateModeSet" )      
       
   127     TInt mode( KUndefinedMode );
       
   128     
       
   129     switch ( aBitrate )
       
   130         {
       
   131         case KAmrWbBitrate660:
       
   132             {
       
   133             mode = KAMRMode0;
       
   134             break;
       
   135             }
       
   136         case KAmrWbBitrate885:
       
   137             {
       
   138             mode = KAMRMode1;
       
   139             break;
       
   140             }
       
   141         case KAmrWbBitrate1265:
       
   142             {
       
   143             mode = KAMRMode2;
       
   144             break;
       
   145             }
       
   146         case KAmrWbBitrate1425:
       
   147             {
       
   148             mode = KAMRMode3;
       
   149             break;
       
   150             }
       
   151         case KAmrWbBitrate1585:
       
   152             {
       
   153             mode = KAMRMode4;
       
   154             break;
       
   155             }
       
   156         case KAmrWbBitrate1825:
       
   157             {
       
   158             mode = KAMRMode5;
       
   159             break;
       
   160             }
       
   161         case KAmrWbBitrate1985:
       
   162             {
       
   163             mode = KAMRMode6;
       
   164             break;
       
   165             }
       
   166         case KAmrWbBitrate2305:
       
   167             {
       
   168             mode = KAMRMode7;
       
   169             break;
       
   170             }
       
   171         case KAmrWbBitrate2385:
       
   172             {
       
   173             mode = KAMRMode8;
       
   174             break;
       
   175             }
       
   176         default:
       
   177             {
       
   178             break;
       
   179             }                
       
   180         }
       
   181         
       
   182     __INTERFACE_INT1( "CMccCodecAmrWb::GetBitrateModeSet, exit with mode", mode )      
       
   183     return mode;
       
   184     }
       
   185 
       
   186 // -----------------------------------------------------------------------------
       
   187 // CMccCodecAmrWb::SetBitrateModeSet
       
   188 // Sets the bitrate used with AMR codec from the mode .
       
   189 // -----------------------------------------------------------------------------
       
   190 //
       
   191 void CMccCodecAmrWb::SetBitrateModeSet( TUint aModeSet )
       
   192     {
       
   193     __INTERFACE( "CMccCodecAmrWb::SetBitrateModeSet" )      
       
   194     switch ( aModeSet )
       
   195         {
       
   196         case KAMRMode0:
       
   197             {
       
   198             SetBitrate( KAmrWbBitrate660 );
       
   199             break;
       
   200             }
       
   201         case KAMRMode1:
       
   202             {
       
   203             SetBitrate( KAmrWbBitrate885 );
       
   204             break;
       
   205             }
       
   206         case KAMRMode2:
       
   207             {
       
   208             SetBitrate( KAmrWbBitrate1265 );
       
   209             break;
       
   210             }
       
   211         case KAMRMode3:
       
   212             {
       
   213             SetBitrate( KAmrWbBitrate1425 );
       
   214             break;
       
   215             }
       
   216         case KAMRMode4:
       
   217             {
       
   218             SetBitrate( KAmrWbBitrate1585 );
       
   219             break;
       
   220             }
       
   221         case KAMRMode5:
       
   222             {
       
   223             SetBitrate( KAmrWbBitrate1825 );
       
   224             break;
       
   225             }
       
   226         case KAMRMode6:
       
   227             {
       
   228             SetBitrate( KAmrWbBitrate1985 );
       
   229             break;
       
   230             }
       
   231         case KAMRMode7:
       
   232             {
       
   233             SetBitrate( KAmrWbBitrate2305 );
       
   234             break;
       
   235             }
       
   236         case KAMRMode8:
       
   237             {
       
   238             SetBitrate( KAmrWbBitrate2385 );
       
   239             break;
       
   240             }
       
   241         default:
       
   242             {
       
   243             SetBitrate( KAmrWbBitrate660 );
       
   244             break;
       
   245             }
       
   246         }
       
   247     __INTERFACE( "CMccCodecAmrWb::SetBitrateModeSet, exit" )      
       
   248     }
       
   249 
       
   250 // -----------------------------------------------------------------------------
       
   251 // CMccCodecAmrWb::GetBitrateMaskFromMode
       
   252 // Get the bitrate mask from the mode
       
   253 // -----------------------------------------------------------------------------
       
   254 //
       
   255 TInt CMccCodecAmrWb::GetBitrateMaskFromMode( TUint aMode, TUint& aBitrateMask  )
       
   256     {
       
   257     __INTERFACE( "CMccCodecAmrWb::GetBitrateMaskFromMode" )          
       
   258     switch ( aMode )
       
   259         {
       
   260         case KAMRMode0:
       
   261             {
       
   262             aBitrateMask = KMccAllowedAmrWbBitrate660;
       
   263             break;
       
   264             } 
       
   265         case KAMRMode1:
       
   266             {
       
   267             aBitrateMask = KMccAllowedAmrWbBitrate885;
       
   268             break;
       
   269             }
       
   270         case KAMRMode2:
       
   271             {
       
   272             aBitrateMask = KMccAllowedAmrWbBitrate1265;
       
   273             break;
       
   274             }
       
   275         case KAMRMode3:
       
   276             {
       
   277             aBitrateMask = KMccAllowedAmrWbBitrate1425;
       
   278             break;
       
   279             }
       
   280         case KAMRMode4:
       
   281             {
       
   282             aBitrateMask = KMccAllowedAmrWbBitrate1585;
       
   283             break;
       
   284             }
       
   285         case KAMRMode5:
       
   286             {
       
   287             aBitrateMask = KMccAllowedAmrWbBitrate1825;
       
   288             break;
       
   289             }
       
   290         case KAMRMode6:
       
   291             {
       
   292             aBitrateMask = KMccAllowedAmrWbBitrate1985;
       
   293             break;
       
   294             }
       
   295         case KAMRMode7:
       
   296             {
       
   297             aBitrateMask = KMccAllowedAmrWbBitrate2305;
       
   298             break;
       
   299             }
       
   300         case KAMRMode8:
       
   301             {
       
   302             aBitrateMask = KMccAllowedAmrWbBitrateAll;
       
   303             break;
       
   304             }
       
   305         default:
       
   306             {
       
   307             __INTERFACE( "CMccCodecAmrWb::GetBitrateMaskFromMode, exit KErrNotFound" )          
       
   308             return KErrNotFound; 
       
   309             }                
       
   310         }
       
   311     
       
   312     __INTERFACE( "CMccCodecAmrWb::GetBitrateMaskFromMode, exit" )          
       
   313     return KErrNone;
       
   314     }
       
   315 
       
   316 // -----------------------------------------------------------------------------
       
   317 // CMccCodecAmrWb::SetBitrate
       
   318 // Sets the bitrate used with AMR codec.
       
   319 // -----------------------------------------------------------------------------
       
   320 //
       
   321 TInt CMccCodecAmrWb::SetBitrate( TUint aBitrate )
       
   322     {
       
   323     TBool isValid( ETrue );
       
   324        
       
   325     switch ( aBitrate )
       
   326         {
       
   327         case KAmrWbBitrate660:
       
   328             break;
       
   329         case KAmrWbBitrate885:
       
   330             break;
       
   331         case KAmrWbBitrate1265:
       
   332             break;
       
   333         case KAmrWbBitrate1425:
       
   334             break;
       
   335         case KAmrWbBitrate1585:
       
   336             break;
       
   337         case KAmrWbBitrate1825:
       
   338             break;
       
   339         case KAmrWbBitrate1985:
       
   340             break;
       
   341         case KAmrWbBitrate2305:
       
   342             break;
       
   343         case KAmrWbBitrate2385:
       
   344             break;
       
   345         default:
       
   346             isValid = EFalse;
       
   347             break;
       
   348         }
       
   349     if ( isValid )
       
   350         {
       
   351         iBitrate = aBitrate;
       
   352         return KErrNone;
       
   353         }
       
   354     else
       
   355         {
       
   356         return KErrNotSupported;
       
   357         }
       
   358     }
       
   359 
       
   360 // -----------------------------------------------------------------------------
       
   361 // CMccCodecAmrWb::SetBitrateFromBitrateMask
       
   362 // Sets the bitrate used with AMR codec from the bitrateMask.
       
   363 // -----------------------------------------------------------------------------
       
   364 //
       
   365 TInt CMccCodecAmrWb::SetBitrateFromBitrateMask( TUint aBitrateMask )
       
   366     {
       
   367     if ( aBitrateMask & KMccAllowedAmrWbModeChangePeriod2 )
       
   368         {
       
   369         SetModeChangePeriod( KNumValue2 );
       
   370         }
       
   371     
       
   372     if ( aBitrateMask & KMccAllowedAmrWbModeChangeNeighbor1 )
       
   373         {
       
   374         SetModeChangeNeighbor( ETrue );
       
   375         }
       
   376         
       
   377     if( aBitrateMask & KMccAllowedAmrWbBitrate2385 )
       
   378         {
       
   379         SetBitrate( KAmrWbBitrate2385 );
       
   380         return KErrNone;
       
   381         }
       
   382     else if( aBitrateMask & KMccAllowedAmrWbBitrate2305 )
       
   383         {
       
   384         SetBitrate( KAmrWbBitrate2305 );
       
   385         return KErrNone;
       
   386         }
       
   387     else if( aBitrateMask & KMccAllowedAmrWbBitrate1985 )
       
   388         {
       
   389         SetBitrate( KAmrWbBitrate1985 );
       
   390         return KErrNone;
       
   391         }   
       
   392     else if( aBitrateMask & KMccAllowedAmrWbBitrate1825 )
       
   393         {
       
   394         SetBitrate( KAmrWbBitrate1825 );
       
   395         return KErrNone;
       
   396         }   
       
   397     else if( aBitrateMask & KMccAllowedAmrWbBitrate1585 )
       
   398         {
       
   399         SetBitrate( KAmrWbBitrate1585 );
       
   400         return KErrNone;
       
   401         }   
       
   402     else if( aBitrateMask & KMccAllowedAmrWbBitrate1425 )
       
   403         {
       
   404         SetBitrate( KAmrWbBitrate1425 );
       
   405         return KErrNone;
       
   406         }
       
   407     else if( aBitrateMask & KMccAllowedAmrWbBitrate1265 )
       
   408         {
       
   409         SetBitrate( KAmrWbBitrate1265 );
       
   410         return KErrNone;
       
   411         }  
       
   412     else if( aBitrateMask & KMccAllowedAmrWbBitrate885 )
       
   413         {
       
   414         SetBitrate( KAmrWbBitrate885 );
       
   415         return KErrNone;
       
   416         }
       
   417     else if( aBitrateMask & KMccAllowedAmrWbBitrate660 )
       
   418         {
       
   419         SetBitrate( KAmrWbBitrate660 );
       
   420         return KErrNone;
       
   421         }
       
   422     else
       
   423         {
       
   424         return KErrArgument;    
       
   425         }
       
   426     }
       
   427 
       
   428 // -----------------------------------------------------------------------------
       
   429 // CMccCodecAmrWb::SetSamplingFreq
       
   430 // Sets the sampling frequency. 
       
   431 // -----------------------------------------------------------------------------
       
   432 //
       
   433 TInt CMccCodecAmrWb::SetSamplingFreq( TUint32 aSamplingFreq )
       
   434     {
       
   435     if ( KAmrWbSamplingFreq == aSamplingFreq )
       
   436         {
       
   437         iSamplingFreq = aSamplingFreq;
       
   438         return KErrNone;
       
   439         }
       
   440     else
       
   441         {
       
   442         return KErrNotSupported;
       
   443         }
       
   444     }
       
   445 
       
   446 // -----------------------------------------------------------------------------
       
   447 // CMccCodecAmrWb::SetSdpName
       
   448 // Sets the SDP name
       
   449 // -----------------------------------------------------------------------------
       
   450 TInt CMccCodecAmrWb::SetSdpName( const TDesC8& aSdpName )
       
   451     {
       
   452     if ( !aSdpName.CompareF( KAMRWbSdpName ) )
       
   453         {
       
   454         iSdpName.Copy( aSdpName );
       
   455         }
       
   456     else 
       
   457         {
       
   458         return KErrNotSupported;
       
   459         }
       
   460     
       
   461     return KErrNone;
       
   462     }
       
   463 
       
   464 // -----------------------------------------------------------------------------
       
   465 // CMccCodecAmrWb::SetAllowedBitrates
       
   466 // Set allowed bitrates
       
   467 // -----------------------------------------------------------------------------
       
   468 //
       
   469 TInt CMccCodecAmrWb::SetAllowedBitrates( TUint aBitrateMask )
       
   470     {
       
   471     //Confirm that the bitrate mask is valid
       
   472     //I.e. after all the valid bitrates are set to zero the value should be zero
       
   473     if ( (aBitrateMask >> 16 ) > 0 )
       
   474         {
       
   475         return KErrArgument;
       
   476         }
       
   477     else
       
   478         {
       
   479         /*
       
   480         In the future the allowed bitrates will be fetched from the codec
       
   481         I.e. the KMccAllowedAmrNbBitrateAll will be changed to the bitrates
       
   482         supported by the codec
       
   483         */
       
   484         SetBitrateMask( KMccAllowedAmrWbBitrateAll & aBitrateMask );
       
   485         SetBitrateMaskAdditionalInfo( aBitrateMask );
       
   486         
       
   487         SetBitrateFromBitrateMask( iBitrateMask );
       
   488         }
       
   489     
       
   490     return KErrNone;
       
   491     }
       
   492 
       
   493     
       
   494 // -----------------------------------------------------------------------------
       
   495 // CMccCodecAmrWb::GetAllowedBitratesArrayL
       
   496 // Get allowed bitrates in an array
       
   497 // -----------------------------------------------------------------------------
       
   498 //
       
   499 TInt CMccCodecAmrWb::GetAllowedBitratesArrayL( RArray<TUint>& aBitratesArray )
       
   500     {
       
   501     if( iBitrateMask & KMccAllowedAmrWbBitrate660 )
       
   502         {
       
   503         User::LeaveIfError( aBitratesArray.Append(  KAmrWbBitrate660 ) );
       
   504         }
       
   505     if( iBitrateMask & KMccAllowedAmrWbBitrate885 )
       
   506         {
       
   507         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate885 ) );
       
   508         }
       
   509     if( iBitrateMask & KMccAllowedAmrWbBitrate1265 )
       
   510         {
       
   511         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1265 ) );
       
   512         }
       
   513     if( iBitrateMask & KMccAllowedAmrWbBitrate1425 )
       
   514         {
       
   515         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1425 ) );
       
   516         }
       
   517     if( iBitrateMask & KMccAllowedAmrWbBitrate1585 )
       
   518         {
       
   519         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1585 ) );
       
   520         }
       
   521     if( iBitrateMask & KMccAllowedAmrWbBitrate1825 )
       
   522         {
       
   523         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1825 ) );
       
   524         }
       
   525     if( iBitrateMask & KMccAllowedAmrWbBitrate1985 )
       
   526         {
       
   527         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate1985 ) );
       
   528         }
       
   529     if( iBitrateMask & KMccAllowedAmrWbBitrate2305 )
       
   530         {
       
   531         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate2305 ) );
       
   532         }
       
   533     if( iBitrateMask & KMccAllowedAmrWbBitrate2385 )
       
   534         {
       
   535         User::LeaveIfError( aBitratesArray.Append( KAmrWbBitrate2385 ) );
       
   536         }
       
   537         
       
   538     return KErrNone;
       
   539     }
       
   540   
       
   541 // -----------------------------------------------------------------------------
       
   542 // CMccCodecAmrWb::CloneDefaultsL
       
   543 // Make a default setting clone from this AMR codec
       
   544 // -----------------------------------------------------------------------------
       
   545 //
       
   546 CMccCodecInformation* CMccCodecAmrWb::CloneDefaultsL()
       
   547     {
       
   548     __INTERFACE( "CMccCodecAmrWb::CloneDefaultsL" )          
       
   549     return CMccCodecAmrWb::NewL();
       
   550     }
       
   551 
       
   552 // -----------------------------------------------------------------------------
       
   553 // CMccCodecAmrWb::CloneDetailedL
       
   554 // Make a detailed clone from this AMR codec
       
   555 // -----------------------------------------------------------------------------
       
   556 //
       
   557 CMccCodecInformation* CMccCodecAmrWb::CloneDetailedL()
       
   558     {
       
   559     CMccCodecAmrWb* newCodec = CMccCodecAmrWb::NewL();
       
   560     CleanupStack::PushL( newCodec );
       
   561     newCodec->SetBitrate( this->Bitrate() );
       
   562     newCodec->SetCodecMode( this->CodecMode() );
       
   563     newCodec->SetMaxPTime( this->MaxPTime() );
       
   564     newCodec->SetPayloadType( this->PayloadType() );
       
   565     newCodec->SetPTime( this->PTime() );
       
   566     newCodec->SetSamplingFreq( this->SamplingFreq() );
       
   567     newCodec->SetSdpName( this->SdpName() );
       
   568     newCodec->SetFmtpAttrL( this->GetFmtpL(), EFalse );
       
   569     CleanupStack::Pop( newCodec );
       
   570     return newCodec;
       
   571     }
       
   572 
       
   573 // ========================== OTHER EXPORTED FUNCTIONS =========================
       
   574 
       
   575 //  End of File