summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2012-10-04 00:56:40 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-10-04 16:34:11 -0700
commit95069fefbdf54d87a624c2ac73727fce1c38545e (patch)
tree2e3c71350fb4521e87f846bdd3fc6a45e57f01bf /services
parent4865c526e681366481b0ab242ffa1ead57bb02cc (diff)
downloadframeworks_av-95069fefbdf54d87a624c2ac73727fce1c38545e.zip
frameworks_av-95069fefbdf54d87a624c2ac73727fce1c38545e.tar.gz
frameworks_av-95069fefbdf54d87a624c2ac73727fce1c38545e.tar.bz2
Camera2: Use the triggerAfWithAuto quirk
When this quirk is set, and a scene mode is enabled, do AF calls with AF mode AUTO instead of whatever the scene more override AF mode is. Bug: 7159577 Change-Id: I3ea6b8386abc0968047fc9bba3a35c5db5bdcfd3
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/Camera2Client.cpp20
-rw-r--r--services/camera/libcameraservice/camera2/Parameters.cpp3
-rw-r--r--services/camera/libcameraservice/camera2/Parameters.h3
3 files changed, 26 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/Camera2Client.cpp b/services/camera/libcameraservice/Camera2Client.cpp
index 9bcaef1..ed4567e 100644
--- a/services/camera/libcameraservice/Camera2Client.cpp
+++ b/services/camera/libcameraservice/Camera2Client.cpp
@@ -956,6 +956,16 @@ status_t Camera2Client::autoFocus() {
return INVALID_OPERATION;
}
+ if (l.mParameters.quirks.triggerAfWithAuto &&
+ l.mParameters.sceneMode != ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED &&
+ l.mParameters.focusMode != Parameters::FOCUS_MODE_AUTO) {
+ ALOGV("%s: Quirk: Switching from focusMode %d to AUTO",
+ __FUNCTION__, l.mParameters.focusMode);
+ l.mParameters.shadowFocusMode = l.mParameters.focusMode;
+ l.mParameters.focusMode = Parameters::FOCUS_MODE_AUTO;
+ updateRequests(l.mParameters);
+ }
+
l.mParameters.currentAfTriggerId = ++l.mParameters.afTriggerCounter;
triggerId = l.mParameters.currentAfTriggerId;
}
@@ -977,6 +987,16 @@ status_t Camera2Client::cancelAutoFocus() {
{
SharedParameters::Lock l(mParameters);
triggerId = ++l.mParameters.afTriggerCounter;
+
+ // When using triggerAfWithAuto quirk, may need to reset focus mode to
+ // the real state at this point.
+ if (l.mParameters.shadowFocusMode != Parameters::FOCUS_MODE_INVALID) {
+ ALOGV("%s: Quirk: Restoring focus mode to %d", __FUNCTION__,
+ l.mParameters.shadowFocusMode);
+ l.mParameters.focusMode = l.mParameters.shadowFocusMode;
+ l.mParameters.shadowFocusMode = Parameters::FOCUS_MODE_INVALID;
+ updateRequests(l.mParameters);
+ }
}
syncWithDevice();
diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp
index 7740df2..b05cdaf 100644
--- a/services/camera/libcameraservice/camera2/Parameters.cpp
+++ b/services/camera/libcameraservice/camera2/Parameters.cpp
@@ -607,6 +607,7 @@ status_t Parameters::initialize(const CameraMetadata *info) {
params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES,
supportedFocusModes);
}
+ shadowFocusMode = FOCUS_MODE_INVALID;
camera_metadata_ro_entry_t max3aRegions =
staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1);
@@ -1363,6 +1364,8 @@ status_t Parameters::set(const String8& paramString) {
}
}
}
+ // Always reset shadow focus mode to avoid reverting settings
+ shadowFocusMode = FOCUS_MODE_INVALID;
// Update in case of override
newParams.set(CameraParameters::KEY_FOCUS_MODE,
focusModeEnumToString(validatedParams.focusMode));
diff --git a/services/camera/libcameraservice/camera2/Parameters.h b/services/camera/libcameraservice/camera2/Parameters.h
index a85500f..53ddf99 100644
--- a/services/camera/libcameraservice/camera2/Parameters.h
+++ b/services/camera/libcameraservice/camera2/Parameters.h
@@ -88,6 +88,9 @@ struct Parameters {
FOCUS_MODE_INVALID = -1
} focusMode;
+ // For use with triggerAfWithAuto quirk
+ focusMode_t shadowFocusMode;
+
struct Area {
int left, top, right, bottom;
int weight;