summaryrefslogtreecommitdiff
path: root/src/com/android/camera/CaptureModule.java
diff options
context:
space:
mode:
authorxianming wang <mingwax@codeaurora.org>2017-10-20 15:43:32 +0800
committerxianming wang <mingwax@codeaurora.org>2017-10-20 16:25:50 +0800
commit5e90702e94fc9dfc7ba17e758dcfd87697cd6de1 (patch)
tree6f208d1fb42d8d5fb2e0b193d1d4ec7bfe6c214f /src/com/android/camera/CaptureModule.java
parentcef1351155f01f810d1fd564f0b5fcfdf9194ebe (diff)
SnapdragonCamera: Completement Manual ISO and Exposure function
Complement the Manual ISO and EXPOSURE function. Change-Id: I8f249eaa85f797465a4515bc70c6a7a03bbe46b1 CRs-Fixed: 2128698
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rwxr-xr-xsrc/com/android/camera/CaptureModule.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 03ec05859..0ded05be0 100755
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -26,6 +26,7 @@ import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.content.SharedPreferences;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
@@ -221,6 +222,11 @@ public class CaptureModule implements CameraModule, PhotoController,
public static final CaptureRequest.Key<Byte> histMode =
new CaptureRequest.Key<>("org.codeaurora.qcamera3.histogram.enable", byte.class);
+ public static CameraCharacteristics.Key<int[]> ISO_AVAILABLE_MODES =
+ new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.iso_exp_priority.iso_available_modes", int[].class);
+ public static CameraCharacteristics.Key<long[]> EXPOSURE_RANGE =
+ new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.iso_exp_priority.exposure_time_range", long[].class);
+
public static CameraCharacteristics.Key<Integer> buckets =
new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.histogram.buckets", Integer.class);
public static CameraCharacteristics.Key<Integer> maxCount =
@@ -4229,6 +4235,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private void applyIso(CaptureRequest.Builder request) {
String value = mSettingsManager.getValue(SettingsManager.KEY_ISO);
+ if (applyManualIsoExposure(request)) return;
if (value == null) return;
if (value.equals("auto")) {
VendorTagUtil.setIsoExpPrioritySelectPriority(request, 0);
@@ -4252,6 +4259,75 @@ public class CaptureModule implements CameraModule, PhotoController,
request.set(CaptureRequest.SENSOR_EXPOSURE_TIME, null);
request.set(CaptureRequest.SENSOR_SENSITIVITY, null);
}
+
+ }
+
+ private boolean applyManualIsoExposure(CaptureRequest.Builder request) {
+ boolean result = false;
+ final SharedPreferences pref = mActivity.getSharedPreferences(
+ ComboPreferences.getLocalSharedPreferencesName(mActivity, getMainCameraId()),
+ Context.MODE_PRIVATE);
+ String isoPriority = mActivity.getString(
+ R.string.pref_camera_manual_exp_value_ISO_priority);
+ String expTimePriority = mActivity.getString(
+ R.string.pref_camera_manual_exp_value_exptime_priority);
+ String userSetting = mActivity.getString(
+ R.string.pref_camera_manual_exp_value_user_setting);
+ String manualExposureMode = mSettingsManager.getValue(SettingsManager.KEY_MANUAL_EXPOSURE);
+ if (manualExposureMode.equals(isoPriority)) {
+ long isoValue = Long.parseLong(pref.getString(SettingsManager.KEY_MANUAL_ISO_VALUE,
+ "100"));
+ VendorTagUtil.setIsoExpPrioritySelectPriority(request, 0);
+ VendorTagUtil.setIsoExpPriority(request, isoValue);
+ if (DEBUG) {
+ Log.v(TAG, "manual ISO value :" + isoValue);
+ }
+ if (request.get(CaptureRequest.SENSOR_EXPOSURE_TIME) != null) {
+ mIsoExposureTime = request.get(CaptureRequest.SENSOR_EXPOSURE_TIME);
+ }
+ if (request.get(CaptureRequest.SENSOR_SENSITIVITY) != null) {
+ mIsoSensitivity = request.get(CaptureRequest.SENSOR_SENSITIVITY);
+ }
+ request.set(CaptureRequest.SENSOR_EXPOSURE_TIME, null);
+ request.set(CaptureRequest.SENSOR_SENSITIVITY, null);
+ result = true;
+ } else if (manualExposureMode.equals(expTimePriority)) {
+ long newExpTime = -1;
+ String expTime = pref.getString(SettingsManager.KEY_MANUAL_EXPOSURE_VALUE, "0");
+ try {
+ newExpTime = Long.parseLong(expTime);
+ } catch (NumberFormatException e) {
+ Log.w(TAG, "Input expTime " + expTime + " is invalid");
+ newExpTime = Long.parseLong(expTime);
+ }
+
+ if (DEBUG) {
+ Log.v(TAG, "manual Exposure value :" + newExpTime);
+ }
+ VendorTagUtil.setIsoExpPrioritySelectPriority(request, 1);
+ VendorTagUtil.setIsoExpPriority(request, newExpTime);
+ request.set(CaptureRequest.SENSOR_SENSITIVITY, null);
+ result = true;
+ } else if (manualExposureMode.equals(userSetting)) {
+ request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
+ int isoValue = Integer.parseInt(pref.getString(SettingsManager.KEY_MANUAL_ISO_VALUE,
+ "100"));
+ long newExpTime = -1;
+ String expTime = pref.getString(SettingsManager.KEY_MANUAL_EXPOSURE_VALUE, "0");
+ try {
+ newExpTime = Long.parseLong(expTime);
+ } catch (NumberFormatException e) {
+ Log.w(TAG, "Input expTime " + expTime + " is invalid");
+ newExpTime = Long.parseLong(expTime);
+ }
+ if (DEBUG) {
+ Log.v(TAG, "manual ISO value : " + isoValue + ", Exposure value :" + newExpTime);
+ }
+ request.set(CaptureRequest.SENSOR_EXPOSURE_TIME, newExpTime);
+ request.set(CaptureRequest.SENSOR_SENSITIVITY, isoValue);
+ result = true;
+ }
+ return result;
}
private void applyColorEffect(CaptureRequest.Builder request) {