Camera3: Enable livesnapshot for zsl

Ensure that metadata is handled correctly for different
ZSL usecases.
Change-Id: Ic521f54b973535384cbc2ec94facea3a3f326648
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
old mode 100644
new mode 100755
index c516f54..14344b5
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1008,6 +1008,7 @@
     pendingRequest.num_buffers = request->num_output_buffers;
     pendingRequest.request_id = request_id;
     pendingRequest.blob_request = blob_request;
+    pendingRequest.input_buffer_present = (request->input_buffer != NULL)? 1 : 0;
 
     for (size_t i = 0; i < request->num_output_buffers; i++) {
         RequestedBufferInfo requestedBuf;
@@ -1036,7 +1037,6 @@
         if (output.stream->format == HAL_PIXEL_FORMAT_BLOB) {
             QCamera3RegularChannel* inputChannel = NULL;
             if(request->input_buffer != NULL){
-
                 //Try to get the internal format
                 inputChannel = (QCamera3RegularChannel*)
                     request->input_buffer->stream->priv;
@@ -1247,14 +1247,21 @@
                       }
                    }
                    if (!found_metadata) {
-                      //livesnapshot case
-                      if (i->blob_request) {
-                         mPictureChannel->queueMetadata(metadata_buf);
-                      } else {
-                         //return the metadata immediately
-                         mMetadataChannel->bufDone(metadata_buf);
-                         free(metadata_buf);
-                      }
+                       if (!i->input_buffer_present && i->blob_request) {
+                          //livesnapshot or fallback non-zsl snapshot case
+                          for (List<RequestedBufferInfo>::iterator j = i->buffers.begin();
+                                j != i->buffers.end(); j++){
+                              if (j->stream->stream_type == CAMERA3_STREAM_OUTPUT &&
+                                  j->stream->format == HAL_PIXEL_FORMAT_BLOB) {
+                                 mPictureChannel->queueMetadata(metadata_buf);
+                                 break;
+                              }
+                         }
+                       } else {
+                            //return the metadata immediately
+                            mMetadataChannel->bufDone(metadata_buf);
+                            free(metadata_buf);
+                       }
                    }
                } else if (!mIsZslMode && i->blob_request) {
                    //If it is a blob request then send the metadata to the picture channel
@@ -1460,14 +1467,11 @@
     int32_t aeRegions[5];
     convertToRegions(hAeRegions->rect, aeRegions, hAeRegions->weight);
     camMetadata.update(ANDROID_CONTROL_AE_REGIONS, aeRegions, 5);
-    if(mIsZslMode) {
-        uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED;
-        camMetadata.update(ANDROID_CONTROL_AE_STATE, &ae_state, 1);
-    } else {
-        uint8_t *ae_state =
+
+    uint8_t *ae_state =
             (uint8_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata);
-        camMetadata.update(ANDROID_CONTROL_AE_STATE, ae_state, 1);
-    }
+    camMetadata.update(ANDROID_CONTROL_AE_STATE, ae_state, 1);
+
     uint8_t  *focusMode =
         (uint8_t *)POINTER_OF(CAM_INTF_PARM_FOCUS_MODE, metadata);
     camMetadata.update(ANDROID_CONTROL_AF_MODE, focusMode, 1);
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
old mode 100644
new mode 100755
index b3d08f7..bff7311
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -199,6 +199,7 @@
         int32_t request_id;
         List<RequestedBufferInfo> buffers;
         int blob_request;
+        int input_buffer_present;
     } PendingRequestInfo;
     typedef KeyedVector<camera3_stream_t *, uint32_t> PendingBuffersMap;
     /*Data structure to store metadata information*/