diff options
Diffstat (limited to 'src/com/android/camera/PhotoModule.java')
-rwxr-xr-x | src/com/android/camera/PhotoModule.java | 59 |
1 files changed, 59 insertions, 0 deletions
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; |