camera: update AU_LINUX_ANDROID_LA.BF64.1.2.9.05.01.00.089.251

ce5ca18 Camera3: Avoid duplicated crop/upscaling in pproc
2cb7416 Camera3: Store current JPEG setting

Change-Id: Idfa853cf9f749615a6d5d96b53a7664a3a8e7dc4
diff --git a/QCamera2/HAL3/QCamera3HWI.cpp b/QCamera2/HAL3/QCamera3HWI.cpp
index cc17d8a..801ec86 100755
--- a/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1829,6 +1829,7 @@
     mPendingReprocessResultList.clear();
 
     mFirstRequest = true;
+    mCurJpegMeta.clear();
     //Get min frame duration for this streams configuration
     deriveMinFrameDuration();
 
@@ -2478,9 +2479,25 @@
 
             i->timestamp = capture_time;
 
+            // Find channel requiring metadata, meaning internal offline postprocess
+            // is needed.
+            //TODO: for now, we don't support two streams requiring metadata at the same time.
+            // (because we are not making copies, and metadata buffer is not reference counted.
+            bool internalPproc = false;
+            for (pendingBufferIterator iter = i->buffers.begin();
+                    iter != i->buffers.end(); iter++) {
+                if (iter->need_metadata) {
+                    internalPproc = true;
+                    QCamera3ProcessingChannel *channel =
+                            (QCamera3ProcessingChannel *)iter->stream->priv;
+                    channel->queueReprocMetadata(metadata_buf);
+                    break;
+                }
+            }
+
             result.result = translateFromHalMetadata(metadata,
                     i->timestamp, i->request_id, i->jpegMetadata, i->pipeline_depth,
-                    i->capture_intent);
+                    i->capture_intent, internalPproc);
 
             saveExifParams(metadata);
 
@@ -2501,24 +2518,13 @@
                 }
             }
 
-            // Find channel requiring metadata, and queue the current metadata.
-            //TODO: for now, we don't support two streams requiring metadata at the same time.
-            // (because we are not making copies, and metadata buffer is not reference counted.
-            pendingBufferIterator iter = i->buffers.begin();
-            while (iter != i->buffers.end() && !iter->need_metadata)
-                iter++;
-            if (iter == i->buffers.end()) {
+            if (!internalPproc) {
                 CDBG("%s: couldn't find need_metadata for this metadata", __func__);
                 // Return metadata buffer
                 if (free_and_bufdone_meta_buf) {
                     mMetadataChannel->bufDone(metadata_buf);
                     free(metadata_buf);
                 }
-            } else {
-                CDBG("%s: need_metadata is set for this metadata", __func__);
-                QCamera3ProcessingChannel *channel =
-                        (QCamera3ProcessingChannel *)iter->stream->priv;
-                channel->queueReprocMetadata(metadata_buf);
             }
         }
         if (!result.result) {
@@ -3249,7 +3255,8 @@
     pendingRequest.settings = input_settings.release();
     pendingRequest.pipeline_depth = 0;
     pendingRequest.partial_result_cnt = 0;
-    extractJpegMetadata(pendingRequest.jpegMetadata, request);
+    extractJpegMetadata(mCurJpegMeta, request);
+    pendingRequest.jpegMetadata = mCurJpegMeta;
 
     //extract capture intent
     if (meta.exists(ANDROID_CONTROL_CAPTURE_INTENT)) {
@@ -3742,6 +3749,7 @@
  *   @timestamp: metadata buffer timestamp
  *   @request_id: request id
  *   @jpegMetadata: additional jpeg metadata
+ *   @pprocDone: whether internal offline postprocsesing is done
  *
  * RETURN     : camera_metadata_t*
  *              metadata in a format specified by fwk
@@ -3753,7 +3761,8 @@
                                  int32_t request_id,
                                  const CameraMetadata& jpegMetadata,
                                  uint8_t pipeline_depth,
-                                 uint8_t capture_intent)
+                                 uint8_t capture_intent,
+                                 bool pprocDone)
 {
     CameraMetadata camMetadata;
     camera_metadata_t *resultMetadata;
@@ -4375,7 +4384,16 @@
     // Reprocess crop data
     IF_META_AVAILABLE(cam_crop_data_t, crop_data, CAM_INTF_META_CROP_DATA, metadata) {
         uint8_t cnt = crop_data->num_of_streams;
-        if ((0 < cnt) && (cnt < MAX_NUM_STREAMS)) {
+        if (pprocDone) {
+            // HAL already does internal reprocessing, either via reprocessing before
+            // JPEG encoding, or offline postprocessing for pproc bypass case.
+            CDBG("%s: Internal offline postprocessing was done, no need for further crop", __func__);
+        } else if ( (0 >= cnt) || (cnt > MAX_NUM_STREAMS)) {
+            // mm-qcamera-daemon only posts crop_data for streams
+            // not linked to pproc. So no valid crop metadata is not
+            // necessarily an error case.
+            CDBG("%s: No valid crop metadata entries", __func__);
+        } else {
             uint32_t reproc_stream_id;
             if ( NO_ERROR != getReprocessibleOutputStreamId(reproc_stream_id)) {
                 CDBG("%s: No reprocessible stream found, ignore crop data", __func__);
@@ -4428,11 +4446,6 @@
                    delete [] crop;
                }
             }
-        } else {
-            // mm-qcamera-daemon only posts crop_data for streams
-            // not linked to pproc. So no valid crop metadata is not
-            // necessarily an error case.
-            CDBG("%s: No valid crop metadata entries", __func__);
         }
     }
 
diff --git a/QCamera2/HAL3/QCamera3HWI.h b/QCamera2/HAL3/QCamera3HWI.h
index d009625..f93d83e 100755
--- a/QCamera2/HAL3/QCamera3HWI.h
+++ b/QCamera2/HAL3/QCamera3HWI.h
@@ -174,7 +174,7 @@
     camera_metadata_t* translateFromHalMetadata(metadata_buffer_t *metadata,
                             nsecs_t timestamp, int32_t request_id,
                             const CameraMetadata& jpegMetadata, uint8_t pipeline_depth,
-                            uint8_t capture_intent);
+                            uint8_t capture_intent, bool pprocDone);
     int initParameters();
     void deinitParameters();
     QCamera3ReprocessChannel *addOfflineReprocChannel(const reprocess_config_t &config,
@@ -292,6 +292,7 @@
     QCamera3HeapMemory *mParamHeap;
     metadata_buffer_t* mParameters;
     metadata_buffer_t* mPrevParameters;
+    CameraMetadata mCurJpegMeta;
     bool m_bIsVideo;
     bool m_bIs4KVideo;
     bool m_bEisSupportedSize;