diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmceshared/src/mcecomdisplaysink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmceshared/src/mcecomdisplaysink.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,435 @@ +/* +* Copyright (c) 2006 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 "mcedisplaysink.h" +#include "mcecomdisplaysink.h" +#include "mceevents.h" +#include "mcecomcodec.h" +#include "mcecommediastream.h" +#include "mcecomsession.h" +#include "mcecomavsink.h" + +#ifdef MCE_COMMON_SERVER_SIDE + +#include +#include "mcesdpsession.h" +#include "mcemediamanager.h" +#include "mcevideostream.h" +#include "mcecomvideocodec.h" + +#endif//MCE_COMMON_SERVER_SIDE + +// ============================ MEMBER FUNCTIONS =============================== + + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::NewL +// ----------------------------------------------------------------------------- +// +CMceComDisplaySink* CMceComDisplaySink::NewL() + { + CMceComDisplaySink* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::NewLC +// ----------------------------------------------------------------------------- +// +CMceComDisplaySink* CMceComDisplaySink::NewLC() + { + CMceComDisplaySink* self = new (ELeave) CMceComDisplaySink(); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::~CMceComDisplaySink +// ----------------------------------------------------------------------------- +// +CMceComDisplaySink::~CMceComDisplaySink() + { + + delete iSettings; + if ( iEndpointProxy ) + { + CMceComAvSink* endpointProxy = static_cast( iEndpointProxy ); + endpointProxy->RemoveProxyClient( *this ); + if ( endpointProxy->ReferenceCount() == 0 ) + { + delete endpointProxy; + } + iEndpointProxy = NULL; + } + + } + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::CMceComDisplaySink +// ----------------------------------------------------------------------------- +// +CMceComDisplaySink::CMceComDisplaySink() + : CMceComMediaSink( KMceDisplaySink ) + { + // Temporarily some default values + // TRect (0,83,352,378); + iDisplayIndex = 0; + iDisplayRectTlX = 0; + iDisplayRectTlY = 83; + iDisplayRectBrX = 352; + iDisplayRectBrY = 378; + iPriority = 0; + iIsViewFinder = EFalse; + iRotation = CMceDisplaySink::ENone; + iDisplaysAvailable = 0; + iInitialInfoRetrieved = EFalse; + + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::CloneL +// ----------------------------------------------------------------------------- +// +CMceComMediaSink* CMceComDisplaySink::CloneL() + { + CMceComDisplaySink* copy = new (ELeave) CMceComDisplaySink(); + Mem::Copy( copy, this, sizeof(CMceComDisplaySink) ); + copy->Zero(); + copy->iSettings = 0; + return copy; + + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::UsesEndpointProxy() +// ----------------------------------------------------------------------------- +// +TBool CMceComDisplaySink::UsesEndpointProxy() const + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::CreateEndpointProxyL() +// ----------------------------------------------------------------------------- +// +MMceComEndPointProxy* CMceComDisplaySink::CreateEndpointProxyL() const + { + return CMceComAvSink::NewL(); + } + + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::InternalizeFlatL +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::InternalizeFlatL( RReadStream& aReadStream ) + { + CMceComMediaSink::InternalizeFlatL( aReadStream ); + + iDisplayIndex = aReadStream.ReadInt32L(); + iDisplayRectTlX = aReadStream.ReadInt32L(); + iDisplayRectTlY = aReadStream.ReadInt32L(); + iDisplayRectBrX = aReadStream.ReadInt32L(); + iDisplayRectBrY = aReadStream.ReadInt32L(); + iPriority = aReadStream.ReadUint32L(); + iIsViewFinder = aReadStream.ReadInt32L(); + iRotation = static_cast ( aReadStream.ReadInt32L() ); + + iDisplaysAvailable = aReadStream.ReadInt32L(); + iInitialInfoRetrieved = static_cast( aReadStream.ReadUint8L() ); + + } + + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::ExternalizeFlatL +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::ExternalizeFlatL( RWriteStream& aWriteStream ) + { + CMceComMediaSink::ExternalizeFlatL( aWriteStream ); + + aWriteStream.WriteInt32L( iDisplayIndex ); + aWriteStream.WriteInt32L( iDisplayRectTlX ); + aWriteStream.WriteInt32L( iDisplayRectTlY ); + aWriteStream.WriteInt32L( iDisplayRectBrX ); + aWriteStream.WriteInt32L( iDisplayRectBrY ); + aWriteStream.WriteUint32L( iPriority ); + aWriteStream.WriteInt32L( iIsViewFinder ); + aWriteStream.WriteInt32L( iRotation ); + aWriteStream.WriteInt32L( iDisplaysAvailable ); + aWriteStream.WriteUint8L( iInitialInfoRetrieved ); + + } + + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::EventReceivedL +// ----------------------------------------------------------------------------- +// +TInt CMceComDisplaySink::EventReceivedL( TMceComEvent& aEvent ) + { + TInt status = CMceComMediaSink::EventReceivedL( aEvent ); + if ( status != KMceEventNotConsumed ) + { + return status; + } + + if ( aEvent.Id().IsSinkId() ) + { + status = aEvent.Handler().HandleL( *this, aEvent ); + } + else + { + status = KMceEventNotConsumed; + } + + return status; + + } + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::UpdateL +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::UpdateL( CMceComMediaSink& aUpdate ) + { + CMceComMediaSink::UpdateL( aUpdate ); + CMceComDisplaySink& update = static_cast( aUpdate ); + + iDisplayIndex = update.iDisplayIndex; + iDisplayRectTlX = update.iDisplayRectTlX; + iDisplayRectTlY = update.iDisplayRectTlY; + iDisplayRectBrX = update.iDisplayRectBrX; + iDisplayRectBrY = update.iDisplayRectBrY; + iPriority = update.iPriority; + iIsViewFinder = update.iIsViewFinder; + iDisplaysAvailable = update.iDisplaysAvailable; + iInitialInfoRetrieved = update.iDisplaysAvailable; + + } + + +#ifdef MCE_COMMON_SERVER_SIDE + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::MccType +// ----------------------------------------------------------------------------- +// +const TUid CMceComDisplaySink::MccType() + { + TUid id = KUidMccVideoSink; + + if ( EndpointProxy() ) + { + CMceComAvSink* endpointProxy = static_cast( EndpointProxy() ); + id = endpointProxy->MccType(); + } + return id; + + } + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::EnableL +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::EnableL( const CMceComCodec& aCodec ) + { + __ASSERT_ALWAYS( iIsViewFinder, User::Leave( KErrArgument ) ); + CMceMediaManager& manager = MediaStream()->Session()->SdpSession().Manager(); + + // Update iSettings + DoInitParamL( aCodec ); + + manager.EnableViewFinderL( *this, *iSettings ); + + } + +// ----------------------------------------------------------------------------- +// CMceComMediaSource::DisableL +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::DisableL() + { + __ASSERT_ALWAYS( iIsViewFinder, User::Leave( KErrArgument ) ); + CMceMediaManager& manager = MediaStream()->Session()->SdpSession().Manager(); + + manager.DisableViewFinderL( *this ); + + } + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::InitParamL +// ----------------------------------------------------------------------------- +// +const TDesC8& CMceComDisplaySink::InitParamL( const CMceComCodec& aCodec ) + { + delete iSettings; + iSettings = NULL; + + if ( EndpointProxy() ) + { + CMceComAvSink* endpointProxy = static_cast( EndpointProxy() ); + return endpointProxy->InitParamL( aCodec ); + } + else + { + DoInitParamL( aCodec ); + } + + return *iSettings; + + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::PrepareL +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::PrepareL() + { + if ( EndpointProxy() ) + { + CMceComAvSink* endpointProxy = static_cast( EndpointProxy() ); + endpointProxy->PrepareL(); + } + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::DoInitParamL +// ----------------------------------------------------------------------------- +// +const TDesC8& CMceComDisplaySink::DoInitParamL( const CMceComCodec& aCodec ) + { + delete iSettings; + iSettings = NULL; + + TMccVideoSinkSetting displaySetting; + TRect displayRect = DisplayRect(); + + CMceComDisplaySink::ToPointAndSize( displayRect, + displaySetting.iLocation, + displaySetting.iSize ); + displaySetting.iDeviceIndex = 0; + TMMFPrioritySettings priority; + priority.iPriority = aCodec.iPriority; + priority.iPref = TMdaPriorityPreference(aCodec.iPriorityPreference); + displaySetting.iPriority = priority; + + displaySetting.iVideoPayloadType = aCodec.iPayloadType; + displaySetting.iIAPId = MediaStream()->Session()->iIapId; + displaySetting.iWindowOrdinalPosition = 1; + displaySetting.iWindowOrdinalPriority = iPriority; + displaySetting.iRotation = EMccNone; + + if ( aCodec.Stream() && aCodec.Stream()->iType == KMceVideo ) + { + displaySetting.iVideoFrameRate = + reinterpret_cast( aCodec ).iReceiveFrameRate; + } + else + { + displaySetting.iVideoFrameRate = 0; + } + + TMccVideoSinkSettingBuf settings( displaySetting ); + + iSettings = settings.AllocL(); + + return *iSettings; + + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::DisplayRect +// ----------------------------------------------------------------------------- +// +TRect CMceComDisplaySink::DisplayRect() + { + return TRect( iDisplayRectTlX, + iDisplayRectTlY, + iDisplayRectBrX, + iDisplayRectBrY ); + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::SetDisplayRect +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::SetDisplayRect( const TRect& aRect ) + { + iDisplayRectTlX = aRect.iTl.iX; + iDisplayRectTlY = aRect.iTl.iY; + iDisplayRectBrX = aRect.iBr.iX; + iDisplayRectBrY = aRect.iBr.iY; + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::ToRect +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::ToRect( const TPoint& aPoint, const TSize& aSize, TRect& aRect ) + { + aRect = TRect( aPoint, aSize ); + } + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::ToPointAndSize +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::ToPointAndSize( const TRect& aRect, TPoint& aPoint, TSize& aSize ) + { + aPoint = TPoint( aRect.iTl.iX, aRect.iTl.iY ); + aSize = TSize( aRect.iBr.iX - aRect.iTl.iX, + aRect.iBr.iY - aRect.iTl.iY ); + + } + + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::SetViewFinder +// ----------------------------------------------------------------------------- +// +void CMceComDisplaySink::SetViewFinder( TBool aIsViewFinder ) + { + iIsViewFinder = aIsViewFinder; + } + +// ----------------------------------------------------------------------------- +// CMceComDisplaySink::MccParameterName +// ----------------------------------------------------------------------------- +// +TUint32 CMceComDisplaySink::MccParameterName() const + { + return iIsViewFinder ? KMccCamLocalVideo : KMccDisplayLocalVideo; + } + +#endif//MCE_COMMON_SERVER_SIDE +