camera: adding exposure time to EXIF

Bug: 10037666
Change-Id: I5b9e044300ccf901838dc69d5877167c1f102b3b
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp
index 69e3af4..387ee35 100644
--- a/camera/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp
@@ -1380,6 +1380,29 @@
 }
 
 /*===========================================================================
+  * FUNCTION   : getExifExpTimeInfo
+  *
+  * DESCRIPTION: get exif exposure time information
+  *
+  * PARAMETERS :
+  *   @expoTimeInfo     : expousure time value
+  * RETURN     : nt32_t type of status
+  *              NO_ERROR  -- success
+  *              none-zero failure code
+  *==========================================================================*/
+int32_t getExifExpTimeInfo(rat_t *expoTimeInfo, int64_t value)
+{
+
+    int cal_exposureTime;
+    if (value != 0)
+        cal_exposureTime = value;
+    else
+        cal_exposureTime = 60;
+
+    return getRational(expoTimeInfo, 1, cal_exposureTime);
+}
+
+/*===========================================================================
  * FUNCTION   : getExifGpsProcessingMethod
  *
  * DESCRIPTION: get GPS processing method
@@ -1602,6 +1625,16 @@
                    1,
                    (void *)&(isoSpeed));
 
+    rat_t sensorExpTime ;
+    rc = getExifExpTimeInfo(&sensorExpTime, (int64_t)mJpegSettings->sensor_exposure_time);
+    if (rc == NO_ERROR){
+        exif->addEntry(EXIFTAGID_EXPOSURE_TIME,
+                       EXIF_RATIONAL,
+                       1,
+                       (void *)&(sensorExpTime));
+    } else {
+        ALOGE("now addEntry for EXIFTAGID_EXPOSURE_TIME is %d", sensorExpTime);
+    }
 
     if (strlen(mJpegSettings->gps_processing_method) > 0) {
         char gpsProcessingMethod[EXIF_ASCII_PREFIX_SIZE + GPS_PROCESSING_METHOD_SIZE];
diff --git a/camera/QCamera2/HAL3/QCamera3HALHeader.h b/camera/QCamera2/HAL3/QCamera3HALHeader.h
index d8ec935..9aaddbf 100644
--- a/camera/QCamera2/HAL3/QCamera3HALHeader.h
+++ b/camera/QCamera2/HAL3/QCamera3HALHeader.h
@@ -48,6 +48,7 @@
         uint8_t jpeg_quality;
         cam_dimension_t thumbnail_size;
         int32_t sensor_sensitivity;
+        int64_t sensor_exposure_time;
         float lens_focal_length;
         int32_t max_jpeg_size;
         int exposure_compensation;
@@ -68,6 +69,7 @@
 
     typedef struct {
         int32_t iso_speed;
+        int64_t exposure_time;
     } metadata_response_t;
 
 };//namespace qcamera
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 33eee96..18b267b 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1371,6 +1371,7 @@
 
     int64_t  *sensorExpTime =
         (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_EXPOSURE_TIME, metadata);
+    mMetadataResponse.exposure_time = *sensorExpTime;
     camMetadata.update(ANDROID_SENSOR_EXPOSURE_TIME , sensorExpTime, 1);
 
     int64_t  *sensorFameDuration =
@@ -3242,6 +3243,8 @@
         mJpegSettings->sensor_sensitivity = mMetadataResponse.iso_speed;
     }
 
+    mJpegSettings->sensor_exposure_time = mMetadataResponse.exposure_time;
+
     if (jpeg_settings.exists(ANDROID_LENS_FOCAL_LENGTH)) {
         mJpegSettings->lens_focal_length =
             jpeg_settings.find(ANDROID_LENS_FOCAL_LENGTH).data.f[0];