diff --git a/camera/QCamera2/HAL/QCameraPostProc.cpp b/camera/QCamera2/HAL/QCameraPostProc.cpp
index 01b70f1..c301bde 100644
--- a/camera/QCamera2/HAL/QCameraPostProc.cpp
+++ b/camera/QCamera2/HAL/QCameraPostProc.cpp
@@ -1105,7 +1105,7 @@
     }
     if (meta_frame != NULL) {
         // fill in meta data frame ptr
-        jpg_job.encode_job.p_metadata = (cam_metadata_info_t *)meta_frame->buffer;
+        jpg_job.encode_job.p_metadata_v1 = (cam_metadata_info_t *)meta_frame->buffer;
     }
 
     ALOGD("[KPI Perf] %s : call jpeg start_job", __func__);
diff --git a/camera/QCamera2/HAL3/QCamera3PostProc.cpp b/camera/QCamera2/HAL3/QCamera3PostProc.cpp
index 2ccae48..b54da47 100644
--- a/camera/QCamera2/HAL3/QCamera3PostProc.cpp
+++ b/camera/QCamera2/HAL3/QCamera3PostProc.cpp
@@ -764,7 +764,7 @@
  *              none-zero failure code
  *==========================================================================*/
 int32_t QCamera3PostProcessor::encodeData(qcamera_jpeg_data_t *jpeg_job_data,
-                                         uint8_t &needNewSess)
+                          uint8_t &needNewSess, mm_camera_super_buf_t *p_metaFrame)
 {
     ALOGV("%s : E", __func__);
     int32_t ret = NO_ERROR;
@@ -979,9 +979,14 @@
     }
     if (meta_frame != NULL) {
         // fill in meta data frame ptr
-        jpg_job.encode_job.p_metadata = (cam_metadata_info_t *)meta_frame->buffer;
+        jpg_job.encode_job.p_metadata_v1 = (cam_metadata_info_t *)meta_frame->buffer;
+    } else if (p_metaFrame != NULL) {
+       //Fill in the metadata passed as parameter
+       jpg_job.encode_job.p_metadata_v3 = (metadata_buffer_t *)p_metaFrame->bufs[0]->buffer;;
+    } else {
+       ALOGE("%s: Metadata is null", __func__);
     }
-
+    //Not required here
     //jpg_job.encode_job.cam_exif_params = m_parent->mExifParams;
     //Start jpeg encoding
     ret = mJpegHandle.start_job(&jpg_job, &jobId);
@@ -1012,6 +1017,8 @@
     int ret;
     uint8_t is_active = FALSE;
     uint8_t needNewSess = TRUE;
+    mm_camera_super_buf_t *pp_frame = NULL;
+    mm_camera_super_buf_t *meta_frame = NULL;
     ALOGV("%s: E", __func__);
     QCamera3PostProcessor *pme = (QCamera3PostProcessor *)data;
     QCameraCmdThread *cmdThread = &pme->m_dataProcTh;
@@ -1100,7 +1107,7 @@
 
                             // add into ongoing jpeg job Q
                             pme->m_ongoingJpegQ.enqueue((void *)jpeg_job);
-                            ret = pme->encodeData(jpeg_job, needNewSess);
+                            ret = pme->encodeData(jpeg_job, needNewSess, meta_frame);
                             if (NO_ERROR != ret) {
                                 // dequeue the last one
                                 pme->m_ongoingJpegQ.dequeue(false);
@@ -1111,10 +1118,9 @@
                         }
                     }
                     ALOGE("%s: dequeuing pp frame", __func__);
-                    mm_camera_super_buf_t *pp_frame =
+                    pp_frame =
                         (mm_camera_super_buf_t *)pme->m_inputPPQ.dequeue();
                     if (NULL != pp_frame) {
-                       mm_camera_super_buf_t *meta_frame = NULL;
                        meta_frame =
                                (mm_camera_super_buf_t *)pme->m_inputMetaQ.dequeue();
                        if (meta_frame == NULL) {
diff --git a/camera/QCamera2/HAL3/QCamera3PostProc.h b/camera/QCamera2/HAL3/QCamera3PostProc.h
index 9c0f3c8..b970c24 100755
--- a/camera/QCamera2/HAL3/QCamera3PostProc.h
+++ b/camera/QCamera2/HAL3/QCamera3PostProc.h
@@ -119,7 +119,7 @@
                                   QCamera3Stream *main_stream,
                                   QCamera3Stream *thumb_stream);
     int32_t encodeData(qcamera_jpeg_data_t *jpeg_job_data,
-                       uint8_t &needNewSess);
+                       uint8_t &needNewSess, mm_camera_super_buf_t *p_metaFrame);
     void releaseSuperBuf(mm_camera_super_buf_t *super_buf);
     static void releaseNotifyData(void *user_data, void *cookie);
     int32_t processRawImageImpl(mm_camera_super_buf_t *recvd_frame);
diff --git a/camera/QCamera2/stack/common/cam_intf.h b/camera/QCamera2/stack/common/cam_intf.h
index a13e909..3b142d7 100644
--- a/camera/QCamera2/stack/common/cam_intf.h
+++ b/camera/QCamera2/stack/common/cam_intf.h
@@ -541,6 +541,7 @@
     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,     uint8_t,                     1);
     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP,          cam_sharpness_map_t,         3);
     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP,             cam_lens_shading_map_t,      1);
+    INCLUDE(CAM_INTF_META_AEC_INFO,                     cam_ae_params_t,              1);
     INCLUDE(CAM_INTF_META_PRIVATE_DATA,                 char,                        MAX_METADATA_PAYLOAD_SIZE);
 } metadata_type_t;
 
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index c4f8509..1ef5da0 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -1025,6 +1025,8 @@
     CAM_INTF_META_PRIVATE_DATA,
     /* Indicates streams this request needs buffers on */
     CAM_INTF_META_STREAM_TYPE_MASK,
+    /*AEC info for Exif*/
+    CAM_INTF_META_AEC_INFO,
     CAM_INTF_PARM_MAX
 } cam_intf_parm_type_t;
 
diff --git a/camera/QCamera2/stack/common/mm_jpeg_interface.h b/camera/QCamera2/stack/common/mm_jpeg_interface.h
index 378414a..1ffd211 100644
--- a/camera/QCamera2/stack/common/mm_jpeg_interface.h
+++ b/camera/QCamera2/stack/common/mm_jpeg_interface.h
@@ -150,8 +150,11 @@
   /*session id*/
   uint32_t session_id;
 
-  /*Metadata stream*/
-  cam_metadata_info_t *p_metadata;
+  /*Metadata from HAl version 1 */
+  cam_metadata_info_t *p_metadata_v1;
+
+  /*Metadata stream from HAL version 3*/
+  metadata_buffer_t *p_metadata_v3;
 
   /* buf to exif entries, caller needs to
    * take care of the memory manage with insider ptr */
diff --git a/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h b/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h
index 61caa46..629049d 100644
--- a/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h
+++ b/camera/QCamera2/stack/mm-jpeg-interface/inc/mm_jpeg.h
@@ -195,7 +195,9 @@
 extern int32_t addExifEntry(QOMX_EXIF_INFO *p_exif_info, exif_tag_id_t tagid,
   exif_tag_type_t type, uint32_t count, void *data);
 extern int32_t releaseExifEntry(QEXIF_INFO_DATA *p_exif_data);
-extern int process_meta_data(cam_metadata_info_t *p_meta,
+extern int process_meta_data_v1(cam_metadata_info_t *p_meta,
+  QOMX_EXIF_INFO *exif_info, mm_jpeg_exif_params_t *p_cam_exif_params);
+extern int process_meta_data_v3(metadata_buffer_t *p_meta,
   QOMX_EXIF_INFO *exif_info, mm_jpeg_exif_params_t *p_cam3a_params);
 
 #endif /* MM_JPEG_H_ */
diff --git a/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg.c b/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg.c
index 4f28ec9..e05b8e9 100644
--- a/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg.c
+++ b/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg.c
@@ -1079,7 +1079,7 @@
     CDBG_ERROR("%s:%d] Error %d", __func__, __LINE__, rc);
     return rc;
   }
-  CDBG("%s:%d] Num of exif entries passed from HAL: %d", __func__, __LINE__,
+  CDBG_ERROR("%s:%d] Num of exif entries passed from HAL: %d", __func__, __LINE__,
       (int)p_jobparams->exif_info.numOfEntries);
   if (p_jobparams->exif_info.numOfEntries > 0) {
      rc = OMX_SetConfig(p_session->omx_handle, exif_idx,
@@ -1089,11 +1089,19 @@
       return rc;
     }
   }
-  /*parse aditional exif data from the metadata*/
-  if (NULL != p_jobparams->p_metadata) {
+  /*parse aditional exif data from the metadata if present*/
+  if ((NULL != p_jobparams->p_metadata_v3) ||
+    (NULL != p_jobparams->p_metadata_v1)) {
     exif_info.numOfEntries = 0;
     exif_info.exif_data = &p_session->exif_info_local[0];
-  process_meta_data(p_jobparams->p_metadata, &exif_info, &p_jobparams->cam_exif_params);
+
+    if (NULL != p_jobparams->p_metadata_v3) {
+      process_meta_data_v3(p_jobparams->p_metadata_v3,
+          &exif_info, &p_jobparams->cam_exif_params);
+    } else {
+      process_meta_data_v1(p_jobparams->p_metadata_v1,
+        &exif_info, &p_jobparams->cam_exif_params);
+    }
     /* After Parse metadata */
     p_session->exif_count_local = exif_info.numOfEntries;
 
@@ -1108,6 +1116,8 @@
       return rc;
       }
     }
+  } else {
+    CDBG_ERROR("%s:%d] Metadata is null", __func__, __LINE__, rc);
   }
 
   return rc;
diff --git a/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_exif.c b/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_exif.c
index 6773410..f3de998 100644
--- a/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_exif.c
+++ b/camera/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_exif.c
@@ -29,6 +29,7 @@
 
 #include "mm_jpeg_dbg.h"
 #include "mm_jpeg.h"
+
 #include <errno.h>
 #include <math.h>
 
@@ -310,6 +311,20 @@
     ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
   }
 
+  /*Flash*/
+  short val_short;
+  if (p_sensor_params->flash_state == CAM_FLASH_STATE_FIRED) {
+    val_short = 1;
+  } else {
+    val_short = 0;
+  }
+  //val_short =  (p_sensor_params->flash_mode << 3) | val_short;
+  ALOGE("%s: Flash value %d flash mode %d flash state %d", __func__, val_short,
+    p_sensor_params->flash_mode, p_sensor_params->flash_state);
+  rc = addExifEntry(exif_info, EXIFTAGID_FLASH, EXIF_SHORT, 1, &val_short);
+  if (rc) {
+    ALOGE("%s %d]: Error adding flash exif entry", __func__, __LINE__);
+  }
   return rc;
 }
 /** process_3a_data:
@@ -347,9 +362,9 @@
       val_rat.denom = 0;
   } else {
       val_rat.num = 1;
-      val_rat.denom = ROUND((double)p_ae_params->exp_time * 1000);
+      val_rat.denom = ROUND(1.0/p_ae_params->exp_time);
   }
-  ALOGE("%s: numer %d denom %d", __func__, val_rat.num, val_rat.denom );
+  ALOGD("%s: numer %d denom %d", __func__, val_rat.num, val_rat.denom );
 
   rc = addExifEntry(exif_info, EXIFTAGID_EXPOSURE_TIME, EXIF_RATIONAL,
     (sizeof(val_rat)/(8)), &val_rat);
@@ -382,10 +397,12 @@
     ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
   }
 
+
  return rc;
 
 }
-/** processMetaData:
+
+/** process_meta_data_v1:
  *
  *  Arguments:
  *   @p_meta : ptr to metadata
@@ -398,9 +415,8 @@
  *  Description:
  *       process awb debug info
  *
- *  Notes: this needs to be filled for the metadata
  **/
-int process_meta_data(cam_metadata_info_t *p_meta, QOMX_EXIF_INFO *exif_info,
+int process_meta_data_v1(cam_metadata_info_t *p_meta, QOMX_EXIF_INFO *exif_info,
   mm_jpeg_exif_params_t *p_cam_exif_params)
 {
   int rc = 0;
@@ -410,7 +426,7 @@
     return 0;
   }
   cam_ae_params_t *p_ae_params = p_meta->is_ae_params_valid ?
-    &p_meta->ae_params : &p_cam_exif_params->ae_params;
+    &p_meta->ae_params : NULL;
 
   if (NULL != p_ae_params) {
     rc = process_3a_data(p_ae_params, exif_info);
@@ -419,7 +435,7 @@
     }
   }
   cam_sensor_params_t *p_sensor_params = p_meta->is_sensor_params_valid ?
-    &p_meta->sensor_params : &p_cam_exif_params->sensor_params;
+    &p_meta->sensor_params : NULL;
 
   if (NULL != p_sensor_params) {
     rc = process_sensor_data(p_sensor_params, exif_info);
@@ -429,3 +445,85 @@
   }
   return rc;
 }
+
+/** process_meta_data_v3:
+ *
+ *  Arguments:
+ *   @p_meta : ptr to metadata
+ *   @exif_info: Exif info struct
+ *
+ *  Return     : int32_t type of status
+ *               NO_ERROR  -- success
+ *              none-zero failure code
+ *
+ *  Description:
+ *       Extract exif data from the metadata
+ **/
+int process_meta_data_v3(metadata_buffer_t *p_meta, QOMX_EXIF_INFO *exif_info,
+  mm_jpeg_exif_params_t *p_cam_exif_params)
+{
+  int rc = 0;
+  cam_sensor_params_t p_sensor_params;
+  cam_ae_params_t p_ae_params;
+
+  if (!p_meta) {
+    ALOGE("%s %d:Meta data is NULL", __func__, __LINE__);
+    return 0;
+  }
+  int32_t *iso =
+    (int32_t *)POINTER_OF(CAM_INTF_META_SENSOR_SENSITIVITY, p_meta);
+
+  int64_t *sensor_exposure_time =
+    (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_EXPOSURE_TIME, p_meta);
+
+  memset(&p_ae_params,  0,  sizeof(cam_ae_params_t));
+  if (NULL != iso) {
+    p_ae_params.iso_value= *iso;
+  } else {
+    ALOGE("%s: Cannot extract Iso value", __func__);
+  }
+
+  if (NULL != sensor_exposure_time) {
+    p_ae_params.exp_time = (double)(*sensor_exposure_time / 1000000000.0);
+  } else {
+    ALOGE("%s: Cannot extract Exp time value", __func__);
+  }
+
+  rc = process_3a_data(&p_ae_params, exif_info);
+  if (rc) {
+    ALOGE("%s %d: Failed to add 3a exif params", __func__, __LINE__);
+  }
+
+  float *aperture = (float *)POINTER_OF(CAM_INTF_META_LENS_APERTURE, p_meta);
+
+  uint8_t *flash_mode = (uint8_t *) POINTER_OF(CAM_INTF_META_FLASH_MODE, p_meta);
+  uint8_t *flash_state =
+    (uint8_t *) POINTER_OF(CAM_INTF_META_FLASH_STATE, p_meta);
+
+  memset(&p_sensor_params, 0, sizeof(cam_sensor_params_t));
+
+  if (NULL != aperture) {
+     p_sensor_params.aperture_value = *aperture;
+  } else {
+    ALOGE("%s: Cannot extract Aperture value", __func__);
+  }
+
+  if (NULL != flash_mode) {
+     p_sensor_params.flash_mode = *flash_mode;
+  } else {
+    ALOGE("%s: Cannot extract flash mode value", __func__);
+  }
+
+  if (NULL != flash_state) {
+    p_sensor_params.flash_state = *flash_state;
+  } else {
+    ALOGE("%s: Cannot extract flash state value", __func__);
+  }
+
+  rc = process_sensor_data(&p_sensor_params, exif_info);
+  if (rc) {
+      ALOGE("%s %d: Failed to extract sensor params", __func__, __LINE__);
+  }
+
+  return rc;
+}
