Camera3: Set first the focus mode then the focus value
If the value is set first and then the mode the value will not be apply
while doing manual focus.
Bug: 12132757
Bug: 14140910
Change-Id: Ic96ae0eae06dd187460fbb4441a1c2ac3b26936d
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index d07718b..613fc5d 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -106,6 +106,7 @@
};
const QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::FOCUS_MODES_MAP[] = {
+ { ANDROID_CONTROL_AF_MODE_OFF, CAM_FOCUS_MODE_OFF },
{ ANDROID_CONTROL_AF_MODE_OFF, CAM_FOCUS_MODE_FIXED },
{ ANDROID_CONTROL_AF_MODE_AUTO, CAM_FOCUS_MODE_AUTO },
{ ANDROID_CONTROL_AF_MODE_MACRO, CAM_FOCUS_MODE_MACRO },
@@ -4521,29 +4522,24 @@
sizeof(whiteLevel), &whiteLevel);
}
- float focalDistance = -1.0;
- if (frame_settings.exists(ANDROID_LENS_FOCUS_DISTANCE)) {
- focalDistance = frame_settings.find(ANDROID_LENS_FOCUS_DISTANCE).data.f[0];
- rc = AddSetMetaEntryToBatch(hal_metadata,
- CAM_INTF_META_LENS_FOCUS_DISTANCE,
- sizeof(focalDistance), &focalDistance);
- }
-
if (frame_settings.exists(ANDROID_CONTROL_AF_MODE)) {
uint8_t fwk_focusMode =
frame_settings.find(ANDROID_CONTROL_AF_MODE).data.u8[0];
uint8_t focusMode;
- if (focalDistance == 0.0 && fwk_focusMode == ANDROID_CONTROL_AF_MODE_OFF) {
- focusMode = CAM_FOCUS_MODE_INFINITY;
- } else{
- focusMode = lookupHalName(FOCUS_MODES_MAP,
+ focusMode = lookupHalName(FOCUS_MODES_MAP,
sizeof(FOCUS_MODES_MAP),
fwk_focusMode);
- }
rc = AddSetMetaEntryToBatch(hal_metadata, CAM_INTF_PARM_FOCUS_MODE,
sizeof(focusMode), &focusMode);
}
+ if (frame_settings.exists(ANDROID_LENS_FOCUS_DISTANCE)) {
+ float focalDistance = frame_settings.find(ANDROID_LENS_FOCUS_DISTANCE).data.f[0];
+ rc = AddSetMetaEntryToBatch(hal_metadata,
+ CAM_INTF_META_LENS_FOCUS_DISTANCE,
+ sizeof(focalDistance), &focalDistance);
+ }
+
if (frame_settings.exists(ANDROID_CONTROL_AE_ANTIBANDING_MODE)) {
int32_t antibandingMode =
frame_settings.find(ANDROID_CONTROL_AE_ANTIBANDING_MODE).data.i32[0];
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index d500bba..e7d5834 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -410,6 +410,7 @@
/* Auto focus mode */
typedef enum {
+ CAM_FOCUS_MODE_OFF,
CAM_FOCUS_MODE_AUTO,
CAM_FOCUS_MODE_INFINITY,
CAM_FOCUS_MODE_MACRO,