Ejemplo n.º 1
0
/** process_3a_data:
 *
 *  Arguments:
 *   @p_ae_params : ptr to aec data
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       process 3a data
 *
 *  Notes: this needs to be filled for the metadata
 **/
int process_3a_data(cam_ae_params_t *p_ae_params, QOMX_EXIF_INFO *exif_info)
{
  int rc = 0;
  srat_t val_srat;
  rat_t val_rat;
  double shutter_speed_value;

  if (NULL == p_ae_params) {
    ALOGE("%s %d: 3A params are null", __func__, __LINE__);
    return 0;
  }

  ALOGD("%s:%d] exp_time %f, iso_value %d", __func__, __LINE__,
    p_ae_params->exp_time, p_ae_params->iso_value);

  /*Exposure time*/
  if (p_ae_params->exp_time == 0) {
      val_rat.num = 0;
      val_rat.denom = 0;
  } else {
      val_rat.num = 1;
      val_rat.denom = ROUND(1.0/p_ae_params->exp_time);
  }
  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);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry Exposure time",
      __func__, __LINE__);
  }

  /* Shutter Speed*/
  if (p_ae_params->exp_time > 0) {
    shutter_speed_value = log10(1/p_ae_params->exp_time)/log10(2);
    val_srat.num = shutter_speed_value * 1000;
    val_srat.denom = 1000;
  } else {
    val_srat.num = 0;
    val_srat.denom = 0;
  }
  rc = addExifEntry(exif_info, EXIFTAGID_SHUTTER_SPEED, EXIF_SRATIONAL,
    (sizeof(val_srat)/(8)), &val_srat);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }

  /*ISO*/
  short val_short;
  val_short = p_ae_params->iso_value;
  rc = addExifEntry(exif_info, EXIFTAGID_ISO_SPEED_RATING, EXIF_SHORT,
    sizeof(val_short)/2, &val_short);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }


 return rc;

}
Ejemplo n.º 2
0
/** process_sensor_data:
 *
 *  Arguments:
 *   @p_sensor_params : ptr to sensor data
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       process sensor data
 *
 *  Notes: this needs to be filled for the metadata
 **/
int process_sensor_data(cam_sensor_params_t *p_sensor_params,
  QOMX_EXIF_INFO *exif_info)
{
  int rc = 0;
  rat_t val_rat;

  if (NULL == p_sensor_params) {
    ALOGE("%s %d: Sensor params are null", __func__, __LINE__);
    return 0;
  }

  ALOGD("%s:%d] From metadata aperture = %f ", __func__, __LINE__,
    p_sensor_params->aperture_value );

  if (p_sensor_params->aperture_value >= 1.0) {
    double apex_value;
    apex_value = (double)2.0 * log(p_sensor_params->aperture_value) / log(2.0);
    val_rat.num = (uint32_t)(apex_value * 100);
    val_rat.denom = 100;
    rc = addExifEntry(exif_info, EXIFTAGID_APERTURE, EXIF_RATIONAL, 1, &val_rat);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
    }

    val_rat.num = (uint32_t)(p_sensor_params->aperture_value * 100);
    val_rat.denom = 100;
    rc = addExifEntry(exif_info, EXIFTAGID_F_NUMBER, EXIF_RATIONAL, 1, &val_rat);
    if (rc) {
      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;
  ALOGI("%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;
}
/** processMetaData:
 *
 *  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:
 *       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,
  mm_jpeg_exif_params_t *p_cam_exif_params)
{
  int rc = 0;

  if (!p_meta) {
    ALOGE("%s %d:Meta data is NULL", __func__, __LINE__);
    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;

  cam_awb_params_t *p_awb_params = p_meta->is_awb_params_valid ?
    &p_meta->awb_params : &p_cam_exif_params->awb_params;

  cam_auto_focus_data_t *p_focus_data = p_meta->is_focus_valid ?
    &p_meta->focus_data : &p_cam_exif_params->af_params;

  if(p_cam_exif_params->sensor_params.sens_type != CAM_SENSOR_YUV) {
      rc = process_3a_data(p_ae_params, p_awb_params, p_focus_data, exif_info);
      if (rc) {
        ALOGE("%s %d: Failed to extract 3a params", __func__, __LINE__);
      }
  }

  cam_sensor_params_t *p_sensor_params = p_meta->is_sensor_params_valid ?
    &p_meta->sensor_params : &p_cam_exif_params->sensor_params;

  if (NULL != p_sensor_params) {
    rc = process_sensor_data(p_sensor_params, exif_info, p_cam_exif_params);
    if (rc) {
      ALOGE("%s %d: Failed to extract sensor params", __func__, __LINE__);
    }
  }

  /* Scene Capture Type */
  short val_short;
  cam_auto_scene_t *scene_cap_type = p_meta->is_asd_decision_valid ?
          &p_meta->scene : &p_cam_exif_params->scene;
  if (scene_cap_type != NULL) {
      val_short = (short) *scene_cap_type;
  } else {
      val_short = 0;
  }
  rc = addExifEntry(exif_info, EXIFTAGID_SCENE_CAPTURE_TYPE, EXIF_SHORT,
          sizeof(val_short)/2, &val_short);
  if (rc) {
      ALOGE("%s:%d]: Error adding ASD Exif Entry", __func__, __LINE__);
  }
  return rc;
}
/** process_3a_data:
 *
 *  Arguments:
 *   @p_ae_params : ptr to aec data
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       process 3a data
 *
 *  Notes: this needs to be filled for the metadata
 **/
int process_3a_data(cam_ae_params_t *p_ae_params, cam_awb_params_t *p_awb_params,
        cam_auto_focus_data_t *p_focus_data, QOMX_EXIF_INFO *exif_info)
{
  int rc = 0;
  srat_t val_srat;
  rat_t val_rat;
  double shutter_speed_value;
  uint16_t aaa_exif_buff[AAA_EXIF_BUF_SIZE];
  uint32_t exif_byte_cnt = 0;

  memset(aaa_exif_buff, 0x0, sizeof(aaa_exif_buff));

  if (NULL == p_ae_params) {
    ALOGE("%s %d: AE params are null", __func__, __LINE__);
    /* increment exif_byte_cnt, so that this info will be filled with 0s */
    exif_byte_cnt += AE_EXIF_SIZE;
  } else {
    ALOGE("%s:%d] exp_time %f, iso_value %d exp idx: %d, lc: %d, gain: %f", __func__, __LINE__,
      p_ae_params->exp_time, p_ae_params->iso_value, p_ae_params->exp_index,
      p_ae_params->line_count, p_ae_params->real_gain);

    /* Exposure time */
    if (0.0f >= p_ae_params->exp_time) {
      val_rat.num = 0;
      val_rat.denom = 0;
    } else {
      val_rat.num = 1;
      val_rat.denom = ROUND(1.0/p_ae_params->exp_time);
    }
    CDBG_HIGH("%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);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Exposure time",
        __func__, __LINE__);
    }

    /* Shutter Speed*/
    if (p_ae_params->exp_time > 0) {
      shutter_speed_value = log10(1/p_ae_params->exp_time)/log10(2);
      val_srat.num = (int32_t)(shutter_speed_value * 1000.0f);
      val_srat.denom = 1000;
    } else {
      val_srat.num = 0;
      val_srat.denom = 0;
    }
    rc = addExifEntry(exif_info, EXIFTAGID_SHUTTER_SPEED, EXIF_SRATIONAL,
      (sizeof(val_srat)/(8)), &val_srat);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
    }

    /* ISO */
    short val_short;
    val_short = (short) p_ae_params->iso_value;
    rc = addExifEntry(exif_info, EXIFTAGID_ISO_SPEED_RATING, EXIF_SHORT,
      sizeof(val_short)/2, &val_short);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry ISO", __func__, __LINE__);
    }

    /* Gain */
    val_short = (short) p_ae_params->real_gain;
    rc = addExifEntry(exif_info, EXIFTAGID_GAIN_CONTROL, EXIF_SHORT,
      sizeof(val_short)/2, &val_short);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Gain", __func__, __LINE__);
    }

    /* Exposure Index */
    val_rat.num = p_ae_params->exp_index;
    val_rat.denom = 1;

    CDBG_HIGH("%s: numer %d denom %d", __func__, val_rat.num, val_rat.denom );

    rc = addExifEntry(exif_info, EXIFTAGID_EXPOSURE_INDEX, EXIF_RATIONAL,
      (sizeof(val_rat)/(8)), &val_rat);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Exposure Index",
        __func__, __LINE__);
    }

    /* AE line count */
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(LOWER(p_ae_params->line_count));
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(UPPER(p_ae_params->line_count));

    /* Metering Mode   */
    val_short = (unsigned short) p_ae_params->metering_mode;
    rc = addExifEntry(exif_info,EXIFTAGID_METERING_MODE, EXIF_SHORT,
          sizeof(val_short)/2, &val_short);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Metering mode", __func__, __LINE__);
    }

    /*Exposure Program*/
    val_short = (unsigned short) p_ae_params->exposure_program;
    rc = addExifEntry(exif_info,EXIFTAGID_EXPOSURE_PROGRAM, EXIF_SHORT,
          sizeof(val_short)/2, &val_short);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Exposure program", __func__, __LINE__);
    }

    /*Exposure Mode */
    val_short = (unsigned short) p_ae_params->exposure_mode;
    rc = addExifEntry(exif_info,EXIFTAGID_EXPOSURE_MODE, EXIF_SHORT,
          sizeof(val_short)/2, &val_short);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Exposure Mode", __func__, __LINE__);
    }

    /*Scenetype*/
    uint8_t val_undef;
    val_undef = (uint8_t) p_ae_params->scenetype;
    rc = addExifEntry(exif_info,EXIFTAGID_SCENE_TYPE, EXIF_UNDEFINED,
          sizeof(val_undef), &val_undef);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Scene type", __func__, __LINE__);
    }

    /* Brightness Value*/
    val_srat.num = p_ae_params->brightness*100;
    val_srat.denom = 100;
    rc = addExifEntry(exif_info,EXIFTAGID_BRIGHTNESS, EXIF_SRATIONAL,
          (sizeof(val_srat)/(8)), &val_srat);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry Brightness value", __func__, __LINE__);
    }
  }

  if (NULL == p_awb_params) {
    ALOGE("%s %d: AWB params are null", __func__, __LINE__);
    /* increment exif_byte_cnt, so that this info will be filled with 0s */
    exif_byte_cnt += AWB_EXIF_SIZE;
  } else {
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(LOWER(p_awb_params->cct_value));
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(UPPER(p_awb_params->cct_value));
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(LOWER(p_awb_params->decision));
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(UPPER(p_awb_params->decision));
  }

  if (NULL == p_focus_data) {
    ALOGE("%s %d: AF params are null", __func__, __LINE__);
    /* increment exif_byte_cnt, so that this info will be filled with 0s */
    exif_byte_cnt += AF_EXIF_SIZE;
  } else {
    aaa_exif_buff[exif_byte_cnt++] = CHANGE_ENDIAN_16(LOWER(p_focus_data->focus_pos));
    aaa_exif_buff[exif_byte_cnt]   = CHANGE_ENDIAN_16(UPPER(p_focus_data->focus_pos));
  }

  /* Add to exif data */
  rc = addExifEntry(exif_info, EXIFTAGID_EXIF_MAKER_NOTE, EXIF_UNDEFINED,
    (exif_byte_cnt * 2), aaa_exif_buff);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry Maker note", __func__, __LINE__);
  }

  return rc;
}
/** process_sensor_data:
 *
 *  Arguments:
 *   @p_sensor_params : ptr to sensor data
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       process sensor data
 *
 *  Notes: this needs to be filled for the metadata
 **/
int process_sensor_data(cam_sensor_params_t *p_sensor_params,
  QOMX_EXIF_INFO *exif_info, mm_jpeg_exif_params_t *p_cam_exif_params)
{
  int rc = 0;
  rat_t val_rat;

  if (NULL == p_sensor_params) {
    ALOGE("%s %d: Sensor params are null", __func__, __LINE__);
    return 0;
  }

  CDBG_HIGH("%s:%d] From metadata aperture = %f ", __func__, __LINE__,
    p_sensor_params->aperture_value );

  val_rat.num = (uint32_t)(p_sensor_params->aperture_value * 100);
  val_rat.denom = 100;
  rc = addExifEntry(exif_info, EXIFTAGID_APERTURE, EXIF_RATIONAL, 1, &val_rat);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }

  short flash_tag = -1;
  uint8_t flash_fired = 0;
  uint8_t strobe_state = 0;
  uint8_t flash_mode = 0;
  uint8_t flash_presence = 0;
  uint8_t red_eye_mode = 0;

  if (!p_cam_exif_params->flash_presence) {
    if (p_cam_exif_params->ui_flash_mode == CAM_FLASH_MODE_AUTO) {
      CDBG_HIGH("%s %d: flashmode auto, take from sensor: %d", __func__, __LINE__,
        p_sensor_params->flash_mode);
      if(p_sensor_params->flash_mode == CAM_FLASH_MODE_ON)
        flash_fired = FLASH_FIRED;
      else if(p_sensor_params->flash_mode == CAM_FLASH_MODE_OFF)
        flash_fired = FLASH_NOT_FIRED;

      flash_mode = CAMERA_FLASH_AUTO;
    } else {
      CDBG_HIGH("%s %d: flashmode from ui: %d", __func__, __LINE__,
                 p_cam_exif_params->ui_flash_mode);
      if (p_cam_exif_params->ui_flash_mode == CAM_FLASH_MODE_ON) {
        flash_mode = CAMERA_FLASH_COMPULSORY;
        flash_fired = FLASH_FIRED;
      } else if(p_cam_exif_params->ui_flash_mode == CAM_FLASH_MODE_OFF) {
        flash_mode = CAMERA_FLASH_SUPRESSION;
        flash_fired = FLASH_NOT_FIRED;
      }
   }

   if((p_cam_exif_params->red_eye) && (flash_fired == FLASH_FIRED))
     red_eye_mode = REDEYE_MODE;

  } else {
    flash_presence = NO_FLASH_FUNC;
    red_eye_mode = NO_REDEYE_MODE;
  }

  /* No strobe flash support */
  strobe_state = NO_STROBE_RETURN_DETECT;

  /* Generating the flash tag */
  flash_tag = 0x00 | flash_fired |
    strobe_state | flash_mode |
    flash_presence | red_eye_mode;

  CDBG_HIGH("%s %d: flash_tag: 0x%x", __func__, __LINE__, flash_tag);


  /*FLASH*/
  rc = addExifEntry(exif_info, EXIFTAGID_FLASH, EXIF_SHORT,
    sizeof(flash_tag)/2, &flash_tag);
  if (rc) {
    ALOGE("%s:%d]: Error adding flash Exif Entry", __func__, __LINE__);
  }
  /* Sensing Method */
  short val_short;
  val_short = p_sensor_params->sensing_method;
  rc = addExifEntry(exif_info, EXIFTAGID_SENSING_METHOD, EXIF_SHORT,
          sizeof(val_short)/2, &val_short);
  if (rc) {
      ALOGE("%s:%d]: Error adding Sensing Method Exif Entry", __func__, __LINE__);
  }

  /*Focal Length in 35 MM Film */
  val_short = (short) p_sensor_params->focal_length*p_sensor_params->crop_factor;
  rc = addExifEntry(exif_info, EXIFTAGID_FOCAL_LENGTH_35MM, EXIF_SHORT, 1, &val_short);
  if (rc) {
      ALOGE("%s:%d]: Error adding Focal length Exif Entry", __func__, __LINE__);
  }

  /* F Number */
  val_rat.num = (uint32_t)(p_sensor_params->f_number * 100);
  val_rat.denom = 100;
  rc = addExifEntry(exif_info, EXIFTAGTYPE_F_NUMBER, EXIF_RATIONAL, 1, &val_rat);
  if (rc) {
      ALOGE("%s:%d]: Error adding F number Exif Entry", __func__, __LINE__);
  }
  return rc;
}
Ejemplo n.º 6
0
/** process_meta_data
 *
 *  Arguments:
 *   @p_meta : ptr to metadata
 *   @exif_info: Exif info struct
 *   @mm_jpeg_exif_params: exif params
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       Extract exif data from the metadata
 **/
int process_meta_data(metadata_buffer_t *p_meta, QOMX_EXIF_INFO *exif_info,
  mm_jpeg_exif_params_t *p_cam_exif_params, cam_hal_version_t hal_version)
{
  int rc = 0;
  cam_sensor_params_t p_sensor_params;
  cam_3a_params_t p_3a_params;
  cam_auto_scene_t *scene_cap_type;

  if (!p_meta) {
    ALOGE("%s %d:Meta data is NULL", __func__, __LINE__);
    return 0;
  }

  memset(&p_3a_params,  0,  sizeof(cam_3a_params_t));
  memset(&p_sensor_params, 0, sizeof(cam_sensor_params_t));

  if (hal_version == CAM_HAL_V1) {
    if (p_cam_exif_params) {
      p_sensor_params = p_cam_exif_params->sensor_params;
      p_3a_params = p_cam_exif_params->cam_3a_params;
    } else {
      p_sensor_params.focal_length = 0;
      p_sensor_params.f_number = 0;
      p_sensor_params.sensing_method = 1;
      p_sensor_params.crop_factor = 0;
      p_3a_params.exp_time = 0.0;
      p_3a_params.iso_value = 0;
      p_3a_params.metering_mode = 0;
      p_3a_params.exposure_program = 0;
      p_3a_params.exposure_mode = 255;
      p_3a_params.scenetype = 1;
      p_3a_params.brightness = 0.0;
    }

  } else {
    /* Process 3a data */
    int32_t *iso =
      (int32_t *)POINTER_OF_META(CAM_INTF_META_SENSOR_SENSITIVITY, p_meta);
    if (NULL != iso) {
      p_3a_params.iso_value= *iso;
    } else {
      ALOGE("%s: Cannot extract Iso value", __func__);
    }

    int64_t *sensor_exposure_time =
      (int64_t *)POINTER_OF_META(CAM_INTF_META_SENSOR_EXPOSURE_TIME, p_meta);
    if (NULL != sensor_exposure_time) {
      p_3a_params.exp_time = (double)(*sensor_exposure_time / 1000000000.0);
    } else {
      ALOGE("%s: Cannot extract Exp time value", __func__);
    }

    cam_wb_mode_type *wb_mode =
      (cam_wb_mode_type *)POINTER_OF_META(CAM_INTF_PARM_WHITE_BALANCE, p_meta);
    if (NULL != wb_mode) {
      p_3a_params.wb_mode = *wb_mode;
    } else {
      ALOGE("%s: Cannot extract white balance mode", __func__);
    }

    /* Process sensor data */
    float *aperture = (float *)POINTER_OF_META(CAM_INTF_META_LENS_APERTURE, p_meta);
    if (NULL != aperture) {
      p_sensor_params.aperture_value = *aperture;
    } else {
      ALOGE("%s: Cannot extract Aperture value", __func__);
    }

    uint8_t *flash_mode = (uint8_t *) POINTER_OF_META(CAM_INTF_META_FLASH_MODE, p_meta);
    if (NULL != flash_mode) {
      p_sensor_params.flash_mode = *flash_mode;
    } else {
      ALOGE("%s: Cannot extract flash mode value", __func__);
    }

    uint8_t *flash_state =
      (uint8_t *) POINTER_OF_META(CAM_INTF_META_FLASH_STATE, p_meta);
    if (NULL != flash_state) {
      p_sensor_params.flash_state = *flash_state;
    } else {
      ALOGE("%s: Cannot extract flash state value", __func__);
    }
  }
  rc = process_3a_data(&p_3a_params, exif_info);
  if (rc) {
    ALOGE("%s %d: Failed to add 3a exif params", __func__, __LINE__);
  }

  rc = process_sensor_data(&p_sensor_params, exif_info);
  if (rc) {
      ALOGE("%s %d: Failed to extract sensor params", __func__, __LINE__);
  }
  short val_short;
  scene_cap_type =
    (cam_auto_scene_t *)POINTER_OF_META(CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE, p_meta);
  if(scene_cap_type != NULL)
  val_short = (short) *scene_cap_type;
  else val_short = 0;
  rc = addExifEntry(exif_info, EXIFTAGID_SCENE_CAPTURE_TYPE, EXIF_SHORT,
    sizeof(val_short)/2, &val_short);
  if (rc) {
    ALOGE("%s:%d]: Error adding ASD Exif Entry", __func__, __LINE__);
  }

  /* set orientation to ORIENTATION_UNDEFINED */
  int16_t orientation = 0;
  rc = addExifEntry(exif_info, EXIFTAGID_ORIENTATION,
                    EXIF_SHORT,
                    1,
                    (void *)&orientation);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry Orientation",
      __func__, __LINE__);
  }

  return rc;
}
Ejemplo n.º 7
0
/** process_3a_data:
 *
 *  Arguments:
 *   @p_3a_params : ptr to 3a data
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       process 3a data
 *
 *  Notes: this needs to be filled for the metadata
 **/
int process_3a_data(cam_3a_params_t *p_3a_params, QOMX_EXIF_INFO *exif_info)
{
  int rc = 0;
  srat_t val_srat;
  rat_t val_rat;
  double shutter_speed_value;

  if (NULL == p_3a_params) {
    ALOGE("%s %d: 3A params are null", __func__, __LINE__);
    return 0;
  }

  CDBG_HIGH("%s:%d] exp_time %f, iso_value %d, wb_mode %d", __func__, __LINE__,
    p_3a_params->exp_time, p_3a_params->iso_value, p_3a_params->wb_mode);

  /*Exposure time*/
  if (p_3a_params->exp_time == 0) {
      val_rat.num = 0;
      val_rat.denom = 0;
  } else {
      val_rat.num = 1;
      val_rat.denom = ROUND(1.0/p_3a_params->exp_time);
  }
  CDBG_HIGH("%s: numer %d denom %d %d", __func__, val_rat.num, val_rat.denom, sizeof(val_rat)/(8));

  rc = addExifEntry(exif_info, EXIFTAGID_EXPOSURE_TIME, EXIF_RATIONAL,
    (sizeof(val_rat)/(8)), &val_rat);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry Exposure time",
      __func__, __LINE__);
  }

  /* Shutter Speed*/
  if (p_3a_params->exp_time > 0) {
    shutter_speed_value = log10(1/p_3a_params->exp_time)/log10(2);
    val_srat.num = shutter_speed_value * 1000;
    val_srat.denom = 1000;
  } else {
    val_srat.num = 0;
    val_srat.denom = 0;
  }
  rc = addExifEntry(exif_info, EXIFTAGID_SHUTTER_SPEED, EXIF_SRATIONAL,
    (sizeof(val_srat)/(8)), &val_srat);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }

  /*ISO*/
  short val_short;
  val_short = p_3a_params->iso_value;
  rc = addExifEntry(exif_info, EXIFTAGID_ISO_SPEED_RATING, EXIF_SHORT,
    sizeof(val_short)/2, &val_short);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }

  /*WB mode*/
  if (p_3a_params->wb_mode == CAM_WB_MODE_AUTO)
    val_short = 0;
  else
    val_short = 1;
  rc = addExifEntry(exif_info, EXIFTAGID_WHITE_BALANCE, EXIF_SHORT,
    sizeof(val_short)/2, &val_short);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }

  /* Metering Mode   */
  val_short = (unsigned short) p_3a_params->metering_mode;
  rc = addExifEntry(exif_info,EXIFTAGID_METERING_MODE, EXIF_SHORT,
     sizeof(val_short)/2, &val_short);
  if (rc) {
     ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
   }

  /*Exposure Program*/
   val_short = (unsigned short) p_3a_params->exposure_program;
   rc = addExifEntry(exif_info,EXIFTAGID_EXPOSURE_PROGRAM, EXIF_SHORT,
      sizeof(val_short)/2, &val_short);
   if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
    }

   /*Exposure Mode */
    val_short = (unsigned short) p_3a_params->exposure_mode;
    rc = addExifEntry(exif_info,EXIFTAGID_EXPOSURE_MODE, EXIF_SHORT,
       sizeof(val_short)/2, &val_short);
    if (rc) {
       ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
     }

    /*Scenetype*/
     uint8_t val_undef;
     val_undef = (uint8_t) p_3a_params->scenetype;
     rc = addExifEntry(exif_info,EXIFTAGID_SCENE_TYPE, EXIF_UNDEFINED,
        sizeof(val_undef), &val_undef);
     if (rc) {
        ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
      }

    /* Brightness Value*/
     val_srat.num = p_3a_params->brightness*100;
     val_srat.denom = 100;
     rc = addExifEntry(exif_info,EXIFTAGID_BRIGHTNESS, EXIF_SRATIONAL,
                 (sizeof(val_srat)/(8)), &val_srat);
     if (rc) {
        ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
     }

  return rc;
}
Ejemplo n.º 8
0
/** process_sensor_data:
 *
 *  Arguments:
 *   @p_sensor_params : ptr to sensor data
 *
 *  Return     : int32_t type of status
 *               NO_ERROR  -- success
 *              none-zero failure code
 *
 *  Description:
 *       process sensor data
 *
 *  Notes: this needs to be filled for the metadata
 **/
int process_sensor_data(cam_sensor_params_t *p_sensor_params,
  QOMX_EXIF_INFO *exif_info)
{
  int rc = 0;
  rat_t val_rat;
  double av;

  if (NULL == p_sensor_params) {
    ALOGE("%s %d: Sensor params are null", __func__, __LINE__);
    return 0;
  }

  CDBG_HIGH("%s:%d] From metadata aperture = %f ", __func__, __LINE__,
    p_sensor_params->aperture_value );

  if (p_sensor_params->aperture_value >= 1.0) {
    val_rat.num = (uint32_t)(p_sensor_params->aperture_value * 100);
    val_rat.denom = 100;
    rc = addExifEntry(exif_info, EXIFTAGID_APERTURE, EXIF_RATIONAL, 1, &val_rat);
    if (rc) {
      ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
    }

    val_rat.num = (uint32_t)(p_sensor_params->aperture_value * 100);
    val_rat.denom = 100;
    rc = addExifEntry(exif_info, EXIFTAGID_F_NUMBER, EXIF_RATIONAL, 1, &val_rat);
    if (rc) {
      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;
  }
  CDBG_HIGH("%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__);
  }
  /* Sensing Method */
  val_short = p_sensor_params->sensing_method;
  rc = addExifEntry(exif_info, EXIFTAGID_SENSING_METHOD, EXIF_SHORT,
    sizeof(val_short)/2, &val_short);
  if (rc) {
    ALOGE("%s:%d]: Error adding flash Exif Entry", __func__, __LINE__);
  }

  /*Focal Length in 35 MM Film */
  val_short = (short) p_sensor_params->focal_length*p_sensor_params->crop_factor;
  rc = addExifEntry(exif_info, EXIFTAGID_FOCAL_LENGTH_35MM, EXIF_SHORT, 1, &val_short);
  if (rc) {
    ALOGE("%s:%d]: Error adding Exif Entry", __func__, __LINE__);
  }

  return rc;
}