mmsharing/mmshengine/src/musengtwowaysession.cpp
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
child 35 6c57ef9392d2
--- a/mmsharing/mmshengine/src/musengtwowaysession.cpp	Tue Aug 31 15:12:07 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,530 +0,0 @@
-/*
-* 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: 
-*
-*/
-
-
-// USER
-#include "musengtwowaysession.h"
-#include "musunittesting.h"
-#include "musengmceutils.h"
-#include "musenglogger.h"
-#include "musengremotevideoplayer.h"
-#include "musenglivevideoplayer.h"
-
-// SYSTEM
-#include <lcsessionobserver.h>
-#include <mcemanager.h>
-#include <mcecamerasource.h>
-#include <mcevideostream.h>
-#include <mcertpsink.h>
-#include <mcedisplaysink.h>
-#include <mcesession.h>
-#include <mcertpsource.h>
-#include <mcevideocodec.h>
-
-const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold
-// Using following value increases treshold buffer to 1 second from 
-// default 100 ms
-const TInt KMusEngJitterBufferTreshold = 50;
-
-const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds
-// 6 seconds keepalive timer, needs to be more than receiving timeout
-const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; 
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMusEngTwoWaySession* CMusEngTwoWaySession::NewL()
-    {
-    CMusEngTwoWaySession* self = new( ELeave )CMusEngTwoWaySession();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMusEngTwoWaySession::~CMusEngTwoWaySession()
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::~CMusEngTwoWaySession()" )
-    
-    delete iRemoteVideoPlayer; 
-    
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::~CMusEngTwoWaySession()" )
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::EnableDisplayL( TBool aEnable )
-    {
-    MUS_LOG1( "mus: [ENGINE]     -> CMusEngTwoWaySession::EnableDisplayL() %d", 
-              aEnable )
-
-    __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
-
-    CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession );
-    if ( display )
-        {
-        MusEngMceUtils::DoEnableDisplayL( *display, aEnable );
-        }     
-    CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue );
-    MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable );     
-        
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::EnableDisplayL()")
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//        
-void CMusEngTwoWaySession::SetOrientationL( TDisplayOrientation aOrientation )
-    {
-    MUS_LOG1( "mus: [ENGINE]  -> CMusEngTwoWaySession::SetOrientationL() %d", 
-              aOrientation )
-              
-    __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
-    
-    CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession );            
-    CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue );
-
-    CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? 
-         CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree;
-     
-    vfDisplay->SetRotationL( rotation );
-    if ( display )
-        {
-        display->SetRotationL( rotation );
-        }
-
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::SetOrientationL()" )
-    }
-
-// -----------------------------------------------------------------------------
-// From MLcFileControl
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::EnableLcFileL( TBool /*aEnable*/ )
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::EnableLcFileL" )
-
-    User::Leave( KErrNotSupported );
-
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::EnableLcFileL" ) 
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::SetRectsL( 
-    const TRect& aRemoteRect,
-    const TRect& aLocalRect )
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::SetRectsL()" )  
-     
-    iLocalRect = aLocalRect;
-    iRect = aRemoteRect;
-    RectChangedL();
-    
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::SetRectsL()" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::SetSecondaryRectL( const TRect& aSecondaryRect )
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::SetSecondaryRectL()" )
-    
-    iLocalRect = aSecondaryRect;
-    RectChangedL();
-
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::SetSecondaryRectL()" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-TRect CMusEngTwoWaySession::SecondaryRect() const
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::SecondaryRect()" )
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::SecondaryRect()" )
-    return iLocalRect;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CMusEngTwoWaySession::IsDisplayEnabled()
-    {
-    TBool enabled( EFalse );
-    if ( iSession )
-        {
-        CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession );
-        if ( !display )
-            {
-            display = MusEngMceUtils::GetVfDisplay( *iSession );
-            }
-        if ( display )
-           {
-           enabled = display->IsEnabled();
-           }
-        }
-    return enabled;
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//
-TBool CMusEngTwoWaySession::IsDisplayActive()
-    {
-    return ( IsDisplayEnabled() && iReceiving );
-    }
-
-// -----------------------------------------------------------------------------
-// From MLcSession
-// -----------------------------------------------------------------------------
-//
-MLcVideoPlayer* CMusEngTwoWaySession::RemoteVideoPlayer()
-    {
-    return iRemoteVideoPlayer;
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::RectChangedL()
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::RectChangedL()" )
-
-    // If session is not yet created, do nothing
-    if ( iSession && iSession->State() != CMceSession::ETerminated )
-        {
-        TRect remoteRect( Rect() );
-        MUS_LOG2( "mus: [ENGINE]  remote tl.ix=%d tl.iy=%d", 
-                  remoteRect.iTl.iX, remoteRect.iTl.iY )
-        MUS_LOG2( "mus: [ENGINE]  remote br.ix=%d br.iy=%d", 
-                  remoteRect.iBr.iX, remoteRect.iBr.iY )    
-        MUS_LOG2( "mus: [ENGINE]  local tl.ix=%d tl.iy=%d", 
-                  iLocalRect.iTl.iX, iLocalRect.iTl.iY )
-        MUS_LOG2( "mus: [ENGINE]  local br.ix=%d br.iy=%d", 
-                  iLocalRect.iBr.iX, iLocalRect.iBr.iY )           
-
-        if ( remoteRect != iSetRemoteRect )
-            {
-            CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession );
-            if ( display )
-                {
-                MUS_LOG( "mus: [ENGINE]  set remote rect" )
-                display->SetDisplayRectL( remoteRect );
-                iSetRemoteRect = remoteRect;
-                }
-            }
-
-        if ( iLocalRect != iSetLocalRect )
-            {
-            MUS_LOG( "mus: [ENGINE]  set local rect" )
-            CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue );
-            vfDisplay->SetDisplayRectL( iLocalRect );
-            iSetLocalRect = iLocalRect;
-            }
-        }
-
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::RectChangedL()" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::CompleteSessionStructureL( 
-                                            CMceStreamBundle& /*aLocalBundle*/ )
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::CompleteSessionStructureL()" )
-
-    __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
-
-    iCameraHandler.SetSession( iSession );
-    
-    // Create outgoing video stream
-    CMceVideoStream* videoStream = CMceVideoStream::NewLC();
-    
-    CMceRtpSink* rtpsink = CMceRtpSink::NewLC();
-    videoStream->AddSinkL( rtpsink );
-    CleanupStack::Pop( rtpsink );
-
-    CMceCameraSource* camera = CMceCameraSource::NewLC( *iManager );
-    camera->DisableL(); // Start session in pause mode.
-    
-    iCameraHandler.InitializeL( *camera );
-
-    videoStream->SetSourceL( camera );
-    CleanupStack::Pop( camera );
-    
-    // Create incoming video stream
-    CMceVideoStream* videoInStream = CMceVideoStream::NewL();
-    CleanupStack::PushL( videoInStream );
-       
-    MusEngMceUtils::AddDisplayL( *videoInStream, *iManager, Rect() );
-
-    CMceRtpSource* rtpSource = CMceRtpSource::NewLC( KMusEngJitterBufferLength,
-                                                     KMusEngJitterBufferTreshold,
-                                                     KMusEngTwoWayReceivingActivityTimeout );
-    videoInStream->SetSourceL( rtpSource );
-    CleanupStack::Pop( rtpSource ); 
-
-    videoStream->BindL( videoInStream ); 
-    CleanupStack::Pop( videoInStream );
-
-    iSession->AddStreamL( videoStream );
-    CleanupStack::Pop( videoStream );    
-
-    iLiveVideoPlayer->SetMceSession( iSession );
-    iRemoteVideoPlayer->SetMceSession( iSession );
-    
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::CompleteSessionStructureL()" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::CreateMceSessionStructureL( 
-    TBool /*aForceSdpBandwidth*/ ) 
-    {
-    //Force SDP bandwidth attributes to be included in the INVITE
-    CMusEngMceOutSession::CreateMceSessionStructureL( ETrue );
-    }
-
-// -----------------------------------------------------------------------------
-// Sets video codec attributes
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec,
-                                              TMceSourceType aSourceType )
-    {
-    MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::AdjustVideoCodecL()" )
-    
-    CMusEngLiveSession::AdjustVideoCodecL( aVideoCodec, aSourceType );
-    
-    aVideoCodec.SetKeepAliveTimerL( KMusEngTwoWayRtpKeepAliveTimer );
-    if ( aVideoCodec.SdpName() == KMceSDPNameH263() ||
-         aVideoCodec.SdpName() == KMceSDPNameH2632000() )
-        {
-        aVideoCodec.SetKeepAlivePayloadTypeL( KMusEngKeepAlivePayloadTypeVideoH263 );   
-        }
-    else if ( aVideoCodec.SdpName() == KMceSDPNameH264() )
-        {
-        aVideoCodec.SetKeepAlivePayloadTypeL( KMusEngKeepAlivePayloadTypeVideoAvc );                          
-        }
-    else
-        {
-        // NOP
-        }
-    
-    aVideoCodec.SetKeepAliveDataL( KNullDesC8() );
-    
-    MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::AdjustVideoCodecL()" )
-    }
-	
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::AddDisplayL( CMceMediaStream& aStream )
-    {
-    // Vf display is disabled at creation phase if doing bg startup
-    MusEngMceUtils::AddDisplayL( aStream, 
-                                 *iManager,
-                                 iLocalRect,
-                                 IsBackgroundStartup() );
-    }
- 
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::StreamStateChanged( CMceMediaStream& aStream )
-    {
-    MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::StreamStateChanged()" )
-    if ( !iSession )
-        {
-        return;
-        }
-    
-    if ( aStream.Type() == KMceVideo &&
-         aStream.Source() &&
-         aStream.Source()->Type() == KMceRTPSource )
-        {
-        if ( aStream.State() == CMceMediaStream::EStreaming )
-            {
-            ReceivingStarted();
-            }
-        else if ( aStream.State() == CMceMediaStream::EBuffering )
-            {
-            MUS_LOG( "mus: [ENGINE] CMusEngTwoWaySession buffered" )
-            
-            iBuffered = ETrue;
-            }
-        else
-            {
-            // NOP
-            }
-        }
-    
-    CMusEngMceSession::StreamStateChanged( aStream );
-
-    MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::StreamStateChanged()" )
-    }
-
-// -----------------------------------------------------------------------------
-// Once inactivity timeout occurs, state change is notified and receiving
-// and buffering statuses are cleared. That is safe to do as once receiving
-// again continues for real, buffering and streaming events will occur always 
-// sequentially. If buffering status would not be cleared, some unwanted
-// sreaming events would be passed towards client when it disables/enables
-// display sink of remote stream while inactivity timer has expired.
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::InactivityTimeout( CMceMediaStream& aStream,
-                                              CMceRtpSource& /*aSource*/ )
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::InactivityTimeout()" )
-    
-    if ( aStream.Type() == KMceVideo && iReceiving )
-        {
-        iReceiving = EFalse;
-        iBuffered = EFalse;
-        if ( iRemoteVideoPlayer )
-            {
-            InformObserverAboutPlayerStateChange( iRemoteVideoPlayer );
-            }
-        }
-    
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::InactivityTimeout()" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::HandleSessionStateChanged( 
-    CMceSession& aSession,
-    TInt aStatusCode,
-    const TDesC8& aReasonPhrase )
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::HandleSessionStateChanged" )
-    
-    MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase )
-    
-    TBool consumed( EFalse );
-    if ( iSession && 
-         iSession == &aSession && 
-         aSession.State() == CMceSession::EEstablished )
-        {   
-        CMceVideoStream* stream = NULL;
-        CMceVideoStream* streamout = NULL;
-        TRAPD( err, stream = MusEngMceUtils::GetVideoInStreamL( *iSession ) )
-        if ( err == KErrNone && stream && stream->IsEnabled() )
-            {
-            TRAP( err, streamout = MusEngMceUtils::GetVideoOutStreamL( *iSession ) )
-            if ( err != KErrNone || !streamout || !streamout->IsEnabled() )
-                {
-                MUS_LOG( "mus: [ENGINE] sendrecv downgraded to recvonly, terminate!" )
-                consumed = ETrue;
-                InformObserverAboutSessionFailure( err );
-                }
-            }
-        }
-    
-    if ( !consumed )
-        {
-        CMusEngLiveSession::HandleSessionStateChanged( aSession,
-                                                       aStatusCode, 
-                                                       aReasonPhrase );
-        }
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::HandleSessionStateChanged" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMusEngTwoWaySession::CMusEngTwoWaySession() 
-    : CMusEngLiveSession()
-    {
-    iSetRemoteRect = TRect( 
-        KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit );
-    iSetLocalRect = TRect(
-        KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit );
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::ConstructL()
-    {
-    MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::ConstructL()" )
-    
-    CMusEngLiveSession::ConstructL();
-    
-    iRemoteVideoPlayer = CMusEngRemoteVideoPlayer::NewL( *this, *this ); 
-
-    MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::ConstructL()" )
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CMusEngTwoWaySession::ReceivingStarted()
-    {
-    if ( iSession && iBuffered )
-        {
-        MUS_LOG( "mus: [ENGINE]  -> CMusEngTwoWaySession::ReceivingStarted()" )
-        
-        TInt err = MusEngMceUtils::EnableInactivityTimer( 
-            *iSession, KMusEngTwoWayReceivingActivityTimeout );
-        
-        if ( err != KErrNone )
-            {
-            MUS_LOG1("mus: [ENGINE] ReceivingStarted failed %d", err)
-            InformObserverAboutSessionFailure( err );   
-            }
-        else
-            {
-            iReceiving = ETrue;
-            InformObserverAboutPlayerStateChange( iRemoteVideoPlayer );
-            InformUiProviderAboutReceivingStart();
-            }
-        
-        MUS_LOG( "mus: [ENGINE]  <- CMusEngTwoWaySession::ReceivingStarted()" )
-        }
-    }
-
-// End of file