# HG changeset patch # User hgs # Date 1277379671 -10800 # Node ID 4c9e1ec7a69e9292196c8964d526c8d136e8f758 # Parent bcc434605a016e1e0fa263a8257147a411f47040 201025 diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.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; } diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommscontroller/mmccshared/inc/mccinternaldef.h --- 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 diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp --- 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; diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp --- 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( iDatasink ); + + // For updating keep alive parameters + TMccCodecInfoBuffer infoBuffer( iCodecInfo ); + dataSink->ConfigureL( infoBuffer ); + } } else if ( CurrentCodecState() == EStateCodecLoaded || CurrentCodecState() == EStateCodecLoadedAndUpdating ) diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h --- 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 }; diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp --- 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 ); diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h --- 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 diff -r bcc434605a01 -r 4c9e1ec7a69e multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp --- 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 )) {