# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1278416522 -10800 # Node ID 72290a6868df0d7f9fb02155489afd3caf2c351d # Parent fc48eff9c76cdc7feb431580f916600bd1b0efba Revision: 201025 Kit: 2010127 diff -r fc48eff9c76c -r 72290a6868df multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp --- a/multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp Tue Jul 06 14:42:02 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 fc48eff9c76c -r 72290a6868df multimediacommscontroller/mmccshared/inc/mccinternaldef.h --- a/multimediacommscontroller/mmccshared/inc/mccinternaldef.h Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommscontroller/mmccshared/inc/mccinternaldef.h Tue Jul 06 14:42:02 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 fc48eff9c76c -r 72290a6868df multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp --- a/multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp Tue Jul 06 14:42:02 2010 +0300 @@ -668,7 +668,7 @@ setting.iVideoFourCC = TFourCC( KMccFourCCIdAVC ); } - MccConversionUtility::FrameRateSanitize( + MccConversionUtility::FrameRateSanitizeL( setting.iVideoFrameRate, frameRate, videoType ); setting.iVideoFrameSize.iWidth = videoWidth; diff -r fc48eff9c76c -r 72290a6868df multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp --- a/multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommscontroller/mmccsubcontroller/src/mccsymulstream.cpp Tue Jul 06 14:42:02 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 fc48eff9c76c -r 72290a6868df multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h --- a/multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommsengine/mmceshared/inc/mcecomaudiocodec.h Tue Jul 06 14:42:02 2010 +0300 @@ -263,7 +263,13 @@ * Comfort noise */ TBool iComfortNoiseEnabled; - + + +private: // Friend classes + + #ifdef TEST_EUNIT + friend class UT_CMceComAudioCodec; + #endif }; diff -r fc48eff9c76c -r 72290a6868df multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp --- a/multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommsengine/mmceshared/src/mcecomaudiocodec.cpp Tue Jul 06 14:42:02 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 fc48eff9c76c -r 72290a6868df multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h --- a/multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcestateoffering.h Tue Jul 06 14:42:02 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 fc48eff9c76c -r 72290a6868df multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp Wed Jun 23 18:38:47 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp Tue Jul 06 14:42:02 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 )) {