diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmceshared/src/mcecomfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmceshared/src/mcecomfactory.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,637 @@ +/* +* Copyright (c) 2005 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: +* +*/ + + + + +#include + +#include "mceaudiostream.h" +#include "mcevideostream.h" +#include "mcertpsource.h" +#include "mcemicsource.h" +#include "mcecamerasource.h" +#include "mcefilesource.h" +#include "mcefilesink.h" +#include "mcertpsink.h" +#include "mcespeakersink.h" +#include "mcedisplaysink.h" +#include "mceavsink.h" +#include "mcecomfactory.h" +#include "mcecomsession.h" +#include "mcecomaudiostream.h" +#include "mcecomvideostream.h" +#include "mcecomrtpsource.h" +#include "mcecommicsource.h" +#include "mcecomcamerasource.h" +#include "mcecomfilesource.h" +#include "mcecomfilesink.h" +#include "mcecomrtpsink.h" +#include "mcecomspeakersink.h" +#include "mcecomdisplaysink.h" +#include "mcecomavsink.h" +#include "mcecomaudiocodec.h" +#include "mcecomamrcodec.h" +#include "mcecomg711codec.h" +#include "mceg711codec.h" +#include "mcecomg729codec.h" +#include "mceg729codec.h" +#include "mcecncodec.h" +#include "mcecomilbccodec.h" +#include "mcecomdtmfcodec.h" +#include "mcecomcncodec.h" +#include "mcecomredcodec.h" +#include "mcecomvideocodec.h" +#include "mcecomh263codec.h" +#include "mcecomstreambundle.h" +#include "mcecomavccodec.h" +#include "mcecomamrwbcodec.h" +#include "mceserial.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// TMceComFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComSession* TMceComFactory::CreateLC( MMceComSerializationContext& aSerCtx ) + { + return CMceComSession::NewLC( aSerCtx ); + } + + +// ----------------------------------------------------------------------------- +// TMceComFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceComStreamBundle* TMceComFactory::CreateBundleLC( CMceComSession& aSession, + MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + CMceStreamBundle::TMceStreamBundleType type = + static_cast( readStream.ReadUint8L() ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceComStreamBundle* bundle = CMceComStreamBundle::NewLC( type ); + bundle->InitializeL( aSession ); + bundle->InternalizeL( aSerCtx ); + + return bundle; + + } + +// ----------------------------------------------------------------------------- +// TMceComFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceMsgBase* TMceComFactory::CreateL( TMceItcDataType aType, + RReadStream& aReadStream ) + { + MMceComSerializationContext serCtx( aReadStream ); + CleanupClosePushL( serCtx ); + + CMceMsgBase* object = CreateL( aType, serCtx ); + + CleanupStack::PopAndDestroy();//serCtx + + return object; + + } + +// ----------------------------------------------------------------------------- +// TMceComFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceMsgBase* TMceComFactory::CreateL( TMceItcDataType aType, + MMceComSerializationContext& aSerCtx ) + { + + CMceMsgBase* message = NULL; + switch ( aType ) + { + case EMceItcMsgTypeSession: + { + message = new (ELeave) CMceMsgObject(); + break; + } + case EMceItcMsgTypeStream: + { + message = new (ELeave) CMceMsgObject(); + break; + } + case EMceItcMsgTypeCodec: + { + message = new (ELeave) CMceMsgObject(); + break; + } + case EMceItcMsgTypeSink: + { + message = new (ELeave) CMceMsgObject(); + break; + } + case EMceItcMsgTypeSource: + { + message = new (ELeave) CMceMsgObject(); + break; + } + case EMceItcMsgTypeSIPData: + { + message = new (ELeave) CMceMsgSIPData(); + break; + } + case EMceItcMsgTypeSIPReply: + { + message = new (ELeave) CMceMsgSIPReply(); + break; + } + case EMceItcMsgTypeSIPRequest: + { + message = new (ELeave) CMceMsgSIPRequest(); + break; + } + + case EMceItcMsgTypeEvent: + { + message = new (ELeave) CMceMsgSIPEvent(); + break; + } + case EMceItcMsgTypeTextArray: + { + message = new (ELeave) CMceMsgTextArray(); + break; + } + case EMceItcMsgTypeMessageArray: + { + message = new (ELeave) CMceMsgArray( *this ); + break; + } + default: + { + } + } + + if ( message ) + { + CleanupStack::PushL( message ); + message->PushL(); + message->DoDecodeL( aSerCtx ); + message->Pop(); + CleanupStack::Pop( message ); + } + + return message; + + } + +// ----------------------------------------------------------------------------- +// TMceComFactory::CreateLC +// ----------------------------------------------------------------------------- +// +void TMceComFactory::CreateLC( MMceComSerializable*& aObject, MMceComSerializationContext& aSerCtx ) + { + + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + TUint type = readStream.ReadUint8L(); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + switch ( type ) + { + case KMceAvSink: + { + aObject = CMceComAvSink::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !aObject ) + { + User::Leave( KErrNotSupported ); + } + + aObject->InternalizeL( aSerCtx ); + + } + + + +// ----------------------------------------------------------------------------- +// TMceComMediaStreamFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComMediaStream* TMceComMediaStreamFactory::CreateLC( TMceMediaType aType ) + { + + CMceComMediaStream* stream = NULL; + switch ( aType ) + { + case KMceAudio: + { + stream = CMceComAudioStream::NewLC(); + break; + } + case KMceVideo: + { + stream = CMceComVideoStream::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !stream ) + { + User::Leave( KErrNotSupported ); + } + + return stream; + + } + + + +// ----------------------------------------------------------------------------- +// TMceComMediaStreamFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComMediaStream* TMceComMediaStreamFactory::CreateLC( + MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + TMceMediaType type = static_cast( readStream.ReadUint8L() ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceComMediaStream* stream = CreateLC( type ); + stream->InternalizeL( aSerCtx ); + return stream; + + } + + +// ----------------------------------------------------------------------------- +// TMceComSourceFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComMediaSource* TMceComSourceFactory::CreateLC( TMceSourceType aType ) + { + CMceComMediaSource* source = NULL; + + switch ( aType ) + { + case KMceRTPSource: + { + source = CMceComRtpSource::NewLC(); + break; + } + case KMceMicSource: + { + source = CMceComMicSource::NewLC(); + break; + } + case KMceCameraSource: + { + source = CMceComCameraSource::NewLC(); + break; + } + case KMceFileSource: + { + source = CMceComFileSource::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !source ) + { + User::Leave( KErrNotSupported ); + } + + return source; + + } + + +// ----------------------------------------------------------------------------- +// TMceComSourceFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComMediaSource* TMceComSourceFactory::CreateLC( MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + TMceSourceType type = static_cast( readStream.ReadUint8L() ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceComMediaSource* source = CreateLC( type ); + source->InternalizeL( aSerCtx ); + return source; + + } + +// ----------------------------------------------------------------------------- +// TMceComSinkFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComMediaSink* TMceComSinkFactory::CreateLC( TMceSinkType aType ) + { + CMceComMediaSink* sink = NULL; + + switch ( aType ) + { + case KMceRTPSink: + { + sink = CMceComRtpSink::NewLC(); + break; + } + case KMceSpeakerSink: + { + sink = CMceComSpeakerSink::NewLC(); + break; + } + case KMceDisplaySink: + { + sink = CMceComDisplaySink::NewLC(); + break; + } + case KMceFileSink: + { + sink = CMceComFileSink::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !sink ) + { + User::Leave( KErrNotSupported ); + } + + return sink; + + } + +// ----------------------------------------------------------------------------- +// TMceComSinkFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComMediaSink* TMceComSinkFactory::CreateLC( MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + TMceSinkType type = static_cast( readStream.ReadUint8L() ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceComMediaSink* sink = CreateLC( type ); + sink->InternalizeL( aSerCtx ); + return sink; + + } + +// ----------------------------------------------------------------------------- +// TMceComAudioCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComAudioCodec* TMceComAudioCodecFactory::CreateLC( const TBuf8 aSdpName ) + { + CMceComAudioCodec* codec = CreateCodecLC( aSdpName ); + __ASSERT_ALWAYS( codec, User::Leave( KErrNotSupported ) ); + + return codec; + + } + +// ----------------------------------------------------------------------------- +// TMceComAudioCodecFactory::CreateCodecLC +// ----------------------------------------------------------------------------- +// +CMceComAudioCodec* TMceComAudioCodecFactory::CreateCodecLC( const TBuf8 aSdpName ) + { + CMceComAudioCodec* codec = NULL; + + if ( !aSdpName.CompareF(KMceSDPNameAMR) ) + { + codec = CMceComAMRCodec::NewLC( aSdpName ); + } + else if ( !aSdpName.CompareF(KMceSDPNamePCMU) || + !aSdpName.CompareF(KMceSDPNamePCMA) ) + { + codec = CMceComG711Codec::NewLC( aSdpName ); + } + else if ( !aSdpName.CompareF(KMceSDPNameG729) ) + { + codec = CMceComG729Codec::NewLC( aSdpName ); + } + else if ( !aSdpName.CompareF(KMceSDPNameiLBC) ) + { + codec = CMceComiLBCCodec::NewLC( aSdpName ); + } + else if ( !aSdpName.CompareF(KMceSDPNameDtmf) ) + { + codec = CMceComDtmfCodec::NewLC( aSdpName ); + } + else if ( !aSdpName.CompareF(KMceSDPNameRed) ) + { + codec = CMceComRedCodec::NewLC( aSdpName ); + } + else if ( !aSdpName.CompareF(KMceSDPNameCn) ) + { + codec = CMceComCnCodec::NewLC( aSdpName ); + } + + else if ( !aSdpName.CompareF(KMceSDPNameAMRWB) ) + { + codec = CMceComAMRWbCodec::NewLC( aSdpName ); + } + + else + { + codec = NULL; + } + + return codec; + + } + +// ----------------------------------------------------------------------------- +// TMceComAudioCodecFactory::CreateCodecLC +// ----------------------------------------------------------------------------- +// +CMceComAudioCodec* TMceComAudioCodecFactory::CreateCodecLC( TUint aPayload ) + { + CMceComAudioCodec* codec = NULL; + + switch( aPayload ) + { + case KMcePCMUPayloadType: + { + codec = CMceComG711Codec::NewLC( KMceSDPNamePCMU() ); + break; + } + case KMcePCMAPayloadType: + { + codec = CMceComG711Codec::NewLC( KMceSDPNamePCMA() ); + break; + } + case KMceDefaultG729PayloadType: + { + codec = CMceComG729Codec::NewLC( KMceSDPNameG729() ); + break; + } + case KMceDefaultCnPayloadType: + case KMceDefaultCnPayloadType2: + { + codec = CMceComCnCodec::NewLC( KMceSDPNameCn() ); + break; + } + default: + { + //NOP + break; + } + } + + if ( codec ) + { + codec->iPayloadType = aPayload; + } + + return codec; + + } + + + +// ----------------------------------------------------------------------------- +// TMceComAudioCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComAudioCodec* TMceComAudioCodecFactory::CreateLC( MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + TBuf8 sdpName; + MceSerial::DecodeL( sdpName, readStream ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceComAudioCodec* codec = CreateLC( sdpName ); + codec->InternalizeL( aSerCtx ); + return codec; + + } + + +// ----------------------------------------------------------------------------- +// TMceComVideoCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComVideoCodec* TMceComVideoCodecFactory::CreateLC( const TBuf8 aSdpName ) + { + CMceComVideoCodec* codec = CreateCodecLC( aSdpName ); + __ASSERT_ALWAYS( codec, User::Leave( KErrNotSupported ) ); + + return codec; + } + + +// ----------------------------------------------------------------------------- +// TMceComVideoCodecFactory::CreateCodecLC +// ----------------------------------------------------------------------------- +// + +CMceComVideoCodec* TMceComVideoCodecFactory::CreateCodecLC( const TBuf8 aSdpName ) + + { + CMceComVideoCodec* codec = NULL; + + if ( aSdpName.CompareF(KMceSDPNameH263) == 0 + || aSdpName.CompareF(KMceSDPNameH2632000) == 0 + || aSdpName.CompareF(KMceSDPNameH2631998) == 0 ) + { + codec = CMceComH263Codec::NewLC( aSdpName ); + } + else if ( aSdpName.CompareF( KMceSDPNameH264 ) == 0 ) + { + codec = CMceComAvcCodec::NewLC( aSdpName ); + } + else + { + codec = NULL; + } + + return codec; + } + +// ----------------------------------------------------------------------------- +// TMceComVideoCodecFactory::CreateCodecLC +// ----------------------------------------------------------------------------- +// +CMceComVideoCodec* TMceComVideoCodecFactory::CreateCodecLC( TUint /*aPayload*/ ) + { + CMceComVideoCodec* codec = NULL; + return codec; + + } + + +// ----------------------------------------------------------------------------- +// TMceComVideoCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceComVideoCodec* TMceComVideoCodecFactory::CreateLC( MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + TBuf8 sdpName; + MceSerial::DecodeL( sdpName, readStream ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceComVideoCodec* codec = CreateLC( sdpName ); + codec->InternalizeL( aSerCtx ); + return codec; + + }