201025
authorhgs
Thu, 24 Jun 2010 14:41:11 +0300
changeset 30 4c9e1ec7a69e
parent 26 bcc434605a01
child 32 f2ed1fc4c163
201025
multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp
multimediacommscontroller/mmccshared/inc/mccinternaldef.h
multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp
multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp
multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h
multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp
multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h
multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp
--- a/multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp	Thu Jun 24 14:41:11 2010 +0300
@@ -289,7 +289,7 @@
 TReal CMccFileVideo::VideoFrameRateL()
 	{
     TReal modFrameRate;
-    MccConversionUtility::FrameRateSanitize( modFrameRate, iFrameRate, iType );
+    MccConversionUtility::FrameRateSanitizeL( modFrameRate, iFrameRate, iType );
     return modFrameRate;
 	}
  
--- a/multimediacommscontroller/mmccshared/inc/mccinternaldef.h	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommscontroller/mmccshared/inc/mccinternaldef.h	Thu Jun 24 14:41:11 2010 +0300
@@ -789,7 +789,7 @@
     	return output;
         }
     
-    static void FrameRateSanitize( 
+    static void FrameRateSanitizeL( 
         TReal& aSanitizedFrameRate, TReal aOrigFrameRate, TUint32 aVideoType )
         {
         // Round to have zero decimals for clearness sake
--- a/multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp	Thu Jun 24 14:41:11 2010 +0300
@@ -668,7 +668,7 @@
                 setting.iVideoFourCC = TFourCC( KMccFourCCIdAVC );
                 }
 
-            MccConversionUtility::FrameRateSanitize( 
+            MccConversionUtility::FrameRateSanitizeL( 
                 setting.iVideoFrameRate, frameRate, videoType );
             
             setting.iVideoFrameSize.iWidth = videoWidth;
--- a/multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp	Thu Jun 24 14:41:11 2010 +0300
@@ -288,6 +288,15 @@
                                                
             UpdateCodecInformationL( iCodecInfo );
             }
+        else if ( iDatasink->DataSinkType() == KMccRtpSinkUid )
+       	    {
+            CMccRtpDataSink* dataSink = 
+                static_cast<CMccRtpDataSink*>( iDatasink );
+            
+            // For updating keep alive parameters
+            TMccCodecInfoBuffer infoBuffer( iCodecInfo );     
+            dataSink->ConfigureL( infoBuffer );
+       	    }
         }
     else if ( CurrentCodecState() == EStateCodecLoaded ||
               CurrentCodecState() == EStateCodecLoadedAndUpdating )
--- a/multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h	Thu Jun 24 14:41:11 2010 +0300
@@ -263,7 +263,13 @@
 	* Comfort noise
 	*/
 	TBool iComfortNoiseEnabled;
-	
+
+
+private:    // Friend classes
+
+    #ifdef TEST_EUNIT
+        friend class UT_CMceComAudioCodec;
+    #endif
     };
 
 
--- a/multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp	Thu Jun 24 14:41:11 2010 +0300
@@ -522,6 +522,10 @@
             	
            	aStream.Data().BoundStreamL().RemoveCodecL( boundCnCodec );
             }
+			
+		// update keep alive payload type and data
+	    aMccCodec.SetKeepAlivePT( 120 );
+        aMccCodec.SetKeepAliveData( KNullDesC8 );
     	}
     	
     CleanupStack::PopAndDestroy( searchCodec );
--- a/multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h	Thu Jun 24 14:41:11 2010 +0300
@@ -22,6 +22,7 @@
 #define CMCESTATEOFFERING_H
 
 #include "mcestate.h"
+#include "mcesrv.h"
 
 /**
 *  Represents MCE server state Offering
@@ -154,7 +155,12 @@
     void ExitSIPEventL( TMceStateTransitionEvent& aEvent );
     
     void EntryAnswerToOfferDecodedL( TMceStateTransitionEvent& aEvent );
+	
+private:
+	TInt iLastResponse;
+	TBool iReadyToSendACK;
 
+    MCESRV_UT_DEFINITIONS;
 	};
 
 #endif
--- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp	Fri Jun 11 11:20:25 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp	Thu Jun 24 14:41:11 2010 +0300
@@ -43,7 +43,9 @@
 // -----------------------------------------------------------------------------
 //
 CMceStateOffering::CMceStateOffering ()
-    : CMceState( KMceStateOffering )
+    : CMceState( KMceStateOffering ),
+      iLastResponse ( 0 ),
+	  iReadyToSendACK ( ETrue )
 	{
 	}
 
@@ -264,6 +266,7 @@
     TInt status = KErrNone;
     CMceSipSession& session = aEvent.Session();
     CSIPClientTransaction& response = session.Response();
+    iLastResponse = MceSip::ResponseCode( response );
      
     session.Extensions().UpdateL( response );
     session.Actions().CheckContactIsSecureL( response );
@@ -439,14 +442,35 @@
     TInt status = KErrNone;
 	CMceSipSession& session = aEvent.Session();
     CMceSipSession::TSubState subState = session.SubState();
+    TInt currentResponse = MceSip::ResponseCode( session.Response() );
 	
+	// If media handling is ongoing while 200OK arrives with certain SDP content
+    // don't send ACK thus the UAS will retransmit 200OK untile pervious meida handling
+    // finish.
+ 
+    if ( KMceSipRinging == iLastResponse &&
+    	 KMceSipOK == currentResponse && 
+    	 MceSip::HasContent( session.Response() ) )
+    	{
+		if ( session.WaitingMediaCallback() )
+    		{
+			iReadyToSendACK = EFalse;
+			MCESRV_DEBUG("Waiting media callback, do not send ACK for this 200OK")
+    		return;
+    		}
+    	else
+    		{
+			iReadyToSendACK = ETrue;
+			MCESRV_DEBUG("Ready to send ACK")
+    		}
+    	}
     //send ACK
     session.Actions().SendACKL( session.Response() );
 	session.Actions().CheckContactIsSecureL( session.Response() );
     session.ActiveBody().AnswerType() = KMceNegotiationAnswerTypeFinal;
     
-	// Handle the answer only if the media processing is not
-	// already ongoing
+    iLastResponse = currentResponse;
+
 	if ( !session.WaitingMediaCallback() )
 	    {
 	    if ( MceSip::HasContent( session.Response() ) )
@@ -767,6 +791,11 @@
 //
 void CMceStateOffering::ExitL( TMceStateTransitionEvent& aEvent )
 	{
+	if ( !iReadyToSendACK )
+		{
+		MCESRV_DEBUG("Not ready, don't change any state");
+		return;
+		}
 	
 	if ( IsExtensionRequestEvent( aEvent ))
 		{