Merge "mako: camera: update exif header for new exif member" into jb-mr2-dev
diff --git a/camera/QCameraHWI.h b/camera/QCameraHWI.h
index 3d47bf9..c9a7f3e 100644
--- a/camera/QCameraHWI.h
+++ b/camera/QCameraHWI.h
@@ -206,6 +206,7 @@
 #define GPS_PROCESSING_METHOD_SIZE       101
 #define FOCAL_LENGTH_DECIMAL_PRECISION   100
 #define EXIF_ASCII_PREFIX_SIZE           8   //(sizeof(ExifAsciiPrefix))
+#define F_NUMBER_DECIMAL_PRECISION       100
 
 typedef struct{
     //GPS tags
@@ -220,6 +221,7 @@
     //Other tags
     char        dateTime[20];
     rat_t       focalLength;
+    rat_t       f_number;
     uint16_t    flashMode;
     uint16_t    isoSpeed;
     rat_t       exposure_time;
diff --git a/camera/QCameraHWI_Parm.cpp b/camera/QCameraHWI_Parm.cpp
index e212d22..cccc759 100644
--- a/camera/QCameraHWI_Parm.cpp
+++ b/camera/QCameraHWI_Parm.cpp
@@ -694,6 +694,13 @@
     }
     ALOGV("%s: X", __func__);
 }
+
+rat_t getRational(int num, int denom)
+{
+    rat_t temp = {num, denom};
+    return temp;
+}
+
 void QCameraHardwareInterface::initDefaultParameters()
 {
     bool ret;
@@ -1247,6 +1254,12 @@
     mParameters.setFloat(QCameraParameters::KEY_VERTICAL_VIEW_ANGLE,
                     verticalViewAngle);
 
+    //Set Aperture
+    float f_number = 0.0f;
+    cam_config_get_parm(mCameraId, MM_CAMERA_PARM_F_NUMBER,
+            (void *)&f_number);
+    mExifValues.f_number = getRational(f_number*F_NUMBER_DECIMAL_PRECISION, F_NUMBER_DECIMAL_PRECISION);
+
     //Set Exposure Compensation
     mParameters.set(
             QCameraParameters::KEY_MAX_EXPOSURE_COMPENSATION,
@@ -4004,12 +4017,6 @@
     mExifTableNumEntries++;
 }
 
-rat_t getRational(int num, int denom)
-{
-    rat_t temp = {num, denom};
-    return temp;
-}
-
 void QCameraHardwareInterface::initExifData(){
     if(mExifValues.dateTime) {
         addExifTag(EXIFTAGID_EXIF_DATE_TIME_ORIGINAL, EXIF_ASCII,
@@ -4020,6 +4027,10 @@
     addExifTag(EXIFTAGID_FOCAL_LENGTH, EXIF_RATIONAL, 1, 1, (void *)&(mExifValues.focalLength));
     addExifTag(EXIFTAGID_ISO_SPEED_RATING,EXIF_SHORT,1,1,(void *)&(mExifValues.isoSpeed));
 
+    // normal f_number is from 1.2 to 22, but I'd like to put some margin.
+    if(mExifValues.f_number.num>0 && mExifValues.f_number.num<3200)
+      addExifTag(EXIFTAGID_F_NUMBER,EXIF_RATIONAL,1,1,(void *)&(mExifValues.f_number));
+
     if(mExifValues.mGpsProcess) {
         addExifTag(EXIFTAGID_GPS_PROCESSINGMETHOD, EXIF_ASCII,
            EXIF_ASCII_PREFIX_SIZE + strlen(mExifValues.gpsProcessingMethod + EXIF_ASCII_PREFIX_SIZE) + 1,
diff --git a/camera/QCamera_Intf.h b/camera/QCamera_Intf.h
index 4daea63..51b1744 100644
--- a/camera/QCamera_Intf.h
+++ b/camera/QCamera_Intf.h
@@ -473,6 +473,7 @@
     MM_CAMERA_PARM_CHECK_AF_RETRY,
     MM_CAMERA_PARM_LG_CAF_LOCK,
     MM_CAMERA_PARM_INFORM_STARTPRVIEW,
+    MM_CAMERA_PARM_F_NUMBER,
     MM_CAMERA_PARM_MAX
 } mm_camera_parm_type_t;
 
@@ -625,6 +626,7 @@
   CAMERA_CHECK_AF_RETRY,
   CAMERA_SET_LG_CAF_LOCK,
   CAMERA_SET_INFORM_STARTPREVIEW,
+  CAMERA_GET_PARM_F_NUMBER,
   CAMERA_CTRL_PARM_MAX
 } cam_ctrl_type;
 
diff --git a/camera/mm-camera-interface/mm_camera.c b/camera/mm-camera-interface/mm_camera.c
index eb3fe00..6cfb9b2 100644
--- a/camera/mm-camera-interface/mm_camera.c
+++ b/camera/mm-camera-interface/mm_camera.c
@@ -669,6 +669,10 @@
     case MM_CAMERA_PARM_GET_AF_STATUS:
         return mm_camera_send_native_ctrl_cmd(my_obj,   CAMERA_GET_PARM_AF_STATUS,
                      sizeof(af_actuator_status_t), (void *)parm->p_value);
+
+    case MM_CAMERA_PARM_F_NUMBER:
+        return mm_camera_send_native_ctrl_cmd(my_obj,   CAMERA_GET_PARM_F_NUMBER,
+                     sizeof(float), (void *)parm->p_value);
     default:
         /* needs to add more implementation */
         rc = -1;