summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camera/EmulatedFakeCamera3.cpp47
1 files changed, 46 insertions, 1 deletions
diff --git a/camera/EmulatedFakeCamera3.cpp b/camera/EmulatedFakeCamera3.cpp
index 43ffc44..cdfb597 100644
--- a/camera/EmulatedFakeCamera3.cpp
+++ b/camera/EmulatedFakeCamera3.cpp
@@ -1331,11 +1331,32 @@ status_t EmulatedFakeCamera3::doFakeAE(CameraMetadata &settings) {
(e.data.u8[0] == ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_START);
}
+ if (precaptureTrigger) {
+ ALOGV("%s: Pre capture trigger = %d", __FUNCTION__, precaptureTrigger);
+ } else if (e.count > 0) {
+ ALOGV("%s: Pre capture trigger was present? %d",
+ __FUNCTION__,
+ e.count);
+ }
+
+ // If we have an aePrecaptureTrigger, aePrecaptureId should be set too
+ if (e.count != 0) {
+ e = settings.find(ANDROID_CONTROL_AE_PRECAPTURE_ID);
+
+ if (e.count == 0) {
+ ALOGE("%s: When android.control.aePrecaptureTrigger is set "
+ " in the request, aePrecaptureId needs to be set as well",
+ __FUNCTION__);
+ return BAD_VALUE;
+ }
+
+ mAeTriggerId = e.data.i32[0];
+ }
+
if (precaptureTrigger || mAeState == ANDROID_CONTROL_AE_STATE_PRECAPTURE) {
// Run precapture sequence
if (mAeState != ANDROID_CONTROL_AE_STATE_PRECAPTURE) {
mAeCounter = 0;
- mAeTriggerId++;
}
if (mFacePriority) {
@@ -1415,6 +1436,29 @@ status_t EmulatedFakeCamera3::doFakeAF(CameraMetadata &settings) {
}
uint8_t afMode = e.data.u8[0];
+ e = settings.find(ANDROID_CONTROL_AF_TRIGGER);
+ typedef camera_metadata_enum_android_control_af_trigger af_trigger_t;
+ af_trigger_t afTrigger;
+ // If we have an afTrigger, afTriggerId should be set too
+ if (e.count != 0) {
+ afTrigger = static_cast<af_trigger_t>(e.data.u8[0]);
+
+ e = settings.find(ANDROID_CONTROL_AF_TRIGGER_ID);
+
+ if (e.count == 0) {
+ ALOGE("%s: When android.control.afTrigger is set "
+ " in the request, afTriggerId needs to be set as well",
+ __FUNCTION__);
+ return BAD_VALUE;
+ }
+
+ mAfTriggerId = e.data.i32[0];
+ } else {
+ afTrigger = ANDROID_CONTROL_AF_TRIGGER_IDLE;
+ }
+
+ // TODO: implement AF triggering semantic
+
switch (afMode) {
case ANDROID_CONTROL_AF_MODE_OFF:
mAfState = ANDROID_CONTROL_AF_STATE_INACTIVE;
@@ -1436,6 +1480,7 @@ status_t EmulatedFakeCamera3::doFakeAF(CameraMetadata &settings) {
return BAD_VALUE;
}
+
return OK;
}