multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp
branchrcs
changeset 49 64c62431ac08
parent 32 f2ed1fc4c163
--- a/multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp	Mon Aug 23 17:50:26 2010 +0300
+++ b/multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp	Mon Sep 06 17:32:13 2010 +0530
@@ -26,6 +26,7 @@
 #include "mcculdatapath.h"
 #include "mcccodecconfigurator.h"
 #include "mccrtpmanager.h"
+#include "mccmsrpmanager.h"
 #include "mccrtpdatasink.h"
 #include "mmccinterface.h"
 #include "mccsubcontrollerlogs.h"
@@ -81,6 +82,32 @@
     {
     iRtpMediaClock = &aClock;
     }
+    
+    
+// -----------------------------------------------------------------------------
+// CMccSymUlStream::CMccSymUlStream
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMccSymUlStream::CMccSymUlStream( 
+    TUint32 aMccStreamId, 
+    MAsyncEventHandler* aEventhandler, 
+    MMccResources* aMccResources,
+    CMccMsrpManager* aManager, 
+    TFourCC aFourCC,
+    TInt aStreamType, 
+    CMccRtpMediaClock& aClock ) : 
+    CMccSymStreamBase( aMccStreamId, 
+                       aEventhandler, 
+                       aMccResources, 
+                       aManager, 
+                       aStreamType ), 
+    iFormatEncode( NULL ), 
+    iFourCC( aFourCC )
+    {
+    iRtpMediaClock = &aClock;
+    }
 
 // -----------------------------------------------------------------------------
 // CMccSymUlStream::NewL
@@ -109,6 +136,34 @@
     return s;
     }
 
+
+// -----------------------------------------------------------------------------
+// CMccSymUlStream::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMccSymUlStream* CMccSymUlStream::NewLC( 
+    TUint32 aMccStreamId, 
+    MAsyncEventHandler* aEventhandler,
+    MMccResources* aMccResources,
+    CMccMsrpManager* aManager, 
+    TFourCC aFourCC,
+    TInt aStreamType,
+    CMccRtpMediaClock& aClock ) 
+    {
+    CMccSymUlStream* s = 
+            new ( ELeave ) CMccSymUlStream( aMccStreamId, 
+                                            aEventhandler, 
+                                            aMccResources,
+                                            aManager, 
+                                            aFourCC, 
+                                            aStreamType,
+                                            aClock );
+    CleanupStack::PushL( s );
+    s->ConstructL();
+    return s;
+    }
+
 // -----------------------------------------------------------------------------
 // CMccSymUlStream::ConstructL
 // Symbian 2nd phase constructor can leave.
@@ -388,10 +443,18 @@
 	
     TBool controlNetworkResources = SetStateL( EStatePrepared, aEndpointId );  
     
-    if ( controlNetworkResources && !LocalStream() )
+    if(this->iType == KMccMessageUplinkStream)
+        {
+        iMsrpmanager->CreateTransmitStreamL (*iDatasink, iCodecInfo);
+        }
+    else if ( controlNetworkResources && !LocalStream())
         {
         iRtpmanager->CreateTransmitStreamL( *iDatasink, iCodecInfo );
         }
+	else
+		{
+		//NOP
+		}
 
     LoadCodecL( iCodecInfo, KNullDesC8 );
         
@@ -415,7 +478,7 @@
 	
     TBool controlNetworkResources = SetStateL( EStateStreaming, aEndpointId );
     
-    if ( !LocalStream() )
+    if ( !LocalStream() && (this->iType !=KMccMessageUplinkStream))
         {
         if ( controlNetworkResources )
             {
@@ -445,11 +508,13 @@
 							  TBool aEnableRtcp )
     {
     __SUBCONTROLLER( "CMccSymUlStream::PauseL" )
-    
+        
     SetStateL( EStatePaused, aEndpointId );
-    
-    if ( !LocalStream() )
-        { 
+    if(this->iType != KMccMessageUplinkStream && !LocalStream())
+        {
+        __ASSERT_ALWAYS( iRtpmanager, User::Leave( KErrArgument ) );
+        __ASSERT_ALWAYS( iDatapath, User::Leave( KErrArgument ) );
+        
         User::LeaveIfError( iRtpmanager->SetRTCPSendReceive( aEnableRtcp ) );
         }
     
@@ -469,12 +534,16 @@
     __SUBCONTROLLER( "CMccSymUlStream::ResumeL" )
     
     SetStateL( EStateStreaming, aEndpointId );
-    
-    if ( !LocalStream() )
+    if (this->iType != KMccMessageUplinkStream &&  !LocalStream() )
         { 
+        __ASSERT_ALWAYS( iRtpmanager, User::Leave( KErrArgument ) );
+        __ASSERT_ALWAYS( iDatapath, User::Leave( KErrArgument ) );
         User::LeaveIfError( iRtpmanager->SetRTCPSendReceive( aEnableRtcp ) );
         }
-    
+    else
+        {
+        //NOP
+        }
     DoResumeL();
 
     InformStreamStateChange( KMccStreamResumed, aEndpointId );