diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediastream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediastream.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,401 @@ +/* +* 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 "mcemediastream.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcestreamobserver.h" +#include "mcemediasource.h" +#include "mcemediasink.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::~CMceMediaStream +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaStream::~CMceMediaStream() + { + delete iMediaSDPLines; + + if ( iSource ) + { + DeleteSource(); + } + + if ( iLinkOwner ) + { + delete iLinkedStream; + } + + while( iSinks.Count() > 0 ) + { + DeleteSink( 0 ); + } + + iSinks.Reset(); + iSinks.Close(); + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaStream::TState CMceMediaStream::State() const + { + return iState; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C TMceMediaType CMceMediaStream::Type() const + { + return iType; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::SetMediaAttributeLinesL( + CDesC8Array* aMediaSDPLines ) + { + delete iMediaSDPLines; + iMediaSDPLines = aMediaSDPLines; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C MDesC8Array* CMceMediaStream::MediaAttributeLinesL() + { + if ( iMediaSDPLines ) + { + CDesC8Array* array = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( array ); + for ( TInt i = 0; i < iMediaSDPLines->Count(); ++i ) + { + array->AppendL( iMediaSDPLines->MdcaPoint(i) ); + } + CleanupStack::Pop( array ); + return array; + } + + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::SetStartMediaPort +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::SetLocalMediaPortL( TUint aLocalMediaPort ) + { + iLocalMediaPort = aLocalMediaPort; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::StartMediaPort +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceMediaStream::LocalMediaPort() const + { + return iLocalMediaPort; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Session +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSession* CMceMediaStream::Session() const + { + return iSession; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::EnableL() + { + iIsEnabled = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DisableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::DisableL() + { + iIsEnabled = EFalse; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::IsEnabled +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceMediaStream::IsEnabled() const + { + return iIsEnabled; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::SetSourceL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::SetSourceL( CMceMediaSource* aSource ) + { + if ( aSource ) + { + aSource->ReferenceCount()++; + } + + if ( iSource ) + { + DeleteSource(); + } + iSource = aSource; + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::AddSinkL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::AddSinkL( CMceMediaSink* aSink ) + { + __ASSERT_ALWAYS( aSink, User::Leave( KErrArgument ) ); + iSinks.AppendL( aSink ); + aSink->ReferenceCount()++; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Source +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaSource* CMceMediaStream::Source() const + { + return iSource; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Sinks +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& CMceMediaStream::Sinks() const + { + return iSinks; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::RemoveSinkL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::RemoveSinkL( CMceMediaSink& aSink ) + { + for ( TInt i = 0; i < iSinks.Count(); i++ ) + { + if ( iSinks[i] == &aSink ) + { + DeleteSink( i ); + iSinks.Compress(); + return; + } + } + User::Leave( KErrNotFound ); + } + + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::BindL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::BindL( CMceMediaStream* aStream ) + { + + __ASSERT_ALWAYS( !(! iLinkOwner && + iLinkedStream ), + User::Leave( KErrArgument ) ); + + if ( aStream ) + { + iLinkOwner = ETrue; + aStream->DoBindL( this ); + DoBindL( aStream ); + } + else + { + iLinkOwner = EFalse; + delete iLinkedStream; + iLinkedStream = NULL; + } + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::BoundStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaStream& CMceMediaStream::BoundStreamL() const + { + __ASSERT_ALWAYS( iLinkedStream , User::Leave( KErrNotFound ) ); + + return *iLinkedStream; + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::BoundStream +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceMediaStream::BoundStream() const + { + return iLinkedStream != NULL; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Binder +// ----------------------------------------------------------------------------- +// +TBool CMceMediaStream::Binder() const + { + return iLinkOwner; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::InitializeL( CMceSession& aParent ) + { + iSession = &aParent; + + if ( Binder() && BoundStream() ) + { + iLinkedStream->InitializeL( aParent ); + } + + if ( iSource ) + { + iSource->InitializeL( *this ); + } + + for( TInt i = 0; i < iSinks.Count();i++) + { + iSinks[i]->InitializeL( *this ); + } + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::InitializeL( CMceManager* aManager ) + { + if ( Binder() && BoundStream() ) + { + iLinkedStream->InitializeL( aManager ); + } + + if ( iSource ) + { + iSource->InitializeL( aManager ); + } + + for( TInt i = 0; i < iSinks.Count();i++) + { + iSinks[i]->InitializeL( aManager ); + } + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::CMceMediaStream +// ----------------------------------------------------------------------------- +// +CMceMediaStream::CMceMediaStream() + :iLinkedStream( NULL ), + iSource( NULL ), + iLinkOwner( EFalse ), + iIsEnabled( ETrue ), + iState( CMceMediaStream::EUninitialized ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DeleteSink +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::DeleteSink( TInt aIndex ) + { + + iSinks[ aIndex ]->ReferenceCount()--; + if ( iSinks[ aIndex ]->ReferenceCount() == 0 ) + { + delete iSinks[ aIndex ]; + } + iSinks.Remove( aIndex ); + + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DeleteSource +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::DeleteSource() + { + iSource->ReferenceCount()--; + if ( iSource->ReferenceCount() == 0 ) + { + delete iSource; + } + iSource = NULL; + } + + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DoBindL +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::DoBindL( CMceMediaStream* aStream ) + { + if ( Session() ) + { + aStream->InitializeL( *Session() ); + } + delete iLinkedStream; + iLinkedStream = aStream; + }