mmlibs/mmfw/src/server/BaseClasses/mmfdatapath2.cpp
changeset 58 b6dbf97aba93
parent 0 40261b775718
--- 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;
 			}