diff options
-rwxr-xr-x | res/values/qcomarrays.xml | 29 | ||||
-rwxr-xr-x | res/values/qcomstrings.xml | 15 | ||||
-rwxr-xr-x | res/xml/camera_preferences.xml | 8 | ||||
-rw-r--r-- | res/xml/video_preferences.xml | 6 | ||||
-rwxr-xr-x | 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 |
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)); |