--- a/devsound/a3fdevsound/src/devsoundadaptor/cdevaudio.cpp Wed Mar 31 23:56:23 2010 +0300
+++ b/devsound/a3fdevsound/src/devsoundadaptor/cdevaudio.cpp Wed Apr 14 17:32:53 2010 +0300
@@ -349,7 +349,8 @@
if(iActiveState != EDevSoundAdaptorCreated_Uninitialised &&
iActiveState != EDevSoundAdaptorInitialised_Initialised &&
- iActiveState != EDevSoundAdaptorInitialised_Idle)
+ iActiveState != EDevSoundAdaptorInitialised_Idle &&
+ iActiveState != EDevSoundAdaptorUnitialised_Uninitialised )
{
DP0_RET(KErrNotReady, "%d");
}
@@ -366,8 +367,11 @@
err = iAudioStream->Unload();
if(err == KErrNone)
{
+ err = CommitAudioContext();
+ }
+ if(err == KErrNone)
+ {
iActiveState = EDevSoundAdaptorUnloading;
- err = iAudioContext->Commit();
}
}
else
@@ -377,6 +381,15 @@
DP0_RET(err, "%d");
}
+ // Redo partial initialization after pre-emption clash event in
+ // EDevSoundAdaptorRemovingProcessingUnits state
+ if (iActiveState == EDevSoundAdaptorUnitialised_Uninitialised &&
+ iPreviousState == EDevSoundAdaptorRemovingProcessingUnits)
+ {
+ err = iCurrentAudioControl->RemoveProcessingUnits();
+ DP0_RET(err, "%d");
+ }
+
// Delete pUnits if already created
if (iAudioSource)
{
@@ -486,6 +499,15 @@
{
DP0_RET(KErrNotReady, "%d");
}
+
+ // Redo partial cancelling of initialization after pre-emption clash event in
+ // EDevSoundAdaptorRemovingProcessingUnits state.
+ if (iActiveState == EDevSoundAdaptorUnitialised_Uninitialised &&
+ iPreviousState == EDevSoundAdaptorRemovingProcessingUnits)
+ {
+ err = iCurrentAudioControl->RemoveProcessingUnits();
+ DP0_RET(err, "%d");
+ }
err = iCurrentAudioControl->Uninitialize();
@@ -574,6 +596,40 @@
DP0_RET(iActiveState, "%d");
}
+// -----------------------------------------------------------------------------
+// CDevAudio::ActiveState
+// -----------------------------------------------------------------------------
+//
+TDevSoundAdaptorState CDevAudio::PreviousState() const
+ {
+ DP_CONTEXT(CDevAudio::PreviousState *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+ DP0_RET(iPreviousState, "%d");
+ }
+
+// -----------------------------------------------------------------------------
+// CDevAudio::SetActiveState
+// -----------------------------------------------------------------------------
+//
+void CDevAudio::SetActiveState(TDevSoundAdaptorState aAdaptorState)
+ {
+ DP_CONTEXT(CDevAudio::SetActiveState *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+ iActiveState = aAdaptorState;
+ DP_OUT();
+ }
+
+// -----------------------------------------------------------------------------
+// CDevAudio::SetPreviousState
+// -----------------------------------------------------------------------------
+//
+void CDevAudio::SetPreviousState(TDevSoundAdaptorState aAdaptorState)
+ {
+ DP_CONTEXT(CDevAudio::SetPreviousState *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+ iPreviousState = aAdaptorState;
+ DP_OUT();
+ }
// -----------------------------------------------------------------------------
// CDevAudio::SetDevSoundVolume
@@ -911,6 +967,34 @@
DP_OUT();
}
+TInt CDevAudio::CommitAudioContext()
+ {
+ DP_CONTEXT(CDevAudio::CommitAudioContext *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+
+ //If we are in mid state then Panic as DevSound server-side session (CMMFDevSoundSession) is not blocking properly
+ __ASSERT_DEBUG(!IsMidState(iActiveState), Panic(EValidStateBeforeCommit));
+
+ TInt err = KErrNone;
+ iPreviousState = iActiveState;
+ err = iAudioContext->Commit();
+
+ DP0_RET(err,"%d");
+ }
+
+TBool CDevAudio::IsMidState(TDevSoundAdaptorState aAdaptorState)
+ {
+ DP_CONTEXT(CDevAudio::IsMidState *CD1*, CtxDevSound, DPLOCAL);
+ DP_IN();
+ if (aAdaptorState == EDevSoundAdaptorRemovingProcessingUnits || aAdaptorState == EDevSoundAdaptorUninitialising ||
+ aAdaptorState == EDevSoundAdaptorInitialising || aAdaptorState == EDevSoundAdaptorLoading ||
+ aAdaptorState == EDevSoundAdaptorUnloading || aAdaptorState == EDevSoundAdaptorStopping ||
+ aAdaptorState == EDevSoundAdaptorActivating || aAdaptorState == EDevSoundAdaptorPausing)
+ {
+ DP0_RET(ETrue,"%d");
+ }
+ DP0_RET(EFalse,"%d");
+ }
// -----------------------------------------------------------------------------
// From MA3FDevSoundAutoPauseResume
@@ -979,5 +1063,9 @@
DP_OUT();
}
+void CDevAudio::Panic(TMMFDevAudioPanicCodes aCode)
+ {
+ User::Panic(KMMFDevAudioPanicCategory, aCode);
+ }
// End of file