Camera3: Trigger IDs now received from framework

Before: Trigger IDs would increment internally in the HAL

After: Trigger IDs are read from the framework when the accompanying trigger
       is explicitly set in the request.

Rationale:
Since the framework tracks its trigger completion based on the IDs it sends to
the HAL, we need the HAL to use the framework IDs instead of generating its own.

Change-Id: I0a4343c1f12b62c9432478a3bb8e0921a2da93c2
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 @@
                 (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 @@
     }
     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 @@
             return BAD_VALUE;
     }
 
+
     return OK;
 }