diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mcefactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mcefactory.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,600 @@ +/* +* Copyright (c) 2008 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 "mceinsession.h" +#include "mceoutsession.h" +#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 "mceamrcodec.h" +#include "mceamrwbcodec.h" +#include "mceg711codec.h" +#include "mceg729codec.h" +#include "mceilbccodec.h" +#include "mcedtmfcodec.h" +#include "mcecncodec.h" +#include "mceredcodec.h" +#include "mceh263codec.h" +#include "mcefactory.h" +#include "mceserial.h" +#include "mcedefs.h" +#include "mcevideocodec.h" +#include "mcestreambundle.h" +#include "mceavsink.h" +#include "mceavccodec.h" + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// TMceFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceSession* TMceFactory::CreateLC( CMceComSession::TType aType ) + { + CMceSession* session = NULL; + switch ( aType ) + { + case CMceComSession::EInSession: + { + session = CMceInSession::NewL(); + CleanupStack::PushL( session ); + break; + } + case CMceComSession::EOutSession: + { + session = CMceOutSession::NewL(); + CleanupStack::PushL( session ); + break; + } + default: + { + break; + } + } + + if ( !session ) + { + User::Leave( KErrNotSupported ); + } + + return session; + } + +// ----------------------------------------------------------------------------- +// TMceFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceSession* TMceFactory::CreateLC( MMceComSerializationContext& aSerCtx ) + { + RReadStream& readStream = aSerCtx.ReadStream(); + + MStreamBuf* streamBuf = readStream.Source(); + TStreamPos pos = streamBuf->TellL( MStreamBuf::ERead ); + CMceComSession::TType type = + static_cast( readStream.ReadUint8L() ); + streamBuf->SeekL( MStreamBuf::ERead, pos ); + + CMceSession* session = CreateLC( type ); + session->InternalizeL( aSerCtx ); + return session; + } + + +// ----------------------------------------------------------------------------- +// TMceFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceMsgBase* TMceFactory::CreateL( TMceItcDataType aType, + RReadStream& aReadStream ) + { + MMceComSerializationContext serCtx( aReadStream ); + CleanupClosePushL( serCtx ); + + CMceMsgBase* object = CreateL( aType, serCtx ); + + CleanupStack::PopAndDestroy();//serCtx + + return object; + + } + + +// ----------------------------------------------------------------------------- +// TMceFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceMsgBase* TMceFactory::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; + + } + +// ----------------------------------------------------------------------------- +// TMceFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceStreamBundle* TMceFactory::CreateBundleLC( CMceSession& 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 ); + + CMceStreamBundle* bundle = CMceStreamBundle::NewLC( type ); + bundle->InitializeL( aSession ); + bundle->InternalizeL( aSerCtx ); + + return bundle; + + } + + +// ----------------------------------------------------------------------------- +// TMceMediaStreamFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceMediaStream* TMceMediaStreamFactory::CreateLC( TMceMediaType aType ) + { + + CMceMediaStream* stream = NULL; + switch ( aType ) + { + case KMceAudio: + { + stream = CMceAudioStream::NewLC(); + break; + } + case KMceVideo: + { + stream = CMceVideoStream::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !stream ) + { + User::Leave( KErrNotSupported ); + } + + return stream; + + } + + +// ----------------------------------------------------------------------------- +// TMceMediaStreamFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceMediaStream* TMceMediaStreamFactory::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 ); + + CMceMediaStream* stream = CreateLC( type ); + stream->InternalizeL( aSerCtx ); + return stream; + + } + + + + +// ----------------------------------------------------------------------------- +// TMceSourceFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceMediaSource* TMceSourceFactory::CreateLC( TMceSourceType aType ) + { + CMceMediaSource* source = NULL; + + switch ( aType ) + { + case KMceRTPSource: + { + source = CMceRtpSource::NewLC(); + break; + } + case KMceMicSource: + { + source = CMceMicSource::NewLC(); + break; + } + case KMceCameraSource: + { + source = CMceCameraSource::NewLC(); + break; + } + case KMceFileSource: + { + source = CMceFileSource::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !source ) + { + User::Leave( KErrNotSupported ); + } + + return source; + + } + + +// ----------------------------------------------------------------------------- +// TMceSourceFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceMediaSource* TMceSourceFactory::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 ); + + CMceMediaSource* source = CreateLC( type ); + source->InternalizeL( aSerCtx ); + return source; + + } + +// ----------------------------------------------------------------------------- +// TMceSinkFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceMediaSink* TMceSinkFactory::CreateLC( TMceSinkType aType ) + { + CMceMediaSink* sink = NULL; + switch ( aType ) + { + case KMceRTPSink: + { + sink = CMceRtpSink::NewLC(); + break; + } + case KMceSpeakerSink: + { + sink = CMceSpeakerSink::NewLC(); + break; + } + case KMceDisplaySink: + { + sink = CMceDisplaySink::NewLC(); + break; + } + case KMceFileSink: + { + sink = CMceFileSink::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !sink ) + { + User::Leave( KErrNotSupported ); + } + + return sink; + + } + +// ----------------------------------------------------------------------------- +// TMceSinkFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceMediaSink* TMceSinkFactory::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 ); + + CMceMediaSink* sink = CreateLC( type ); + sink->InternalizeL( aSerCtx ); + return sink; + + } + +// ----------------------------------------------------------------------------- +// TMceSinkFactory::CreateLC +// ----------------------------------------------------------------------------- +// +void TMceSinkFactory::CreateLC( MMceComSerializable*& aSink, 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 ); + + switch ( type ) + { + case KMceAvSink: + { + aSink = CMceAvSink::NewLC(); + break; + } + default: + { + break; + } + } + + if ( !aSink ) + { + User::Leave( KErrNotSupported ); + } + + aSink->InternalizeL( aSerCtx ); + + } + + + +// ----------------------------------------------------------------------------- +// TMceAudioCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceAudioCodec* TMceAudioCodecFactory::CreateLC( TBuf8 aSdpName ) + { + CMceAudioCodec* codec = CreateL( aSdpName ); + CleanupStack::PushL( codec ); + return codec; + } + +// ----------------------------------------------------------------------------- +// TMceAudioCodecFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceAudioCodec* TMceAudioCodecFactory::CreateL( TBuf8 aSdpName ) + { + CMceAudioCodec* codec = NULL; + if( !aSdpName.CompareF( KMceSDPNameAMR ) ) + { + codec = CMceAmrCodec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNameAMRWB ) ) + { + codec = CMceAmrWbCodec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNamePCMU ) || + !aSdpName.CompareF( KMceSDPNamePCMA ) ) + { + codec = CMceG711Codec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNameG729 ) ) + { + codec = CMceG729Codec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNameiLBC ) ) + { + codec = CMceiLBCCodec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNameDtmf ) ) + { + codec = CMceDtmfCodec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNameCn ) ) + { + codec = CMceCnCodec::NewL( aSdpName ); + } + else if ( !aSdpName.CompareF( KMceSDPNameRed ) ) + { + codec = CMceRedCodec::NewL( aSdpName ); + } + else + { + User::Leave( KErrNotSupported ); + } + return codec; + } + +// ----------------------------------------------------------------------------- +// TMceAudioCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceAudioCodec* TMceAudioCodecFactory::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 ); + + CMceAudioCodec* codec = CreateL( sdpName ); + CleanupStack::PushL( codec ); + codec->InternalizeL( aSerCtx ); + return codec; + } + + +// ----------------------------------------------------------------------------- +// TMceVideoCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceVideoCodec* TMceVideoCodecFactory::CreateLC( TBuf8 aSdpName ) + { + CMceVideoCodec* codec = CreateL( aSdpName ); + CleanupStack::PushL( codec ); + return codec; + } + +// ----------------------------------------------------------------------------- +// TMceVideoCodecFactory::CreateL +// ----------------------------------------------------------------------------- +// +CMceVideoCodec* TMceVideoCodecFactory::CreateL( TBuf8 aSdpName ) + { + CMceVideoCodec* codec = NULL; + + if( aSdpName.CompareF(KMceSDPNameH263) == 0 || + aSdpName.CompareF(KMceSDPNameH2632000) == 0 || + aSdpName.CompareF(KMceSDPNameH2631998) == 0) + { + codec = CMceH263Codec::NewL( aSdpName ); + } + else if ( aSdpName.CompareF(KMceSDPNameH264) == 0 ) + { + codec = CMceAvcCodec::NewL( aSdpName ); + } + else + { + User::Leave( KErrNotSupported ); + } + return codec; + + } + +// ----------------------------------------------------------------------------- +// TMceVideoCodecFactory::CreateLC +// ----------------------------------------------------------------------------- +// +CMceVideoCodec* TMceVideoCodecFactory::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 ); + + CMceVideoCodec* codec = CreateL( sdpName ); + CleanupStack::PushL( codec ); + codec->InternalizeL( aSerCtx ); + return codec; + } +