summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Wang <jaywang@codeaurora.org>2017-02-02 17:22:10 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-02-19 23:02:58 -0800
commitf9b1301938574ac8236cff60d668dff28ac3f01e (patch)
tree5f8d16bcf152fb725abab3cbedb143e361d28c43
parent3196565b3091f36a00428c0509c2bfd959c84b85 (diff)
downloadandroid_packages_apps_Snap-f9b1301938574ac8236cff60d668dff28ac3f01e.tar.gz
android_packages_apps_Snap-f9b1301938574ac8236cff60d668dff28ac3f01e.tar.bz2
android_packages_apps_Snap-f9b1301938574ac8236cff60d668dff28ac3f01e.zip
SnapdragonCamera: Add zoom option to developer option
For automation testing, we need a way to adjust the zoom without using the pinch gesture. Therefore, adding zoom option preference to the developer option. Change-Id: I37f8c1b4f51682cb398d0a5f779f45128bdc19ec
-rwxr-xr-xres/values/qcomarrays.xml29
-rwxr-xr-xres/values/qcomstrings.xml15
-rwxr-xr-xres/xml/camera_preferences.xml8
-rw-r--r--res/xml/video_preferences.xml6
-rwxr-xr-xsrc/com/android/camera/CameraSettings.java20
-rwxr-xr-xsrc/com/android/camera/PhotoMenu.java3
-rwxr-xr-xsrc/com/android/camera/PhotoModule.java59
-rw-r--r--src/com/android/camera/VideoMenu.java3
-rw-r--r--src/com/android/camera/VideoModule.java61
9 files changed, 202 insertions, 2 deletions
diff --git a/res/values/qcomarrays.xml b/res/values/qcomarrays.xml
index 02b4fbed2..c11056d9f 100755
--- a/res/values/qcomarrays.xml
+++ b/res/values/qcomarrays.xml
@@ -910,5 +910,34 @@
<item>90</item>
<item>100</item>
</string-array>
+ <!-- Camera Preferences zoom dialog box entries -->
+ <string-array name="pref_camera_zoom_entries" translatable="false">
+ <item>@string/pref_camera_zoom_entry_off</item>
+ <item>@string/pref_camera_zoom_entry_1x</item>
+ <item>@string/pref_camera_zoom_entry_2x</item>
+ <item>@string/pref_camera_zoom_entry_3x</item>
+ <item>@string/pref_camera_zoom_entry_4x</item>
+ <item>@string/pref_camera_zoom_entry_5x</item>
+ <item>@string/pref_camera_zoom_entry_6x</item>
+ <item>@string/pref_camera_zoom_entry_7x</item>
+ <item>@string/pref_camera_zoom_entry_8x</item>
+ <item>@string/pref_camera_zoom_entry_9x</item>
+ <item>@string/pref_camera_zoom_entry_10x</item>
+ </string-array>
+
+ <string-array name="pref_camera_zoom_entryvalues" translatable="false">
+ <item>@string/pref_camera_zoom_default</item>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ <item>5</item>
+ <item>6</item>
+ <item>7</item>
+ <item>8</item>
+ <item>9</item>
+ <item>10</item>
+ </string-array>
+
</resources>
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml
index 1693a88c6..5dcd4b5cb 100755
--- a/res/values/qcomstrings.xml
+++ b/res/values/qcomstrings.xml
@@ -1147,5 +1147,20 @@
<string name="pref_camera_bokeh_blur_degree_default" translatable="false">50</string>
<string name="pref_camera_bokeh_blur_degree_title" translatable="true">Bokeh Blur Value</string>
+ <!-- Default Zoom setting. -->
+ <string name="pref_camera_zoom_default" translatable="false">0</string>
+ <string name="pref_camera_zoom_title">Zoom</string>
+ <!-- Settings menu, Zoom choices -->
+ <string name="pref_camera_zoom_entry_off">Off</string>
+ <string name="pref_camera_zoom_entry_1x">1x</string>
+ <string name="pref_camera_zoom_entry_2x">2x</string>
+ <string name="pref_camera_zoom_entry_3x">3x</string>
+ <string name="pref_camera_zoom_entry_4x">4x</string>
+ <string name="pref_camera_zoom_entry_5x">5x</string>
+ <string name="pref_camera_zoom_entry_6x">6x</string>
+ <string name="pref_camera_zoom_entry_7x">7x</string>
+ <string name="pref_camera_zoom_entry_8x">8x</string>
+ <string name="pref_camera_zoom_entry_9x">9x</string>
+ <string name="pref_camera_zoom_entry_10x">10x</string>
</resources>
diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml
index ac723f92f..dc73d10da 100755
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -408,4 +408,12 @@
camera:title="@string/pref_camera2_camera2_title"
camera:entries="@array/pref_camera2_camera2_entries"
camera:entryValues="@array/pref_camera2_camera2_entryvalues" />
+
+ <ListPreference
+ camera:key="pref_camera_zoom_key"
+ camera:defaultValue="@string/pref_camera_zoom_default"
+ camera:title="@string/pref_camera_zoom_title"
+ camera:entries="@array/pref_camera_zoom_entries"
+ camera:entryValues="@array/pref_camera_zoom_entryvalues" />
+
</PreferenceGroup>
diff --git a/res/xml/video_preferences.xml b/res/xml/video_preferences.xml
index 2d9e2fbc8..3fafddda7 100644
--- a/res/xml/video_preferences.xml
+++ b/res/xml/video_preferences.xml
@@ -186,4 +186,10 @@
camera:title="@string/pref_camera_video_rotation_title"
camera:entries="@array/pref_camera_video_rotation_entries"
camera:entryValues="@array/pref_camera_video_rotation_entryvalues" />
+ <ListPreference
+ camera:key="pref_camera_zoom_key"
+ camera:defaultValue="@string/pref_camera_zoom_default"
+ camera:title="@string/pref_camera_zoom_title"
+ camera:entries="@array/pref_camera_zoom_entries"
+ camera:entryValues="@array/pref_camera_zoom_entryvalues" />
</PreferenceGroup>
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 4bd88f755..2a8122872 100755
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -127,6 +127,7 @@ public class CameraSettings {
public static final String KEY_LONGSHOT = "pref_camera_longshot_key";
public static final String KEY_INSTANT_CAPTURE = "pref_camera_instant_capture_key";
+ public static final String KEY_ZOOM = "pref_camera_zoom_key";
public static final String KEY_BOKEH_MODE = "pref_camera_bokeh_mode_key";
public static final String KEY_BOKEH_MPO = "pref_camera_bokeh_mpo_key";
@@ -662,6 +663,18 @@ public class CameraSettings {
}
+ private static List<String> getSupportedZoomLevel(Parameters params) {
+ ArrayList<String> supported = new ArrayList<String>();
+ int zoomMaxIdx = params.getMaxZoom();
+ List <Integer> zoomRatios = params.getZoomRatios();
+ int zoomMax = zoomRatios.get(zoomMaxIdx)/100;
+
+ for (int zoomLevel = 0; zoomLevel <= zoomMax; zoomLevel++) {
+ supported.add(String.valueOf(zoomLevel));
+ }
+ return supported;
+ }
+
private void qcomInitPreferences(PreferenceGroup group){
//Qcom Preference add here
ListPreference powerMode = group.findPreference(KEY_POWER_MODE);
@@ -702,6 +715,8 @@ public class CameraSettings {
ListPreference bokehMode = group.findPreference(KEY_BOKEH_MODE);
ListPreference bokehMpo = group.findPreference(KEY_BOKEH_MPO);
ListPreference bokehBlurDegree = group.findPreference(KEY_BOKEH_BLUR_VALUE);
+ ListPreference zoomLevel = group.findPreference(KEY_ZOOM);
+
if (instantCapture != null) {
if (!isInstantCaptureSupported(mParameters)) {
@@ -855,6 +870,11 @@ public class CameraSettings {
filterUnsupportedOptions(group,
manualExposure, getSupportedManualExposureModes(mParameters));
}
+
+ if (zoomLevel != null) {
+ filterUnsupportedOptions(group,
+ zoomLevel, getSupportedZoomLevel(mParameters));
+ }
}
private void initPreference(PreferenceGroup group) {
diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java
index 99226b2ec..eb3f4135a 100755
--- a/src/com/android/camera/PhotoMenu.java
+++ b/src/com/android/camera/PhotoMenu.java
@@ -239,7 +239,8 @@ public class PhotoMenu extends MenuController
CameraSettings.KEY_MANUAL_WB,
CameraSettings.KEY_MANUAL_FOCUS,
CameraSettings.KEY_SELFIE_MIRROR,
- CameraSettings.KEY_SHUTTER_SOUND
+ CameraSettings.KEY_SHUTTER_SOUND,
+ CameraSettings.KEY_ZOOM
};
initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher);
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index f3bec263a..afde62a7d 100755
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -360,6 +360,8 @@ public class PhotoModule
private float[] mR = new float[16];
private int mHeading = -1;
+ private static final int MAX_ZOOM = 10;
+ private int[] mZoomIdxTbl = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
// True if all the parameters needed to start preview is ready.
private boolean mCameraPreviewParamsReady = false;
@@ -3846,6 +3848,61 @@ public class PhotoModule
mParameters.setMeteringAreas(mFocusManager.getMeteringAreas());
}
}
+ private void setZoomMenuValue() {
+ String zoomMenuValue = mPreferences.getString(CameraSettings.KEY_ZOOM,
+ mActivity.getString(R.string.pref_camera_zoom_default));
+ if (!zoomMenuValue.equals("0")) {
+ int zoomValue = Integer.parseInt(zoomMenuValue);
+ if (mZoomIdxTbl[0] == -1) {
+ /* update the index table once */
+ Log.d(TAG, "Update the zoom index table.");
+ List<Integer> zoomRatios = mParameters.getZoomRatios();
+ int lastZoomIdx = 0;
+ for (int zoom = 1; zoom <= MAX_ZOOM; zoom++) {
+ int zoomIdx = zoomRatios.indexOf(zoom*100);
+ if (zoomIdx == -1) {
+ Log.d(TAG, "Can't find matching zoom value "+zoom);
+ int nextZoom = 0;
+ while ((++lastZoomIdx < zoomRatios.size()) &&
+ (nextZoom < (zoom*100))){
+ nextZoom = zoomRatios.get(lastZoomIdx);
+ zoomIdx = lastZoomIdx;
+ }
+ if (lastZoomIdx < zoomRatios.size()) {
+ zoomIdx = lastZoomIdx - 1;
+ } else {
+ break;
+ }
+ }
+ mZoomIdxTbl[zoom-1] = zoomIdx;
+ lastZoomIdx = zoomIdx;
+ }
+ }
+
+ if ((zoomValue <= mZoomIdxTbl.length) &&
+ (mZoomIdxTbl[zoomValue-1] != -1)) {
+ int step = 1;
+ int cur_zoom = mParameters.getZoom();
+ Log.d(TAG, "zoom index = "+mZoomIdxTbl[zoomValue-1]+", cur index = "+cur_zoom);
+ if (cur_zoom > mZoomIdxTbl[zoomValue-1]) {
+ step = -1;
+ }
+
+ /* move zoom slowly */
+ while (cur_zoom != mZoomIdxTbl[zoomValue-1]) {
+ cur_zoom += step;
+ mParameters.setZoom(cur_zoom);
+ try {
+ Thread.sleep(25);
+ } catch(InterruptedException e) {
+ }
+ }
+ mParameters.setZoom(mZoomIdxTbl[zoomValue-1]);
+ } else {
+ Log.e(TAG, "Zoom value "+zoomValue+" is not supported!");
+ }
+ }
+ }
/** This can run on a background thread, so don't do UI updates here.*/
private boolean updateCameraParametersPreference() {
@@ -4132,6 +4189,8 @@ public class PhotoModule
mParameters.set(CameraSettings.KEY_TS_MAKEUP_PARAM_CLEAN, makeupCleanValue);
}
+ setZoomMenuValue();
+
//QCom related parameters updated here.
qcomUpdateCameraParametersPreference();
return doGcamModeSwitch;
diff --git a/src/com/android/camera/VideoMenu.java b/src/com/android/camera/VideoMenu.java
index ea4415fe6..825c95df1 100644
--- a/src/com/android/camera/VideoMenu.java
+++ b/src/com/android/camera/VideoMenu.java
@@ -140,7 +140,8 @@ public class VideoMenu extends MenuController
CameraSettings.KEY_VIDEO_ROTATION,
CameraSettings.KEY_VIDEO_CDS_MODE,
CameraSettings.KEY_VIDEO_TNR_MODE,
- CameraSettings.KEY_VIDEO_SNAPSHOT_SIZE
+ CameraSettings.KEY_VIDEO_SNAPSHOT_SIZE,
+ CameraSettings.KEY_ZOOM
};
initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher);
}
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index d5351e297..0f5fe324a 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -216,6 +216,9 @@ public class VideoModule implements CameraModule,
private boolean mFaceDetectionEnabled = false;
private boolean mFaceDetectionStarted = false;
+ private static final int MAX_ZOOM = 10;
+ private int[] mZoomIdxTbl = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
+
private static final boolean PERSIST_4K_NO_LIMIT =
android.os.SystemProperties.getBoolean("persist.camcorder.4k.nolimit", false);
@@ -2269,11 +2272,69 @@ public class VideoModule implements CameraModule,
mIsFlipEnabled = false;
}
}
+ private void setZoomMenuValue() {
+ String zoomMenuValue = mPreferences.getString(CameraSettings.KEY_ZOOM,
+ mActivity.getString(R.string.pref_camera_zoom_default));
+ if (!zoomMenuValue.equals("0")) {
+ int zoomValue = Integer.parseInt(zoomMenuValue);
+ if (mZoomIdxTbl[0] == -1) {
+ /* update the index table once */
+ Log.d(TAG, "Update the zoom index table.");
+ List<Integer> zoomRatios = mParameters.getZoomRatios();
+ int lastZoomIdx = 0;
+ for (int zoom = 1; zoom <= MAX_ZOOM; zoom++) {
+ int zoomIdx = zoomRatios.indexOf(zoom*100);
+ if (zoomIdx == -1) {
+ Log.d(TAG, "Can't find matching zoom value "+zoom);
+ int nextZoom = 0;
+ while ((++lastZoomIdx < zoomRatios.size()) &&
+ (nextZoom < (zoom*100))){
+ nextZoom = zoomRatios.get(lastZoomIdx);
+ zoomIdx = lastZoomIdx;
+ }
+ if (lastZoomIdx < zoomRatios.size()) {
+ zoomIdx = lastZoomIdx - 1;
+ } else {
+ break;
+ }
+ }
+ mZoomIdxTbl[zoom-1] = zoomIdx;
+ lastZoomIdx = zoomIdx;
+ }
+ }
+
+ if ((zoomValue <= mZoomIdxTbl.length) &&
+ (mZoomIdxTbl[zoomValue-1] != -1)) {
+ int step = 1;
+ int cur_zoom = mParameters.getZoom();
+ Log.d(TAG, "zoom index = "+mZoomIdxTbl[zoomValue-1]+", cur index = "+cur_zoom);
+ if (cur_zoom > mZoomIdxTbl[zoomValue-1]) {
+ step = -1;
+ }
+
+ /* move zoom slowly */
+ while (cur_zoom != mZoomIdxTbl[zoomValue-1]) {
+ cur_zoom += step;
+ mParameters.setZoom(cur_zoom);
+ try {
+ Thread.sleep(25);
+ } catch(InterruptedException e) {
+ }
+ }
+
+ mParameters.setZoom(mZoomIdxTbl[zoomValue-1]);
+ } else {
+ Log.e(TAG, "Zoom value "+zoomValue+" is not supported!");
+ }
+ }
+ }
private void qcomSetCameraParameters(){
// add QCOM Parameters here
// Set color effect parameter.
Log.i(TAG,"NOTE: qcomSetCameraParameters " + videoWidth + " x " + videoHeight);
+
+ setZoomMenuValue();
String colorEffect = mPreferences.getString(
CameraSettings.KEY_COLOR_EFFECT,
mActivity.getString(R.string.pref_camera_coloreffect_default));