multimediacommsengine/mmceshared/src/mcecomfactory.cpp
changeset 0 1bce908db942
child 49 64c62431ac08
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2005 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:    
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 #include <s32buf.h>
       
    22 
       
    23 #include "mceaudiostream.h"
       
    24 #include "mcevideostream.h"
       
    25 #include "mcertpsource.h"
       
    26 #include "mcemicsource.h"
       
    27 #include "mcecamerasource.h"
       
    28 #include "mcefilesource.h"
       
    29 #include "mcefilesink.h"
       
    30 #include "mcertpsink.h"
       
    31 #include "mcespeakersink.h"
       
    32 #include "mcedisplaysink.h"
       
    33 #include "mceavsink.h"
       
    34 #include "mcecomfactory.h"
       
    35 #include "mcecomsession.h"
       
    36 #include "mcecomaudiostream.h"
       
    37 #include "mcecomvideostream.h"
       
    38 #include "mcecomrtpsource.h"
       
    39 #include "mcecommicsource.h"
       
    40 #include "mcecomcamerasource.h"
       
    41 #include "mcecomfilesource.h"
       
    42 #include "mcecomfilesink.h"
       
    43 #include "mcecomrtpsink.h"
       
    44 #include "mcecomspeakersink.h"
       
    45 #include "mcecomdisplaysink.h"
       
    46 #include "mcecomavsink.h"
       
    47 #include "mcecomaudiocodec.h"
       
    48 #include "mcecomamrcodec.h"
       
    49 #include "mcecomg711codec.h"
       
    50 #include "mceg711codec.h"
       
    51 #include "mcecomg729codec.h"
       
    52 #include "mceg729codec.h"
       
    53 #include "mcecncodec.h"
       
    54 #include "mcecomilbccodec.h"   
       
    55 #include "mcecomdtmfcodec.h"
       
    56 #include "mcecomcncodec.h"
       
    57 #include "mcecomredcodec.h"
       
    58 #include "mcecomvideocodec.h"
       
    59 #include "mcecomh263codec.h"
       
    60 #include "mcecomstreambundle.h"
       
    61 #include "mcecomavccodec.h"
       
    62 #include "mcecomamrwbcodec.h"
       
    63 #include "mceserial.h"
       
    64 
       
    65 
       
    66 
       
    67 // ============================ MEMBER FUNCTIONS ===============================
       
    68 
       
    69 
       
    70 // -----------------------------------------------------------------------------
       
    71 // TMceComFactory::CreateLC
       
    72 // -----------------------------------------------------------------------------
       
    73 //
       
    74 CMceComSession* TMceComFactory::CreateLC( MMceComSerializationContext& aSerCtx )
       
    75     {
       
    76     return CMceComSession::NewLC( aSerCtx );
       
    77     }
       
    78 
       
    79 
       
    80 // -----------------------------------------------------------------------------
       
    81 // TMceComFactory::CreateL
       
    82 // -----------------------------------------------------------------------------
       
    83 //
       
    84 CMceComStreamBundle* TMceComFactory::CreateBundleLC( CMceComSession& aSession, 
       
    85                                                      MMceComSerializationContext& aSerCtx )
       
    86     {
       
    87     RReadStream& readStream = aSerCtx.ReadStream();
       
    88     
       
    89     MStreamBuf* streamBuf = readStream.Source();
       
    90     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
    91     CMceStreamBundle::TMceStreamBundleType type =
       
    92     	static_cast<CMceStreamBundle::TMceStreamBundleType>( readStream.ReadUint8L() );
       
    93     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
    94     
       
    95     CMceComStreamBundle* bundle = CMceComStreamBundle::NewLC( type );
       
    96     bundle->InitializeL( aSession );
       
    97     bundle->InternalizeL( aSerCtx );
       
    98     
       
    99     return bundle;
       
   100     
       
   101     }
       
   102 
       
   103 // -----------------------------------------------------------------------------
       
   104 // TMceComFactory::CreateL
       
   105 // -----------------------------------------------------------------------------
       
   106 //
       
   107 CMceMsgBase* TMceComFactory::CreateL( TMceItcDataType aType,
       
   108                                       RReadStream& aReadStream )
       
   109     {
       
   110     MMceComSerializationContext serCtx( aReadStream );
       
   111     CleanupClosePushL( serCtx );
       
   112     
       
   113     CMceMsgBase* object = CreateL( aType, serCtx );
       
   114     
       
   115     CleanupStack::PopAndDestroy();//serCtx
       
   116     
       
   117     return object;
       
   118     
       
   119     }
       
   120     
       
   121 // -----------------------------------------------------------------------------
       
   122 // TMceComFactory::CreateL
       
   123 // -----------------------------------------------------------------------------
       
   124 //
       
   125 CMceMsgBase* TMceComFactory::CreateL( TMceItcDataType aType,
       
   126                                       MMceComSerializationContext& aSerCtx )
       
   127     {
       
   128     
       
   129     CMceMsgBase* message = NULL;
       
   130     switch ( aType )
       
   131         {
       
   132         case EMceItcMsgTypeSession:
       
   133             {
       
   134             message = new (ELeave) CMceMsgObject<CMceComSession>();
       
   135         	break;
       
   136             }
       
   137         case EMceItcMsgTypeStream:
       
   138             {
       
   139             message = new (ELeave) CMceMsgObject<CMceComMediaStream>();
       
   140         	break;
       
   141             }
       
   142         case EMceItcMsgTypeCodec:
       
   143             {
       
   144             message = new (ELeave) CMceMsgObject<CMceComAudioCodec>();
       
   145         	break;
       
   146             }
       
   147         case EMceItcMsgTypeSink:
       
   148             {
       
   149             message = new (ELeave) CMceMsgObject<CMceComMediaSink>();
       
   150         	break;
       
   151             }
       
   152         case EMceItcMsgTypeSource:
       
   153             {
       
   154             message = new (ELeave) CMceMsgObject<CMceComMediaSource>();
       
   155         	break;
       
   156             }
       
   157         case EMceItcMsgTypeSIPData:
       
   158             {
       
   159             message = new (ELeave) CMceMsgSIPData();
       
   160         	break;
       
   161             }
       
   162         case EMceItcMsgTypeSIPReply:
       
   163             {
       
   164             message = new (ELeave) CMceMsgSIPReply();
       
   165         	break;
       
   166             }
       
   167        	case EMceItcMsgTypeSIPRequest:
       
   168             {
       
   169             message = new (ELeave) CMceMsgSIPRequest();
       
   170         	break;
       
   171             }    
       
   172             
       
   173         case EMceItcMsgTypeEvent:
       
   174             {
       
   175             message = new (ELeave) CMceMsgSIPEvent();
       
   176         	break;
       
   177             }
       
   178         case EMceItcMsgTypeTextArray:
       
   179             {
       
   180             message = new (ELeave) CMceMsgTextArray();
       
   181         	break;
       
   182             }
       
   183         case EMceItcMsgTypeMessageArray:
       
   184             {
       
   185             message = new (ELeave) CMceMsgArray<TMceComFactory>( *this );
       
   186         	break;
       
   187             }
       
   188 	    default:
       
   189 	        {
       
   190 	        }
       
   191         }
       
   192         
       
   193     if ( message )
       
   194         {
       
   195     	CleanupStack::PushL( message );
       
   196     	message->PushL();
       
   197         message->DoDecodeL( aSerCtx );
       
   198     	message->Pop();
       
   199         CleanupStack::Pop( message );
       
   200         }
       
   201 
       
   202     return message;
       
   203             
       
   204     }
       
   205 
       
   206 // -----------------------------------------------------------------------------
       
   207 // TMceComFactory::CreateLC
       
   208 // -----------------------------------------------------------------------------
       
   209 //
       
   210 void TMceComFactory::CreateLC( MMceComSerializable*& aObject, MMceComSerializationContext& aSerCtx )
       
   211     {
       
   212 
       
   213     RReadStream& readStream = aSerCtx.ReadStream();
       
   214     
       
   215     MStreamBuf* streamBuf = readStream.Source();
       
   216     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
   217     TUint type = readStream.ReadUint8L();
       
   218     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
   219     
       
   220     switch ( type )
       
   221         {
       
   222         case KMceAvSink:
       
   223             {
       
   224             aObject = CMceComAvSink::NewLC();
       
   225             break;
       
   226             }
       
   227         default:
       
   228             {
       
   229             break;
       
   230             }
       
   231         }
       
   232     
       
   233     if ( !aObject )
       
   234         {
       
   235         User::Leave( KErrNotSupported );
       
   236         }
       
   237         
       
   238     aObject->InternalizeL( aSerCtx );
       
   239     
       
   240     }
       
   241 
       
   242 
       
   243 
       
   244 // -----------------------------------------------------------------------------
       
   245 // TMceComMediaStreamFactory::CreateLC
       
   246 // -----------------------------------------------------------------------------
       
   247 //
       
   248 CMceComMediaStream* TMceComMediaStreamFactory::CreateLC( TMceMediaType aType )
       
   249 	{
       
   250     
       
   251     CMceComMediaStream* stream = NULL;
       
   252     switch ( aType )
       
   253         {
       
   254         case KMceAudio:
       
   255             {
       
   256             stream = CMceComAudioStream::NewLC();
       
   257             break;
       
   258             }
       
   259         case KMceVideo:
       
   260             {
       
   261             stream = CMceComVideoStream::NewLC();
       
   262             break;
       
   263             }
       
   264         default:
       
   265             {
       
   266             break;
       
   267             }
       
   268         }
       
   269     
       
   270     if ( !stream )
       
   271         {
       
   272         User::Leave( KErrNotSupported );
       
   273         }
       
   274         
       
   275     return stream;
       
   276     
       
   277 	}
       
   278 	
       
   279 	
       
   280 
       
   281 // -----------------------------------------------------------------------------
       
   282 // TMceComMediaStreamFactory::CreateLC
       
   283 // -----------------------------------------------------------------------------
       
   284 //
       
   285 CMceComMediaStream* TMceComMediaStreamFactory::CreateLC( 
       
   286                                         MMceComSerializationContext& aSerCtx )
       
   287     {
       
   288     RReadStream& readStream = aSerCtx.ReadStream();
       
   289     
       
   290     MStreamBuf* streamBuf = readStream.Source();
       
   291     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
   292     TMceMediaType type = static_cast<TMceMediaType>( readStream.ReadUint8L() );
       
   293     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
   294     
       
   295     CMceComMediaStream* stream = CreateLC( type );
       
   296     stream->InternalizeL( aSerCtx );
       
   297     return stream;
       
   298     
       
   299     }
       
   300 
       
   301 	
       
   302 // -----------------------------------------------------------------------------
       
   303 // TMceComSourceFactory::CreateLC
       
   304 // -----------------------------------------------------------------------------
       
   305 //
       
   306 CMceComMediaSource* TMceComSourceFactory::CreateLC( TMceSourceType aType )
       
   307     {
       
   308     CMceComMediaSource* source = NULL;
       
   309 
       
   310     switch ( aType )
       
   311         {
       
   312         case KMceRTPSource:
       
   313             {
       
   314             source = CMceComRtpSource::NewLC();
       
   315             break;
       
   316             }
       
   317         case KMceMicSource:
       
   318             {
       
   319             source = CMceComMicSource::NewLC();
       
   320             break;
       
   321             }
       
   322         case KMceCameraSource:
       
   323             {
       
   324             source = CMceComCameraSource::NewLC();
       
   325             break;
       
   326             }
       
   327         case KMceFileSource:
       
   328             {
       
   329             source = CMceComFileSource::NewLC();
       
   330             break;
       
   331             }
       
   332         default:
       
   333             {
       
   334             break;
       
   335             }
       
   336         }
       
   337 
       
   338     if ( !source )
       
   339         {
       
   340         User::Leave( KErrNotSupported );
       
   341         }
       
   342         
       
   343     return source;
       
   344     
       
   345     }
       
   346 
       
   347 
       
   348 // -----------------------------------------------------------------------------
       
   349 // TMceComSourceFactory::CreateLC
       
   350 // -----------------------------------------------------------------------------
       
   351 //
       
   352 CMceComMediaSource* TMceComSourceFactory::CreateLC( MMceComSerializationContext& aSerCtx )
       
   353     {
       
   354     RReadStream& readStream = aSerCtx.ReadStream();
       
   355     
       
   356     MStreamBuf* streamBuf = readStream.Source();
       
   357     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
   358     TMceSourceType type = static_cast<TMceSourceType>( readStream.ReadUint8L() );
       
   359     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
   360 
       
   361     CMceComMediaSource* source = CreateLC( type );
       
   362     source->InternalizeL( aSerCtx );
       
   363     return source;
       
   364     
       
   365     }
       
   366 
       
   367 // -----------------------------------------------------------------------------
       
   368 // TMceComSinkFactory::CreateLC
       
   369 // -----------------------------------------------------------------------------
       
   370 //
       
   371 CMceComMediaSink* TMceComSinkFactory::CreateLC( TMceSinkType aType )
       
   372     {
       
   373     CMceComMediaSink* sink = NULL;
       
   374     
       
   375     switch ( aType )
       
   376         {
       
   377         case KMceRTPSink:
       
   378             {
       
   379             sink = CMceComRtpSink::NewLC();
       
   380             break;
       
   381             }
       
   382         case KMceSpeakerSink:
       
   383             {
       
   384             sink = CMceComSpeakerSink::NewLC();
       
   385             break;
       
   386             }
       
   387         case KMceDisplaySink:
       
   388             {
       
   389             sink = CMceComDisplaySink::NewLC();
       
   390             break;
       
   391             }
       
   392         case KMceFileSink:
       
   393             {
       
   394             sink = CMceComFileSink::NewLC();
       
   395             break;
       
   396             }
       
   397         default:
       
   398             {
       
   399             break;
       
   400             }
       
   401         }
       
   402 
       
   403     if ( !sink )
       
   404         {
       
   405         User::Leave( KErrNotSupported );
       
   406         }
       
   407         
       
   408     return sink;
       
   409     
       
   410     }
       
   411 
       
   412 // -----------------------------------------------------------------------------
       
   413 // TMceComSinkFactory::CreateLC
       
   414 // -----------------------------------------------------------------------------
       
   415 //
       
   416 CMceComMediaSink* TMceComSinkFactory::CreateLC( MMceComSerializationContext& aSerCtx )
       
   417     {
       
   418     RReadStream& readStream = aSerCtx.ReadStream();
       
   419     
       
   420     MStreamBuf* streamBuf = readStream.Source();
       
   421     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
   422     TMceSinkType type = static_cast<TMceSinkType>( readStream.ReadUint8L() );
       
   423     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
   424     
       
   425     CMceComMediaSink* sink = CreateLC( type );
       
   426     sink->InternalizeL( aSerCtx );
       
   427     return sink;
       
   428     
       
   429     }
       
   430 
       
   431 // -----------------------------------------------------------------------------
       
   432 // TMceComAudioCodecFactory::CreateLC 
       
   433 // -----------------------------------------------------------------------------
       
   434 //
       
   435 CMceComAudioCodec* TMceComAudioCodecFactory::CreateLC( const TBuf8<KMceMaxSdpNameLength> aSdpName )
       
   436     {
       
   437     CMceComAudioCodec* codec = CreateCodecLC( aSdpName );
       
   438     __ASSERT_ALWAYS( codec, User::Leave( KErrNotSupported ) );
       
   439     
       
   440     return codec;
       
   441     
       
   442     }
       
   443 
       
   444 // -----------------------------------------------------------------------------
       
   445 // TMceComAudioCodecFactory::CreateCodecLC 
       
   446 // -----------------------------------------------------------------------------
       
   447 //
       
   448 CMceComAudioCodec* TMceComAudioCodecFactory::CreateCodecLC( const TBuf8<KMceMaxSdpNameLength> aSdpName )
       
   449     {
       
   450     CMceComAudioCodec* codec = NULL;
       
   451     
       
   452     if ( !aSdpName.CompareF(KMceSDPNameAMR) )
       
   453         {
       
   454         codec = CMceComAMRCodec::NewLC( aSdpName );
       
   455         }
       
   456     else if ( !aSdpName.CompareF(KMceSDPNamePCMU) ||
       
   457               !aSdpName.CompareF(KMceSDPNamePCMA) )
       
   458         {
       
   459         codec = CMceComG711Codec::NewLC( aSdpName );
       
   460         }
       
   461     else if ( !aSdpName.CompareF(KMceSDPNameG729) )    
       
   462         {
       
   463         codec = CMceComG729Codec::NewLC( aSdpName );
       
   464         }
       
   465     else if ( !aSdpName.CompareF(KMceSDPNameiLBC) )
       
   466         {
       
   467         codec = CMceComiLBCCodec::NewLC( aSdpName );    
       
   468         }
       
   469     else if ( !aSdpName.CompareF(KMceSDPNameDtmf) )
       
   470         {
       
   471         codec = CMceComDtmfCodec::NewLC( aSdpName );    
       
   472         }
       
   473     else if ( !aSdpName.CompareF(KMceSDPNameRed) )
       
   474         {
       
   475         codec = CMceComRedCodec::NewLC( aSdpName );    
       
   476         }
       
   477     else if ( !aSdpName.CompareF(KMceSDPNameCn) )
       
   478         {
       
   479         codec = CMceComCnCodec::NewLC( aSdpName );    
       
   480         }
       
   481         
       
   482     else if ( !aSdpName.CompareF(KMceSDPNameAMRWB) )
       
   483         {
       
   484         codec = CMceComAMRWbCodec::NewLC( aSdpName );    
       
   485         }
       
   486         
       
   487     else
       
   488         {
       
   489         codec = NULL;
       
   490         }
       
   491     
       
   492     return codec;
       
   493     
       
   494     }
       
   495 
       
   496 // -----------------------------------------------------------------------------
       
   497 // TMceComAudioCodecFactory::CreateCodecLC 
       
   498 // -----------------------------------------------------------------------------
       
   499 //
       
   500 CMceComAudioCodec* TMceComAudioCodecFactory::CreateCodecLC( TUint aPayload )
       
   501     {
       
   502     CMceComAudioCodec* codec = NULL;
       
   503     
       
   504     switch( aPayload )
       
   505         {
       
   506         case KMcePCMUPayloadType:
       
   507             {
       
   508             codec = CMceComG711Codec::NewLC( KMceSDPNamePCMU() );
       
   509             break;
       
   510             }
       
   511         case KMcePCMAPayloadType:
       
   512             {
       
   513             codec = CMceComG711Codec::NewLC( KMceSDPNamePCMA() );
       
   514             break;
       
   515             }
       
   516         case KMceDefaultG729PayloadType:
       
   517             {
       
   518             codec = CMceComG729Codec::NewLC( KMceSDPNameG729() );
       
   519             break;
       
   520             }
       
   521         case KMceDefaultCnPayloadType:
       
   522         case KMceDefaultCnPayloadType2:
       
   523             {
       
   524             codec = CMceComCnCodec::NewLC( KMceSDPNameCn() );
       
   525             break;
       
   526             }
       
   527         default:
       
   528             {
       
   529             //NOP
       
   530             break;
       
   531             }
       
   532         }
       
   533     
       
   534     if ( codec )
       
   535         {
       
   536         codec->iPayloadType = aPayload;
       
   537         }
       
   538         
       
   539     return codec;
       
   540     
       
   541     }
       
   542 
       
   543 
       
   544 
       
   545 // -----------------------------------------------------------------------------
       
   546 // TMceComAudioCodecFactory::CreateLC
       
   547 // -----------------------------------------------------------------------------
       
   548 //
       
   549 CMceComAudioCodec* TMceComAudioCodecFactory::CreateLC( MMceComSerializationContext& aSerCtx )
       
   550     {
       
   551     RReadStream& readStream = aSerCtx.ReadStream();
       
   552     
       
   553     MStreamBuf* streamBuf = readStream.Source();
       
   554     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
   555     TBuf8<KMceMaxSdpNameLength> sdpName;
       
   556     MceSerial::DecodeL( sdpName, readStream );
       
   557     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
   558     
       
   559     CMceComAudioCodec* codec = CreateLC( sdpName );
       
   560     codec->InternalizeL( aSerCtx );
       
   561     return codec;
       
   562     
       
   563     }
       
   564 
       
   565 
       
   566 // -----------------------------------------------------------------------------
       
   567 // TMceComVideoCodecFactory::CreateLC
       
   568 // -----------------------------------------------------------------------------
       
   569 //
       
   570 CMceComVideoCodec* TMceComVideoCodecFactory::CreateLC( const TBuf8<KMceMaxSdpNameLength> aSdpName )
       
   571     {
       
   572     CMceComVideoCodec* codec = CreateCodecLC( aSdpName );
       
   573     __ASSERT_ALWAYS( codec, User::Leave( KErrNotSupported ) );
       
   574     
       
   575     return codec;
       
   576     }
       
   577 
       
   578 
       
   579 // -----------------------------------------------------------------------------
       
   580 // TMceComVideoCodecFactory::CreateCodecLC
       
   581 // -----------------------------------------------------------------------------
       
   582 //
       
   583 
       
   584 CMceComVideoCodec* TMceComVideoCodecFactory::CreateCodecLC( const TBuf8<KMceMaxSdpNameLength> aSdpName )
       
   585 
       
   586     {
       
   587     CMceComVideoCodec* codec = NULL;
       
   588     
       
   589     if ( aSdpName.CompareF(KMceSDPNameH263) == 0 
       
   590          || aSdpName.CompareF(KMceSDPNameH2632000) == 0
       
   591          || aSdpName.CompareF(KMceSDPNameH2631998) == 0 )
       
   592         {
       
   593         codec = CMceComH263Codec::NewLC( aSdpName );
       
   594         }
       
   595     else if ( aSdpName.CompareF( KMceSDPNameH264 ) == 0 )
       
   596         {
       
   597         codec = CMceComAvcCodec::NewLC( aSdpName );
       
   598         }
       
   599     else
       
   600         {
       
   601         codec = NULL;
       
   602         }
       
   603     
       
   604     return codec;    
       
   605     }
       
   606 
       
   607 // -----------------------------------------------------------------------------
       
   608 // TMceComVideoCodecFactory::CreateCodecLC 
       
   609 // -----------------------------------------------------------------------------
       
   610 //
       
   611 CMceComVideoCodec* TMceComVideoCodecFactory::CreateCodecLC( TUint /*aPayload*/ )
       
   612     {
       
   613     CMceComVideoCodec* codec = NULL;
       
   614     return codec;
       
   615     
       
   616     }
       
   617 
       
   618 
       
   619 // -----------------------------------------------------------------------------
       
   620 // TMceComVideoCodecFactory::CreateLC
       
   621 // -----------------------------------------------------------------------------
       
   622 //
       
   623 CMceComVideoCodec* TMceComVideoCodecFactory::CreateLC( MMceComSerializationContext& aSerCtx )
       
   624     {
       
   625     RReadStream& readStream = aSerCtx.ReadStream();
       
   626     
       
   627     MStreamBuf* streamBuf = readStream.Source();
       
   628     TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead );
       
   629     TBuf8<KMceMaxSdpNameLength> sdpName;
       
   630     MceSerial::DecodeL( sdpName, readStream );
       
   631     streamBuf->SeekL( MStreamBuf::ERead, pos );
       
   632     
       
   633     CMceComVideoCodec* codec = CreateLC( sdpName );
       
   634     codec->InternalizeL( aSerCtx );
       
   635     return codec;
       
   636     
       
   637     }