Camera: Add HAL support for brightness, ISO and Lens Shade
diff --git a/QualcommCameraHardware.cpp b/QualcommCameraHardware.cpp
old mode 100644
new mode 100755
index 72e099a..66a41b8
--- a/QualcommCameraHardware.cpp
+++ b/QualcommCameraHardware.cpp
@@ -1,5 +1,6 @@
/*
** Copyright 2008, Google Inc.
+** Copyright (c) 2009, Code Aurora Forum. All rights reserved.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -461,12 +462,28 @@
{ CameraParameters::FLASH_MODE_ON, LED_MODE_ON }
};
+// from mm-camera/common/camera.h.
+static const str_map iso[] = {
+ { CameraParameters::ISO_AUTO, CAMERA_ISO_AUTO},
+ { CameraParameters::ISO_HJR, CAMERA_ISO_DEBLUR},
+ { CameraParameters::ISO_100, CAMERA_ISO_100},
+ { CameraParameters::ISO_200, CAMERA_ISO_200},
+ { CameraParameters::ISO_400, CAMERA_ISO_400},
+ { CameraParameters::ISO_800, CAMERA_ISO_800 }
+};
+
+
#define DONT_CARE 0
static const str_map focus_modes[] = {
{ CameraParameters::FOCUS_MODE_AUTO, DONT_CARE },
{ CameraParameters::FOCUS_MODE_INFINITY, DONT_CARE }
};
+static const str_map lensshade[] = {
+ { CameraParameters::LENSSHADE_ENABLE, TRUE },
+ { CameraParameters::LENSSHADE_DISABLE, FALSE }
+};
+
static bool parameter_string_initialized = false;
static String8 preview_size_values;
static String8 picture_size_values;
@@ -475,6 +492,8 @@
static String8 whitebalance_values;
static String8 flash_values;
static String8 focus_mode_values;
+static String8 iso_values;
+static String8 lensshade_values;
static String8 create_sizes_str(const camera_size_type *sizes, int len) {
String8 str;
@@ -523,6 +542,7 @@
mPreviewFrameSize(0),
mRawSize(0),
mCameraControlFd(-1),
+ mBrightness(0),
mAutoFocusThreadRunning(false),
mAutoFocusFd(-1),
mInPreviewCallback(false),
@@ -558,6 +578,10 @@
flash, sizeof(flash) / sizeof(str_map));
focus_mode_values = create_values_str(
focus_modes, sizeof(focus_modes) / sizeof(str_map));
+ iso_values = create_values_str(
+ iso,sizeof(iso)/sizeof(str_map));
+ lensshade_values = create_values_str(
+ lensshade,sizeof(lensshade)/sizeof(str_map));
parameter_string_initialized = true;
}
@@ -608,10 +632,20 @@
flash_values);
}
+ mParameters.set("luma-adaptation", "18");
mParameters.set("zoom-supported", "true");
mParameters.set("max-zoom", MAX_ZOOM_LEVEL);
mParameters.set("zoom", 0);
+ mParameters.set(CameraParameters::KEY_ISO_MODE,
+ CameraParameters::ISO_AUTO);
+ mParameters.set(CameraParameters::KEY_LENSSHADE,
+ CameraParameters::LENSSHADE_ENABLE);
+ mParameters.set(CameraParameters::KEY_SUPPORTED_ISO_MODES,
+ iso_values);
+ mParameters.set(CameraParameters::KEY_SUPPORTED_LENSSHADE_MODES,
+ lensshade_values);
+
if (setParameters(mParameters) != NO_ERROR) {
LOGE("Failed to set default parameters?!");
}
@@ -1722,6 +1756,9 @@
if ((rc = setZoom(params))) final_rc = rc;
if ((rc = setFocusMode(params))) final_rc = rc;
if ((rc = setOrientation(params))) final_rc = rc;
+ if ((rc = setBrightness(params))) final_rc = rc;
+ if ((rc = setLensshadeValue(params))) final_rc = rc;
+ if ((rc = setISOValue(params))) final_rc = rc;
LOGV("setParameters: X");
return final_rc;
@@ -2158,6 +2195,20 @@
return BAD_VALUE;
}
+status_t QualcommCameraHardware::setBrightness(const CameraParameters& params) {
+ int brightness = params.getInt("luma-adaptation");
+ if (mBrightness != brightness) {
+ LOGV(" new brightness value : %d ", brightness);
+ mBrightness = brightness;
+
+ bool ret = native_set_parm(CAMERA_SET_PARM_BRIGHTNESS, sizeof(mBrightness),
+ (void *)&mBrightness);
+ return ret ? NO_ERROR : UNKNOWN_ERROR;
+ } else {
+ return NO_ERROR;
+ }
+}
+
status_t QualcommCameraHardware::setWhiteBalance(const CameraParameters& params)
{
const char *str = params.get(CameraParameters::KEY_WHITE_BALANCE);
@@ -2216,6 +2267,40 @@
return BAD_VALUE;
}
+status_t QualcommCameraHardware::setLensshadeValue(const CameraParameters& params)
+{
+ const char *str = params.get(CameraParameters::KEY_LENSSHADE);
+ if (str != NULL) {
+ int value = attr_lookup(lensshade,
+ sizeof(lensshade) / sizeof(str_map), str);
+ if (value != NOT_FOUND) {
+ int8_t temp = (int8_t)value;
+ mParameters.set(CameraParameters::KEY_LENSSHADE, str);
+ native_set_parm(CAMERA_SET_PARM_ROLLOFF, sizeof(int8_t), (void *)&temp);
+ return NO_ERROR;
+ }
+ }
+ LOGE("Invalid lensShade value: %s", (str == NULL) ? "NULL" : str);
+ return BAD_VALUE;
+}
+
+status_t QualcommCameraHardware::setISOValue(const CameraParameters& params) {
+ const char *str = params.get(CameraParameters::KEY_ISO_MODE);
+ if (str != NULL) {
+ int value = (camera_iso_mode_type)attr_lookup(
+ iso, sizeof(iso) / sizeof(str_map), str);
+ if (value != NOT_FOUND) {
+ camera_iso_mode_type temp = (camera_iso_mode_type) value;
+ mParameters.set(CameraParameters::KEY_ISO_MODE, str);
+ native_set_parm(CAMERA_SET_PARM_ISO, sizeof(camera_iso_mode_type), (void *)&temp);
+ return NO_ERROR;
+ }
+ }
+ LOGE("Invalid Iso value: %s", (str == NULL) ? "NULL" : str);
+ return BAD_VALUE;
+}
+
+
status_t QualcommCameraHardware::setGpsLocation(const CameraParameters& params)
{
const char *latitude = params.get(CameraParameters::KEY_GPS_LATITUDE);