From 8a2375fac006cb98324bdf2c4011579eeb346906 Mon Sep 17 00:00:00 2001 From: "insup.choi" Date: Tue, 8 Jan 2013 17:55:46 -0800 Subject: mako: camera: update exif header for new exif member Add f-number on EXIF header to show aperture item in exif viewer. Bug: 7960810 Change-Id: Ic78012cfb1d0d8a8d44571c5439c29a65abe4ff0 Signed-off-by: Iliyan Malchev --- camera/QCameraHWI.h | 2 ++ camera/QCameraHWI_Parm.cpp | 23 +++++++++++++++++------ camera/QCamera_Intf.h | 2 ++ camera/mm-camera-interface/mm_camera.c | 4 ++++ 4 files changed, 25 insertions(+), 6 deletions(-) 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 @@ static const char ExifUndefinedPrefix[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #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 @@ typedef struct{ //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 @@ void QCameraHardwareInterface::loadTables() } 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 @@ void QCameraHardwareInterface::initDefaultParameters() 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 @@ void QCameraHardwareInterface::addExifTag(exif_tag_id_t tagid, exif_tag_type_t t 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 @@ void QCameraHardwareInterface::initExifData(){ 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 @@ typedef enum { 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 @@ typedef enum { 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 @@ int32_t mm_camera_get_parm(mm_camera_obj_t * my_obj, 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; -- cgit v1.2.3