diff -r 2ed61feeead6 -r 6f7ceef7b1d1 mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp --- 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 ??