diff options
author | Byunghun Jeon <bjeon@codeaurora.org> | 2016-05-10 13:53:36 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-05-31 13:21:41 -0700 |
commit | 0587d0eb74f9bf352370664fbfbe72b604cd18c1 (patch) | |
tree | e3fdb81c7bc9b1aef65580c172f0eb061bf68c7f /src/com/android/camera/SettingsManager.java | |
parent | 0fdbb4a33a2deb480f877b904203c7f04ef507d0 (diff) | |
download | android_packages_apps_Snap-0587d0eb74f9bf352370664fbfbe72b604cd18c1.tar.gz android_packages_apps_Snap-0587d0eb74f9bf352370664fbfbe72b604cd18c1.tar.bz2 android_packages_apps_Snap-0587d0eb74f9bf352370664fbfbe72b604cd18c1.zip |
SnapdragonCamera: Add ISO and exposure
Add ISO and exposure to CaptureModule
Change-Id: If6f3c142bcfbbcc049c10d7be2fe5a4c86d31fe6
CRs-Fixed: 1018118
Diffstat (limited to 'src/com/android/camera/SettingsManager.java')
-rw-r--r-- | src/com/android/camera/SettingsManager.java | 67 |
1 files changed, 67 insertions, 0 deletions
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); } |