summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorByunghun Jeon <bjeon@codeaurora.org>2016-05-10 13:53:36 -0700
committerSteve Kondik <steve@cyngn.com>2016-08-21 18:45:51 -0700
commit560d0f0cbf28e26aacdf27472fd00f33d7f4d572 (patch)
treefd796b845be039cee6f2a10c94fc088de9cf8123
parentcba1a4ed8028cb355e1361ef29b177c0b4910b5a (diff)
downloadandroid_packages_apps_Snap-560d0f0cbf28e26aacdf27472fd00f33d7f4d572.tar.gz
android_packages_apps_Snap-560d0f0cbf28e26aacdf27472fd00f33d7f4d572.tar.bz2
android_packages_apps_Snap-560d0f0cbf28e26aacdf27472fd00f33d7f4d572.zip
SnapdragonCamera: Add ISO and exposure
Add ISO and exposure to CaptureModule Change-Id: If6f3c142bcfbbcc049c10d7be2fe5a4c86d31fe6 CRs-Fixed: 1018118
-rw-r--r--res/values/camera2arrays.xml14
-rw-r--r--res/xml/capture_preferences.xml14
-rw-r--r--src/com/android/camera/CaptureModule.java21
-rw-r--r--src/com/android/camera/CaptureUI.java4
-rw-r--r--src/com/android/camera/SettingsManager.java67
5 files changed, 112 insertions, 8 deletions
diff --git a/res/values/camera2arrays.xml b/res/values/camera2arrays.xml
index 9865e3900..f4ac13e8c 100644
--- a/res/values/camera2arrays.xml
+++ b/res/values/camera2arrays.xml
@@ -507,7 +507,6 @@
<!-- Camera Preferences ISO dialog box entries -->
<string-array name="pref_camera2_iso_entries">
<item>@string/pref_camera_iso_entry_auto</item>
- <item>@string/pref_camera_iso_entry_isodeblur</item>
<item>@string/pref_camera_iso_entry_iso100</item>
<item>@string/pref_camera_iso_entry_iso200</item>
<item>@string/pref_camera_iso_entry_iso400</item>
@@ -517,13 +516,12 @@
<!-- Do not localize entryvalues -->
<string-array name="pref_camera2_iso_entryvalues">
- <item>@string/pref_camera_iso_value_auto</item>
- <item>@string/pref_camera_iso_value_isodeblur</item>
- <item>@string/pref_camera_iso_value_iso100</item>
- <item>@string/pref_camera_iso_value_iso200</item>
- <item>@string/pref_camera_iso_value_iso400</item>
- <item>@string/pref_camera_iso_value_iso800</item>
- <item>@string/pref_camera_iso_value_iso1600</item>
+ <item>auto</item>
+ <item>100</item>
+ <item>200</item>
+ <item>400</item>
+ <item>800</item>
+ <item>1600</item>
</string-array>
<!-- Camera Preferences Auto Exposure dialog box entries -->
diff --git a/res/xml/capture_preferences.xml b/res/xml/capture_preferences.xml
index 59803aeb8..7ee4ae465 100644
--- a/res/xml/capture_preferences.xml
+++ b/res/xml/capture_preferences.xml
@@ -151,4 +151,18 @@
camera:key="pref_camera2_picturesize_key"
camera:singleIcon="@drawable/ic_settings_picturesize"
camera:title="@string/pref_camera_picturesize_title"/>
+
+ <IconListPreference
+ camera:defaultValue="@string/pref_exposure_default"
+ camera:key="pref_camera2_exposure_key"
+ camera:singleIcon="@drawable/ic_settings_exposure"
+ camera:title="@string/pref_exposure_title"/>
+
+ <IconListPreference
+ camera:defaultValue="@string/pref_camera_iso_default"
+ camera:entries="@array/pref_camera2_iso_entries"
+ camera:entryValues="@array/pref_camera2_iso_entryvalues"
+ camera:key="pref_camera2_iso_key"
+ camera:singleIcon="@drawable/ic_settings_iso"
+ camera:title="@string/pref_camera_iso_title"/>
</PreferenceGroup>
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 574fe4daf..c31658ae8 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -960,6 +960,8 @@ public class CaptureModule implements CameraModule, PhotoController,
builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode);
applyWhiteBalance(builder);
+ applyExposure(builder);
+ applyIso(builder);
applyColorEffect(builder);
applySceneMode(builder);
applyZoom(builder, id);
@@ -1431,6 +1433,10 @@ public class CaptureModule implements CameraModule, PhotoController,
updatePreview = true;
applySceneMode(mPreviewRequestBuilder[cameraId]);
break;
+ case SettingsManager.KEY_EXPOSURE:
+ updatePreview = true;
+ applyExposure(mPreviewRequestBuilder[cameraId]);
+ break;
}
return updatePreview;
}
@@ -1469,6 +1475,21 @@ public class CaptureModule implements CameraModule, PhotoController,
}
}
+ private void applyExposure(CaptureRequest.Builder request) {
+ String value = mSettingsManager.getValue(SettingsManager.KEY_EXPOSURE);
+ if (value == null) return;
+ int intValue = Integer.parseInt(value);
+ request.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, intValue);
+ }
+
+ private void applyIso(CaptureRequest.Builder request) {
+ String value = mSettingsManager.getValue(SettingsManager.KEY_ISO);
+ if (value == null) return;
+ if (value.equals("auto")) return;
+ int intValue = Integer.parseInt(value);
+ request.set(CaptureRequest.SENSOR_SENSITIVITY, intValue);
+ }
+
private void applyColorEffect(CaptureRequest.Builder request) {
String value = mSettingsManager.getValue(SettingsManager.KEY_COLOR_EFFECT);
if (value == null) return;
diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java
index 0060f2c8b..c26d90eea 100644
--- a/src/com/android/camera/CaptureUI.java
+++ b/src/com/android/camera/CaptureUI.java
@@ -88,6 +88,8 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
SettingsManager.KEY_PICTURE_SIZE,
SettingsManager.KEY_JPEG_QUALITY,
SettingsManager.KEY_CAMERA_SAVEPATH,
+ SettingsManager.KEY_ISO,
+ SettingsManager.KEY_EXPOSURE,
SettingsManager.KEY_WHITE_BALANCE,
SettingsManager.KEY_CAMERA2,
SettingsManager.KEY_DUAL_CAMERA,
@@ -99,6 +101,8 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
SettingsManager.KEY_PICTURE_SIZE,
SettingsManager.KEY_JPEG_QUALITY,
SettingsManager.KEY_CAMERA_SAVEPATH,
+ SettingsManager.KEY_ISO,
+ SettingsManager.KEY_EXPOSURE,
SettingsManager.KEY_WHITE_BALANCE,
SettingsManager.KEY_CAMERA2,
SettingsManager.KEY_DUAL_CAMERA,
diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java
index 09bee5e66..a79b642b5 100644
--- a/src/com/android/camera/SettingsManager.java
+++ b/src/com/android/camera/SettingsManager.java
@@ -37,12 +37,15 @@ import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.util.Log;
+import android.util.Range;
+import android.util.Rational;
import android.util.Size;
import com.android.camera.ui.ListMenu;
import org.codeaurora.snapcam.R;
+import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -350,6 +353,8 @@ public class SettingsManager implements ListMenu.SettingsListener {
ListPreference sceneMode = mPreferenceGroup.findPreference(KEY_SCENE_MODE);
ListPreference cameraIdPref = mPreferenceGroup.findPreference(KEY_CAMERA_ID);
ListPreference pictureSize = mPreferenceGroup.findPreference(KEY_PICTURE_SIZE);
+ ListPreference exposure = mPreferenceGroup.findPreference(KEY_EXPOSURE);
+ ListPreference iso = mPreferenceGroup.findPreference(KEY_ISO);
if (whiteBalance != null) {
CameraSettings.filterUnsupportedOptions(mPreferenceGroup,
@@ -376,6 +381,52 @@ public class SettingsManager implements ListMenu.SettingsListener {
CameraSettings.filterUnsupportedOptions(mPreferenceGroup,
pictureSize, getSupportedPictureSize(cameraId));
}
+
+ if (exposure != null) buildExposureCompensation(cameraId);
+
+ if (iso != null) {
+ CameraSettings.filterUnsupportedOptions(mPreferenceGroup,
+ iso, getSupportedIso(cameraId));
+ }
+ }
+
+ private void buildExposureCompensation(int cameraId) {
+ Range<Integer> range = mCharacteristics.get(cameraId).get(CameraCharacteristics
+ .CONTROL_AE_COMPENSATION_RANGE);
+ int max = range.getUpper();
+ int min = range.getLower();
+ if (min == 0 && max == 0) {
+ removePreference(mPreferenceGroup, KEY_EXPOSURE);
+ return;
+ }
+ ListPreference pref = mPreferenceGroup.findPreference(KEY_EXPOSURE);
+ Rational rational = mCharacteristics.get(cameraId).get(CameraCharacteristics
+ .CONTROL_AE_COMPENSATION_STEP);
+ double step = rational.doubleValue();
+ int increment = 1;
+ while ((max - min) / increment > 10) {
+ increment++;
+ }
+ int start = min;
+ if (start < 0) {
+ while (Math.abs(start) % increment != 0) {
+ start++;
+ }
+ }
+ int size = 0;
+ for (int i = start; i <= max; i += increment) size++;
+ CharSequence entries[] = new CharSequence[size];
+ CharSequence entryValues[] = new CharSequence[size];
+ int count = 0;
+ for (int i = start; i <= max; i += increment, count++) {
+ entryValues[count] = Integer.toString(i);
+ StringBuilder builder = new StringBuilder();
+ if (i > 0) builder.append('+');
+ DecimalFormat format = new DecimalFormat("#.##");
+ entries[count] = builder.append(format.format(i * step)).toString();
+ }
+ pref.setEntries(entries);
+ pref.setEntryValues(entryValues);
}
private void buildCameraId() {
@@ -512,6 +563,22 @@ public class SettingsManager implements ListMenu.SettingsListener {
return modes;
}
+ private List<String> getSupportedIso(int cameraId) {
+ Range<Integer> range = mCharacteristics.get(cameraId).get(CameraCharacteristics
+ .SENSOR_INFO_SENSITIVITY_RANGE);
+ int max = range.getUpper();
+ int value = 50;
+ List<String> supportedIso = new ArrayList<>();
+ supportedIso.add("auto");
+ while (value <= max) {
+ if (range.contains(value)) {
+ supportedIso.add("" + value);
+ }
+ value += 50;
+ }
+ return supportedIso;
+ }
+
public interface Listener {
void onSettingsChanged(List<SettingState> settings);
}