diff -r 1cbb0d5bf7f2 -r b6dbf97aba93 mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp --- a/mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp Thu Sep 16 18:39:58 2010 +0100 +++ b/mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp Thu Sep 16 18:57:38 2010 +0100 @@ -490,7 +490,14 @@ if (!iSourceBuffer->BufferSize() || iSourceBuffer->LastBuffer() || (((iState == EConverting) || (iState == EPlaying)) && (iPlayWindowEndPosition < iCachedSourceDuration) && ( InputPosition() >= iPlayWindowEndPosition ))) { - iNumberOfTimesPlayed++; + //When it resumes in silence , position of the buffer is in end so we need to skip the increament. + if(!iPauseCalledInsilence) + { + iNumberOfTimesPlayed++; + }else + { + iPauseCalledInsilence=EFalse; + } if ((iNumberOfTimesPlayed <= iNumberOfTimesToRepeat) || iNumberOfTimesToRepeat == KMdaRepeatForever) { iSourceBuffer->SetLastBuffer(EFalse); @@ -899,6 +906,10 @@ // should be updated, MDataSource position should be changed iStartPosition = Position(); iIsUsingResumeSupport = ETrue; + if(iRepeatTrailingSilenceTimer->IsActive()) + { + iPauseCalledInsilence=ETrue; + } // If we wait for the sink to complete play, then we do not proceed with supplying the buffers to the sink // In this case we need to reset the buffers so that InitializeSinkL won't attempt bringing in new ones if (iTransferState == EWaitSink) @@ -964,6 +975,7 @@ iGetTimePlayedSupported = devSound.IsGetTimePlayedSupported(); iIsResumeSupported = devSound.IsResumeSupported(); iIsUsingResumeSupport = EFalse; + iPauseCalledInsilence = EFalse; } } @@ -990,7 +1002,11 @@ if(iPauseCalled) //sink and source will have been stopped, and we will not have been re-primed { - iDataSink->SinkPrimeL(); //propagate change down to sink + //When pause is called silence,we need to send the buffer while resume so icansendbuffer should enabled + if(!iPauseCalledInsilence) + { + iDataSink->SinkPrimeL(); //propagate change down to sink + } iPauseCalled = EFalse; }