--- a/camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp Fri Feb 19 22:36:31 2010 +0200
+++ b/camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp Fri Mar 12 15:41:04 2010 +0200
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -856,6 +856,15 @@
HandleVideoEvent( ECamCameraEventVideoInit, aError );
// DelayCallback( ECamCameraEventVideoInit, aError, 500000 );
#else
+ if( aError &&
+ ( iIveCancel || ( !iIveSequenceActive && iIveRecoveryOngoing ) ) )
+ // Return if error and recovering process has been started,
+ // but this video prepare complete is not part of recovery
+ // i.e. iIveSequenceActive is not active yet.
+ {
+ PRINT1( _L("Camera => CCamCameraController::McaeoVideoPrepareComplete - Ignore err %d"), aError );
+ return;
+ }
HandleVideoEvent( ECamCameraEventVideoInit, aError );
#endif // CAMERAAPP_CAE_ERR_SIMULATION
@@ -3896,6 +3905,7 @@
PRINT1( _L("Camera => CCamCameraController::EndSequence, status:%d"), aStatus );
iIveRecoveryOngoing = EFalse;
+ iIveSequenceActive = EFalse;
#ifdef CAMERAAPP_CAE_FIX
if( ECamModeChangeInactive != iModeChange )
{
@@ -4099,6 +4109,11 @@
PRINT( _L("Camera => CCamCameraController::HandleReserveGainEvent - return, recovery in progress"));
return;
}
+ if( iIveRecoveryOngoing && !iIveSequenceActive )
+ {
+ PRINT( _L("Camera => CCamCameraController::HandleReserveGainEvent - first recovering sequence command executed"));
+ iIveSequenceActive = ETrue;
+ }
// We should be blocking new request at the moment.
__ASSERT_DEBUG( iInfo.iBusy, Panic( ECamCameraControllerCorrupt ) );
CAMERAAPP_PERF_CONTROLLER_STOP( ECamRequestReserve );
@@ -6606,6 +6621,7 @@
else
{
PRINT( _L("Camera <> CCamCameraController::DoIveRecovery - Start recovering from beginning") )
+ iIveSequenceActive = EFalse;
if( IsFlagOn( iInfo.iBusy, ECamBusySequence|ECamBusySetting ) )
{
if( iActive &&
@@ -6613,13 +6629,15 @@
{
iActive->Cancel();
}
- EndSequence( KErrNone );
+ iIveCancel = ETrue;
+ EndSequence( KErrNone ); // Clears iIveRecoveryOngoing and iIveSequenceActive
}
NotifyObservers( KErrNone, ECamCameraEventIveRecover,
ECamCameraEventClassBasicControl );
}
iIveRecoveryCount--;
iIveRecoveryOngoing = ETrue;
+ iIveCancel = EFalse;
}
PRINT1( _L("Camera <= CCamCameraController::DoIveRecovery iIveRecoveryCount%d"),iIveRecoveryCount )
}
@@ -6630,7 +6648,10 @@
//
TBool CCamCameraController::IsWaitingIveResources()
{
- return iIdle && iIdle->IsActive();
+ // ETrue if recovery is started, but not completed.
+ // iIveRecoveryOngoing is set to false when last recovery command is executed
+ return (iIdle && iIdle->IsActive()) ||
+ iIveCancel || iIveRecoveryOngoing || iIveSequenceActive;
}