--- 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 ))
{