diff options
author | Camera Software Integration <camswint@localhost> | 2017-02-28 04:42:18 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-02-28 04:42:18 -0800 |
commit | dea6b33f750a9675903dc4ff45779c7891d164ec (patch) | |
tree | 9e65853ba45bb3fafcbfc0b4804cada112bd5714 /src/com/android/camera | |
parent | 9a128da6c36a004c9278c606eb52f506e3a66ed3 (diff) | |
parent | f9b1301938574ac8236cff60d668dff28ac3f01e (diff) | |
download | android_packages_apps_Snap-dea6b33f750a9675903dc4ff45779c7891d164ec.tar.gz android_packages_apps_Snap-dea6b33f750a9675903dc4ff45779c7891d164ec.tar.bz2 android_packages_apps_Snap-dea6b33f750a9675903dc4ff45779c7891d164ec.zip |
Merge "SnapdragonCamera: Add zoom option to developer option" into camera.lnx.1.0-dev.1.0
Diffstat (limited to 'src/com/android/camera')
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 20 | ||||
-rwxr-xr-x | src/com/android/camera/PhotoMenu.java | 3 | ||||
-rwxr-xr-x | src/com/android/camera/PhotoModule.java | 59 | ||||
-rw-r--r-- | src/com/android/camera/VideoMenu.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 61 |
5 files changed, 144 insertions, 2 deletions
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 4bd88f755..2a8122872 100644 --- 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)); |