mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp
--- a/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp Thu Aug 19 10:26:11 2010 +0300
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayController.cpp Tue Aug 31 15:43:02 2010 +0300
@@ -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 ??