--- a/camerauis/cameraxui/cxengine/src/cxeautofocuscontrolsymbian.cpp Thu Jul 15 01:44:30 2010 +0300
+++ b/camerauis/cameraxui/cxengine/src/cxeautofocuscontrolsymbian.cpp Thu Jul 15 01:46:05 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-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"
@@ -91,25 +91,28 @@
*/
CxeError::Id CxeAutoFocusControlSymbian::start(bool soundEnabled)
{
- CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <> state: %d, sound enabled: %d",
- state(), soundEnabled ) );
- mSoundEnabled = soundEnabled;
- int err = KErrNone;
-
CX_ASSERT_ALWAYS(mAdvancedSettings);
- if ( state() != CxeAutoFocusControl::InProgress && state() != CxeAutoFocusControl::Canceling ) {
- CX_DEBUG(("CxeAutoFocusControlSymbian::start() calling SetAutoFocusType"));
- mCancelled = false;
- setState(InProgress);
- setFocusRange(mAFRange);
- setFocusType(CCamera::CCameraAdvancedSettings::EAutoFocusTypeSingle);
- } else { // AF was started earlier, can't start until it completes
- err = KErrInUse;
+ CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <> state: %d, sound enabled: %d",
+ state(), soundEnabled ) );
+
+ mSoundEnabled = soundEnabled;
+ CxeError::Id error = CxeError::None;
+
+ if (!isFixedFocusMode(mode())) {
+ if ( state() != CxeAutoFocusControl::InProgress && state() != CxeAutoFocusControl::Canceling ) {
+ CX_DEBUG(("CxeAutoFocusControlSymbian::start() calling SetAutoFocusType"));
+ mCancelled = false;
+ setState(InProgress);
+ setFocusRange(mAFRange);
+ setFocusType(CCamera::CCameraAdvancedSettings::EAutoFocusTypeSingle);
+ } else { // AF was started earlier, can't start until it completes
+ error = CxeError::InUse;
+ }
}
- CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <= err : %d", err ) );
- return CxeErrorHandlingSymbian::map(err);
+ CX_DEBUG( ("CxeAutoFocusControlSymbian::start() <= error: %d", error ) );
+ return error;
}
@@ -123,7 +126,7 @@
CX_DEBUG_ASSERT(mAdvancedSettings);
- if (!mCancelled) {
+ if (!mCancelled && !isFixedFocusMode(mode())) {
if (state() == CxeAutoFocusControl::InProgress) {
// Need to stop current AF first. Wait for AF event to proceed.
setState(CxeAutoFocusControl::Canceling);
@@ -171,6 +174,14 @@
return mAfMode;
}
+/**
+* Is the given mode a fixed focus mode?
+*/
+bool CxeAutoFocusControlSymbian::isFixedFocusMode(CxeAutoFocusControl::Mode mode) const
+{
+ return (mode == CxeAutoFocusControl::Hyperfocal
+ || mode == CxeAutoFocusControl::Infinity);
+}
/*
* To check if Autofocus is supported
@@ -389,7 +400,15 @@
// we are interested only in the AF range.
if(scene.contains(CxeSettingIds::FOCAL_RANGE) && supported() ) {
+
setMode(static_cast<CxeAutoFocusControl::Mode>(scene[CxeSettingIds::FOCAL_RANGE].toInt()));
+
+ if (isFixedFocusMode(mode())) {
+ // Focus now if a fixed focus mode is used.
+ setFocusType(CCamera::CCameraAdvancedSettings::EAutoFocusTypeSingle);
+ // Set state to InProgress, so we know to set it ready in ECAM callback.
+ setState(CxeAutoFocusControl::InProgress);
+ }
}
CX_DEBUG_EXIT_FUNCTION();