Camera2: Add support for partial results

Deprecate quirks partial result, and support partial result from
the capture result.

Change-Id: Ib3f0b6ce29d967ffbb984821413d5fda3495bb7a
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 0102905..5e6c1ad 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1077,7 +1077,7 @@
           __func__, urgent_frame_number, capture_time);
 
         //Recieved an urgent Frame Number, handle it
-        //using HAL3.1 quirk for partial results
+        //using partial results
         for (List<PendingRequestInfo>::iterator i =
             mPendingRequestsList.begin(); i != mPendingRequestsList.end(); i++) {
             camera3_notify_msg_t notify_msg;
@@ -1110,7 +1110,7 @@
 
                 i->timestamp = capture_time;
                 i->bNotified = 1;
-
+                i->partial_result_cnt++;
                 // Extract 3A metadata
                 result.result =
                     translateCbUrgentMetadataToResultMetadata(metadata);
@@ -1118,6 +1118,8 @@
                 result.frame_number = urgent_frame_number;
                 result.num_output_buffers = 0;
                 result.output_buffers = NULL;
+                result.partial_result = i->partial_result_cnt;
+
                 mCallbackOps->process_capture_result(mCallbackOps, &result);
                 ALOGV("%s: urgent frame_number = %d, capture_time = %lld",
                      __func__, result.frame_number, capture_time);
@@ -1143,6 +1145,9 @@
         memset(&result, 0, sizeof(camera3_capture_result_t));
         ALOGV("%s: frame_number in the list is %d", __func__, i->frame_number);
 
+        i->partial_result_cnt++;
+        result.partial_result = i->partial_result_cnt;
+
         // Flush out all entries with less or equal frame numbers.
         mPendingRequest--;
 
@@ -1275,7 +1280,6 @@
                 }
             }
             result.output_buffers = result_buffers;
-
             mCallbackOps->process_capture_result(mCallbackOps, &result);
             ALOGV("%s: meta frame_number = %d, capture_time = %lld",
                     __func__, result.frame_number, i->timestamp);
@@ -1336,6 +1340,7 @@
         result.result = NULL;
         result.frame_number = frame_number;
         result.num_output_buffers = 1;
+        result.partial_result = 0;
         for (List<PendingFrameDropInfo>::iterator m = mPendingFrameDropList.begin();
                 m != mPendingFrameDropList.end(); m++) {
             QCamera3Channel *channel = (QCamera3Channel *)buffer->stream->priv;
@@ -1376,6 +1381,7 @@
             result.frame_number = frame_number;
             result.num_output_buffers = 1;
             result.output_buffers = buffer;
+            result.partial_result = 0;
             mCallbackOps->process_capture_result(mCallbackOps, &result);
             i = mPendingRequestsList.erase(i);
             mPendingRequest--;
@@ -1586,6 +1592,7 @@
     pendingRequest.bNotified = 0;
     pendingRequest.input_buffer_present = (request->input_buffer != NULL)? 1 : 0;
     pendingRequest.pipeline_depth = 0;
+    pendingRequest.partial_result_cnt = 0;
     extractJpegMetadata(pendingRequest.jpegMetadata, request);
 
     for (size_t i = 0; i < request->num_output_buffers; i++) {
@@ -2520,9 +2527,6 @@
     int32_t *flashMode = NULL;
     int32_t *redeye = NULL;
 
-    uint8_t partial_result_tag = ANDROID_QUIRKS_PARTIAL_RESULT_PARTIAL;
-    camMetadata.update(ANDROID_QUIRKS_PARTIAL_RESULT, &partial_result_tag, 1);
-
     uint8_t curr_entry = GET_FIRST_PARAM_ID(metadata);
     uint8_t next_entry;
     while (curr_entry != CAM_INTF_PARM_MAX) {
@@ -3373,11 +3377,6 @@
     staticInfo.update(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
                       availableVstabModes, sizeof(availableVstabModes));
 
-    /** Quirk for urgent 3A state until final interface is worked out */
-    uint8_t usePartialResultQuirk = 1;
-    staticInfo.update(ANDROID_QUIRKS_USE_PARTIAL_RESULT,
-                      &usePartialResultQuirk, 1);
-
     /*HAL 1 and HAL 3 common*/
     float maxZoom = 4;
     staticInfo.update(ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM,
@@ -3831,7 +3830,7 @@
        ANDROID_JPEG_THUMBNAIL_QUALITY, ANDROID_JPEG_THUMBNAIL_SIZE, ANDROID_LENS_APERTURE,
        ANDROID_LENS_FILTER_DENSITY, ANDROID_LENS_FOCAL_LENGTH, ANDROID_LENS_FOCUS_DISTANCE,
        ANDROID_LENS_FOCUS_RANGE, ANDROID_LENS_STATE, ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
-       ANDROID_NOISE_REDUCTION_MODE, ANDROID_QUIRKS_PARTIAL_RESULT, ANDROID_REQUEST_ID,
+       ANDROID_NOISE_REDUCTION_MODE, ANDROID_REQUEST_ID,
        ANDROID_SCALER_CROP_REGION, ANDROID_SHADING_MODE, ANDROID_SENSOR_EXPOSURE_TIME,
        ANDROID_SENSOR_FRAME_DURATION, ANDROID_SENSOR_SENSITIVITY,
        ANDROID_SENSOR_TIMESTAMP, ANDROID_SENSOR_NEUTRAL_COLOR_POINT,
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index cfb9586..4de0565 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -237,6 +237,7 @@
         int input_buffer_present;
         CameraMetadata jpegMetadata;
         uint8_t pipeline_depth;
+        uint32_t partial_result_cnt;
     } PendingRequestInfo;
     typedef struct {
         uint32_t frame_number;