QCamera2: HAL3: Add hybrid AE vendor tag
Add vendor tag to enable/disable hybrid AE.
Bug: 28347550
Change-Id: I4a90145e4052d4da541b0ee3bc2f016cd0d97ad1
diff --git a/QCamera2/HAL3/QCamera3HWI.cpp b/QCamera2/HAL3/QCamera3HWI.cpp
index 5a3f9f5..5d60bc9 100755
--- a/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/QCamera2/HAL3/QCamera3HWI.cpp
@@ -7596,6 +7596,12 @@
property_get("persist.camera.eis.enable", eis_prop, "0");
const uint8_t eis_prop_set = (uint8_t)atoi(eis_prop);
+ // Hybrid AE enable/disable
+ char hybrid_ae_prop[PROPERTY_VALUE_MAX];
+ memset(hybrid_ae_prop, 0, sizeof(hybrid_ae_prop));
+ property_get("persist.camera.hybrid_ae.enable", hybrid_ae_prop, "0");
+ const uint8_t hybrid_ae = (uint8_t)atoi(hybrid_ae_prop);
+
const bool facingBack = gCamCapability[mCameraId]->position == CAM_POSITION_BACK;
// This is a bit hacky. EIS is enabled only when the above setprop
// is set to non-zero value and on back camera (for 2015 Nexus).
@@ -7969,6 +7975,10 @@
int32_t mode = cds_mode;
settings.update(QCAMERA3_CDS_MODE, &mode, 1);
+
+ /* hybrid ae */
+ settings.update(NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE, &hybrid_ae, 1);
+
mDefaultMetadata[type] = settings.release();
return mDefaultMetadata[type];
@@ -9135,6 +9145,17 @@
}
}
+ // Hybrid AE
+ if (frame_settings.exists(NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE)) {
+ uint8_t *hybrid_ae = (uint8_t *)
+ frame_settings.find(NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE).data.u8;
+
+ if (ADD_SET_PARAM_ENTRY_TO_BATCH(hal_metadata,
+ CAM_INTF_META_HYBRID_AE, *hybrid_ae)) {
+ rc = BAD_VALUE;
+ }
+ }
+
return rc;
}
diff --git a/QCamera2/HAL3/QCamera3VendorTags.cpp b/QCamera2/HAL3/QCamera3VendorTags.cpp
index e7b4843..c3433da 100644
--- a/QCamera2/HAL3/QCamera3VendorTags.cpp
+++ b/QCamera2/HAL3/QCamera3VendorTags.cpp
@@ -51,6 +51,7 @@
QCAMERA3_TEMPORAL_DENOISE_END,
QCAMERA3_AV_TIMER_END,
QCAMERA3_SENSOR_META_DATA_END,
+ NEXUS_EXPERIMENTAL_2016_END,
} ;
typedef struct vendor_tag_info {
@@ -68,6 +69,7 @@
"org.codeaurora.qcamera3.temporal_denoise",
"org.codeaurora.qcamera3.av_timer",
"org.codeaurora.qcamera3.sensor_meta_data",
+ "com.google.nexus.experimental2016"
};
vendor_tag_info_t qcamera3_privatedata[QCAMERA3_PRIVATEDATA_END - QCAMERA3_PRIVATEDATA_START] = {
@@ -112,6 +114,11 @@
{"dynamic_black_level_pattern", TYPE_FLOAT }
};
+vendor_tag_info_t nexus_experimental_2016[NEXUS_EXPERIMENTAL_2016_END -
+ NEXUS_EXPERIMENTAL_2016_START] = {
+ {"3a.hybrid_3a_enable", TYPE_BYTE }
+};
+
vendor_tag_info_t *qcamera3_tag_info[QCAMERA3_SECTIONS_END -
VENDOR_SECTION] = {
qcamera3_privatedata,
@@ -122,6 +129,7 @@
qcamera3_temporal_denoise,
qcamera3_av_timer,
qcamera3_sensor_meta_data,
+ nexus_experimental_2016,
};
uint32_t qcamera3_all_tags[] = {
@@ -152,6 +160,9 @@
//QCAMERA3_SENSOR_META_DATA
(uint32_t)QCAMERA3_SENSOR_DYNAMIC_BLACK_LEVEL_PATTERN,
+
+ //NEXUS_EXPERIMENTAL_2016
+ (uint32_t)NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE,
};
const vendor_tag_ops_t* QCamera3VendorTags::Ops = NULL;
diff --git a/QCamera2/HAL3/QCamera3VendorTags.h b/QCamera2/HAL3/QCamera3VendorTags.h
index 6fae7ff..4048d3b 100644
--- a/QCamera2/HAL3/QCamera3VendorTags.h
+++ b/QCamera2/HAL3/QCamera3VendorTags.h
@@ -44,6 +44,7 @@
QCAMERA3_TEMPORAL_DENOISE,
QCAMERA3_AV_TIMER,
QCAMERA3_SENSOR_META_DATA,
+ NEXUS_EXPERIMENTAL_2016,
QCAMERA3_SECTIONS_END
};
@@ -56,6 +57,7 @@
QCAMERA3_TEMPORAL_DENOISE_START = QCAMERA3_TEMPORAL_DENOISE << 16,
QCAMERA3_AV_TIMER_START = QCAMERA3_AV_TIMER << 16,
QCAMERA3_SENSOR_META_DATA_START = QCAMERA3_SENSOR_META_DATA << 16,
+ NEXUS_EXPERIMENTAL_2016_START = NEXUS_EXPERIMENTAL_2016 <<16
};
enum qcamera3_ext_tags {
@@ -134,6 +136,9 @@
QCAMERA3_SENSOR_DYNAMIC_BLACK_LEVEL_PATTERN = QCAMERA3_SENSOR_META_DATA_START,
QCAMERA3_SENSOR_META_DATA_END,
+
+ NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE = NEXUS_EXPERIMENTAL_2016_START,
+ NEXUS_EXPERIMENTAL_2016_END,
};
// QCAMERA3_OPAQUE_RAW_FORMAT
diff --git a/QCamera2/stack/common/cam_intf.h b/QCamera2/stack/common/cam_intf.h
index bd4db4c..cd306c7 100644
--- a/QCamera2/stack/common/cam_intf.h
+++ b/QCamera2/stack/common/cam_intf.h
@@ -966,6 +966,7 @@
INCLUDE(CAM_INTF_AF_STATE_TRANSITION, uint8_t, 1);
INCLUDE(CAM_INTF_PARM_INITIAL_EXPOSURE_INDEX, uint32_t, 1);
INCLUDE(CAM_INTF_PARM_INSTANT_AEC, uint8_t, 1);
+ INCLUDE(CAM_INTF_META_HYBRID_AE, uint8_t, 1);
} metadata_data_t;
/* Update clear_metadata_buffer() function when a new is_xxx_valid is added to
diff --git a/QCamera2/stack/common/cam_types.h b/QCamera2/stack/common/cam_types.h
index 972718a..9539ef1 100644
--- a/QCamera2/stack/common/cam_types.h
+++ b/QCamera2/stack/common/cam_types.h
@@ -2120,6 +2120,8 @@
CAM_INTF_META_ISP_SENSITIVITY,
/* Param for enabling instant aec*/
CAM_INTF_PARM_INSTANT_AEC,
+ /* Whether to enable hybrid ae mode */
+ CAM_INTF_META_HYBRID_AE,
CAM_INTF_PARM_MAX
} cam_intf_parm_type_t;