mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp
changeset 25 6f7ceef7b1d1
parent 21 2ed61feeead6
child 48 a493a607b5bf
--- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp	Fri May 28 19:26:28 2010 -0500
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp	Fri Jun 11 19:59:23 2010 -0500
@@ -123,6 +123,8 @@
 	delete iDataSourceAdapter;
 	delete iWait;
 	delete iBlockSetPos;
+	delete iBlockPrime;
+      
 	iSharedBuffers.ResetAndDestroy();
 	iSharedBuffers.Close();
     DP0(_L("CAdvancedAudioPlayController::~CAdvancedAudioPlayController end"));
@@ -679,7 +681,13 @@
             iBlockSetPos->AsyncStop();
             }
         }
-
+    if(iBlockPrime)
+       {
+       if(iBlockPrime->IsStarted())
+       	   {
+            iBlockPrime->AsyncStop();
+           }
+       }
     iRequestState = EPaused;
     TRAP(err, DoPauseL(ETrue)); // this is a preemption pause
 	// In case of pre-emption we should only Pause ... but not Stop.
@@ -1631,7 +1639,11 @@
             iBlockSetPos->AsyncStop();
             }
         }
-   
+    if(iBlockPrime)
+        {
+        if(iBlockPrime->IsStarted())
+         iBlockPrime->AsyncStop();
+        }
     iPlayingForDuration = EFalse;
     iBlockDuration = EFalse;
     iPlayingForPauseSeek = EFalse;
@@ -1720,11 +1732,17 @@
 		case EInitializing:
             if (position != 0)
     	   		{ // if we are priming, we will already be ready to play from 0.
-				DP2(_L("CAdvancedAudioPlayController::SetPositionL, saving pos iReadHeader[%d] iState[%d]"),iReadHeader,iState);
-                iInitPosition = position;
+				     DP2(_L("CAdvancedAudioPlayController::SetPositionL, saving pos iReadHeader[%d] iState[%d]"),iReadHeader,iState);
+             iInitPosition = position;
        			}
-			DP0(_L("CAdvancedAudioPlayController::SetPositionL, can ignore"));
-			break;
+			  DP0(_L("CAdvancedAudioPlayController::SetPositionL, can ignore"));
+			  DP0(_L("CAdvancedAudioController::PrimeL() blocking"));
+        iBlockPrime= new (ELeave) CActiveSchedulerWait();
+        iBlockPrime->Start();
+        DP0(_L("CAdvancedAudioController::PrimeL() continuing"));
+        delete iBlockPrime;
+        iBlockPrime= NULL;
+			
 		case EInitialized:
 		case EPaused:
 		    iSavedSetPosition = position;
@@ -1899,6 +1917,14 @@
 				        return;
 				        }
 					iState = EInitialized;
+					if(iBlockPrime)
+					    {
+					    if(iBlockPrime->IsStarted())
+					    	{
+					      iBlockPrime->AsyncStop();
+					      }
+					    }
+					
 					// when playwindow is active for a non-seekable source during loop play
 					// we must seek to the playwindow start position and then start the playback
 					if (iPlayWindowStartPosition > 0) // do we need additional checks as loop play / non-seekable source ??