diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/BestpictureActivity.java | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/camera/CameraSettings.java | 64 | ||||
-rw-r--r--[-rwxr-xr-x] | src/com/android/camera/CaptureModule.java | 23 | ||||
-rw-r--r--[-rwxr-xr-x] | src/com/android/camera/CaptureUI.java | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/camera/PhotoMenu.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 106 | ||||
-rwxr-xr-x | src/com/android/camera/imageprocessor/PostProcessor.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/ui/CameraControls.java | 2 | ||||
-rwxr-xr-x | src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java | 5 |
9 files changed, 191 insertions, 19 deletions
diff --git a/src/com/android/camera/BestpictureActivity.java b/src/com/android/camera/BestpictureActivity.java index cf285c2eb..6eaa2a3d0 100644 --- a/src/com/android/camera/BestpictureActivity.java +++ b/src/com/android/camera/BestpictureActivity.java @@ -257,7 +257,7 @@ public class BestpictureActivity extends FragmentActivity { private void initOverFlow(View v) { View popView = getLayoutInflater().inflate(R.layout.overflow, null); - PopupWindow pop = new PopupWindow(popView, CameraUtil.dip2px(BestpictureActivity.this, 150), + final PopupWindow pop = new PopupWindow(popView, CameraUtil.dip2px(BestpictureActivity.this, 150), CameraUtil.dip2px(BestpictureActivity.this, 100), true); pop.setOutsideTouchable(true); pop.showAtLocation(v, Gravity.RIGHT | Gravity.TOP, @@ -398,7 +398,7 @@ public class BestpictureActivity extends FragmentActivity { }); } - private void initSaveDialog(int mode, int choosenCount) { + private void initSaveDialog(int mode, final int choosenCount) { BestPictureActionDialogLayout layout = getDialogLayout(mode); layout.setDialogDataControler(mDialogRoot, new BestPictureActionDialogLayout diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 069fb8701..4bd88f755 100644..100755 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -23,6 +23,7 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.BitmapFactory; import android.hardware.Camera; import android.hardware.Camera.CameraInfo; import android.hardware.Camera.Parameters; @@ -127,6 +128,10 @@ 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_BOKEH_MODE = "pref_camera_bokeh_mode_key"; + public static final String KEY_BOKEH_MPO = "pref_camera_bokeh_mpo_key"; + public static final String KEY_BOKEH_BLUR_VALUE = "pref_camera_bokeh_blur_degree_key"; + private static final String KEY_QC_SUPPORTED_AE_BRACKETING_MODES = "ae-bracket-hdr-values"; private static final String KEY_QC_SUPPORTED_AF_BRACKETING_MODES = "af-bracket-values"; private static final String KEY_QC_SUPPORTED_RE_FOCUS_MODES = "re-focus-values"; @@ -241,6 +246,14 @@ public class CameraSettings { public static final String KEY_QC_SUPPORTED_MANUAL_EXPOSURE_MODES = "manual-exposure-modes"; public static final String KEY_QC_SUPPORTED_MANUAL_WB_MODES = "manual-wb-modes"; + //Bokeh + public static final String KEY_QC_IS_BOKEH_MODE_SUPPORTED = "is-bokeh-supported"; + public static final String KEY_QC_IS_BOKEH_MPO_SUPPORTED = "is-bokeh-mpo-supported"; + public static final String KEY_QC_BOKEH_MODE = "bokeh-mode"; + public static final String KEY_QC_BOKEH_MPO_MODE = "bokeh-mpo-mode"; + public static final String KEY_QC_SUPPORTED_DEGREES_OF_BLUR = "supported-blur-degrees"; + public static final String KEY_QC_BOKEH_BLUR_VALUE = "bokeh-blur-value"; + public static final String KEY_TS_MAKEUP_UILABLE = "pref_camera_tsmakeup_key"; public static final String KEY_TS_MAKEUP_PARAM = "tsmakeup"; // on/of public static final String KEY_TS_MAKEUP_PARAM_WHITEN = "tsmakeup_whiten"; // 0~100 @@ -686,6 +699,9 @@ public class CameraSettings { ListPreference manualExposure = group.findPreference(KEY_MANUAL_EXPOSURE); ListPreference manualWB = group.findPreference(KEY_MANUAL_WB); ListPreference instantCapture = group.findPreference(KEY_INSTANT_CAPTURE); + ListPreference bokehMode = group.findPreference(KEY_BOKEH_MODE); + ListPreference bokehMpo = group.findPreference(KEY_BOKEH_MPO); + ListPreference bokehBlurDegree = group.findPreference(KEY_BOKEH_BLUR_VALUE); if (instantCapture != null) { if (!isInstantCaptureSupported(mParameters)) { @@ -693,6 +709,19 @@ public class CameraSettings { } } + if (bokehMode != null) { + if (!isBokehModeSupported(mParameters)) { + removePreference(group, bokehMode.getKey()); + removePreference(group, bokehBlurDegree.getKey()); + } + } + + if (bokehMpo != null) { + if (!isBokehMPOSupported(mParameters)) { + removePreference(group, bokehMpo.getKey()); + } + } + if (hdr_need_1x != null) { filterUnsupportedOptions(group, hdr_need_1x, getSupportedHDRNeed1x(mParameters)); @@ -1027,6 +1056,10 @@ public class CameraSettings { return; } +// if (numOfCameras > 2 ) { +// numOfCameras = 2; +// } + CharSequence[] entryValues = new CharSequence[numOfCameras]; for (int i = 0; i < numOfCameras; ++i) { entryValues[i] = "" + i; @@ -1427,4 +1460,35 @@ public class CameraSettings { } return ret; } + + public static boolean isBokehModeSupported(Parameters params) { + boolean ret = false; + if (null != params) { + String val = params.get(KEY_QC_IS_BOKEH_MODE_SUPPORTED); + if ("1".equals(val)) { + ret = true; + } + } + return ret; + } + + public static boolean isBokehMPOSupported(Parameters params) { + boolean ret = false; + if (null != params) { + String val = params.get(KEY_QC_IS_BOKEH_MPO_SUPPORTED); + if ("1".equals(val)) { + ret = true; + } + } + return ret; + } + + public static List<String> getSupportedDegreesOfBlur(Parameters params) { + String str = params.get(KEY_QC_SUPPORTED_DEGREES_OF_BLUR); + if (str == null) { + return null; + } + Log.d(TAG,"getSupportedDegreesOfBlur str =" +str); + return split(str); + } } diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index b06bd2d12..0a8da719d 100755..100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -556,17 +556,16 @@ public class CaptureModule implements CameraModule, PhotoController, updateFocusStateChange(result); Face[] faces = result.get(CaptureResult.STATISTICS_FACES); updateFaceView(faces); - - if (SettingsManager.getInstance().isHistogramSupport()) { - int[] histogramStats = result.get(CaptureModule.histogramStats); - if (histogramStats != null && mHiston) { + } + if (SettingsManager.getInstance().isHistogramSupport()) { + int[] histogramStats = result.get(CaptureModule.histogramStats); + if (histogramStats != null && mHiston) { /*The first element in the array stores max hist value . Stats data begin from second value*/ - synchronized (statsdata) { - System.arraycopy(histogramStats, 0, statsdata, 0, 1024); - } - updateGraghView(); + synchronized (statsdata) { + System.arraycopy(histogramStats, 0, statsdata, 0, 1024); } + updateGraghView(); } } processCaptureResult(result); @@ -1233,7 +1232,8 @@ public class CaptureModule implements CameraModule, PhotoController, mJpegImageData = data; } - public void showCapturedReview(final byte[] jpegData, int orientation, boolean mirror) { + public void showCapturedReview(final byte[] jpegData, final int orientation, + final boolean mirror) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { @@ -1724,7 +1724,7 @@ public class CaptureModule implements CameraModule, PhotoController, ExifInterface exif = Exif.getExif(bytes); int orientation = Exif.getOrientation(exif); - if (getCameraMode() != CaptureModule.INTENT_MODE_NORMAL) { + if (mIntentMode != CaptureModule.INTENT_MODE_NORMAL) { mJpegImageData = bytes; if (!mQuickCapture) { showCapturedReview(bytes, orientation, @@ -3868,7 +3868,7 @@ public class CaptureModule implements CameraModule, PhotoController, private void applyHistogram(CaptureRequest.Builder request) { String value = mSettingsManager.getValue(SettingsManager.KEY_HISTOGRAM); - if (value != null && isBackCamera()) { + if (value != null ) { if (value.equals("enable")){ final byte enable = 1; request.set(CaptureModule.histMode, enable); @@ -4275,6 +4275,7 @@ public class CaptureModule implements CameraModule, PhotoController, return; case SettingsManager.KEY_FLASH_MODE: case SettingsManager.KEY_SAVERAW: + case SettingsManager.KEY_HDR: if (count == 0) restartSession(false); return; case SettingsManager.KEY_SCENE_MODE: diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index 2ef89abdf..43e53c56a 100755..100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -391,7 +391,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, mFaceView = (Camera2FaceView) mRootView.findViewById(R.id.face_view); mCancelButton = (ImageView) mRootView.findViewById(R.id.cancel_button); - int intentMode = mModule.getCurrentIntentMode(); + final int intentMode = mModule.getCurrentIntentMode(); if (intentMode != CaptureModule.INTENT_MODE_NORMAL) { mCameraControls.setIntentMode(intentMode); mCameraControls.setVideoMode(false); diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index 991b4a367..99226b2ec 100644..100755 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -233,6 +233,8 @@ public class PhotoMenu extends MenuController CameraSettings.KEY_ADVANCED_FEATURES, CameraSettings.KEY_AE_BRACKET_HDR, CameraSettings.KEY_INSTANT_CAPTURE, + CameraSettings.KEY_BOKEH_MODE, + CameraSettings.KEY_BOKEH_MPO, CameraSettings.KEY_MANUAL_EXPOSURE, CameraSettings.KEY_MANUAL_WB, CameraSettings.KEY_MANUAL_FOCUS, diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index ecdae4dd3..0db14c43e 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -231,6 +231,7 @@ public class PhotoModule private ProgressBar brightnessProgressBar; // Constant from android.hardware.Camera.Parameters private static final String KEY_PICTURE_FORMAT = "picture-format"; + private SeekBar mBlurDegreeProgressBar; private static final String KEY_QC_RAW_PICUTRE_SIZE = "raw-size"; public static final String PIXEL_FORMAT_JPEG = "jpeg"; @@ -594,6 +595,9 @@ public class PhotoModule mSensorManager = (SensorManager)(mActivity.getSystemService(Context.SENSOR_SERVICE)); brightnessProgressBar = (ProgressBar)mRootView.findViewById(R.id.progress); + mBlurDegreeProgressBar = (SeekBar)mRootView.findViewById(R.id.blur_degree_bar); + mBlurDegreeProgressBar.setOnSeekBarChangeListener(mBlurDegreeListener); + mBlurDegreeProgressBar.setMax(100); if (brightnessProgressBar instanceof SeekBar) { SeekBar seeker = (SeekBar) brightnessProgressBar; seeker.setOnSeekBarChangeListener(mSeekListener); @@ -1279,13 +1283,18 @@ public class PhotoModule } } - private byte[] flipJpeg(byte[] jpegData, int orientation) { + private byte[] flipJpeg(byte[] jpegData, int orientation, int jpegOrientation) { Bitmap srcBitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length); Matrix m = new Matrix(); if(orientation == 270) { m.preScale(-1, 1); } else { //if it's 90 - m.preScale(1, -1); + // Judge whether the picture or phone is horizontal screen + if (jpegOrientation == 0 || jpegOrientation == 180) { + m.preScale(-1, 1); + } else { // the picture or phone is Vertical screen + m.preScale(1, -1); + } } Bitmap dstBitmap = Bitmap.createBitmap(srcBitmap, 0, 0, srcBitmap.getWidth(), srcBitmap.getHeight(), m, false); dstBitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT); @@ -1415,7 +1424,7 @@ public class PhotoModule if (selfieMirrorPref != null && selfieMirrorPref.getValue() != null && selfieMirrorPref.getValue().equalsIgnoreCase("enable")) { CameraInfo info = CameraHolder.instance().getCameraInfo()[mCameraId]; - jpegData = flipJpeg(jpegData, info.orientation); + jpegData = flipJpeg(jpegData, info.orientation, orientation); jpegData = addExifTags(jpegData, orientation); } } @@ -1554,7 +1563,7 @@ public class PhotoModule private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() { public void onStartTrackingTouch(SeekBar bar) { - // no support + // no support } public void onProgressChanged(SeekBar bar, int progress, boolean fromtouch) { } @@ -1562,6 +1571,24 @@ public class PhotoModule } }; + private OnSeekBarChangeListener mBlurDegreeListener = new OnSeekBarChangeListener() { + public void onStartTrackingTouch(SeekBar bar) { + } + public void onProgressChanged(SeekBar bar, int progress, boolean fromtouch) { + if (mPreferenceGroup != null) { + ListPreference blurValue = mPreferenceGroup.findPreference( + CameraSettings.KEY_BOKEH_BLUR_VALUE); + if (blurValue != null) { + blurValue.setValue(""+progress); + } + } + mParameters.set(CameraSettings.KEY_QC_BOKEH_BLUR_VALUE, progress); + Log.d(TAG,"seekbar bokeh degree = "+ progress); + } + public void onStopTrackingTouch(SeekBar bar) { + } + }; + private final class AutoFocusCallback implements CameraAFCallback { @Override public void onAutoFocus( @@ -3625,7 +3652,6 @@ public class PhotoModule + mInstantCaptureSnapShot); mParameters.set(CameraSettings.KEY_QC_INSTANT_CAPTURE, instantCapture); - //Set Histogram String histogram = mPreferences.getString( CameraSettings.KEY_HISTOGRAM, @@ -3669,6 +3695,67 @@ public class PhotoModule !mFocusManager.isFocusCompleted()) { mUI.clearFocus(); } + + String bokehMode = mPreferences.getString( + CameraSettings.KEY_BOKEH_MODE, + mActivity.getString(R.string.pref_camera_bokeh_mode_default)); + String bokehMpo = mPreferences.getString( + CameraSettings.KEY_BOKEH_MPO, + mActivity.getString(R.string.pref_camera_bokeh_mpo_default)); + String bokehBlurDegree = mPreferences.getString( + CameraSettings.KEY_BOKEH_BLUR_VALUE, + mActivity.getString(R.string.pref_camera_bokeh_blur_degree_default)); + CameraSettings.getSupportedDegreesOfBlur(mParameters); + + if (!bokehMode.equals(mActivity.getString( + R.string.pref_camera_bokeh_mode_entry_value_disable))) { + if(!zsl.equals("on")) { + mParameters.setZSLMode("on"); + } + if(mParameters.getSceneMode() != Parameters.SCENE_MODE_AUTO) { + mParameters.setSceneMode(Parameters.SCENE_MODE_AUTO); + } + if(mParameters.getFlashMode() != Parameters.FLASH_MODE_OFF) { + mParameters.setFlashMode(Parameters.FLASH_MODE_OFF); + } + if(mParameters.get("long-shot").equals(mActivity.getString(R.string.setting_on_value))) { + mParameters.set("long-shot",mActivity.getString(R.string.setting_off_value)); + } + if(mManual3AEnabled != 0) { + mManual3AEnabled = 0; + } + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + mUI.overrideSettings(CameraSettings.KEY_SCENE_MODE, + mActivity.getString(R.string.pref_camera_scenemode_default)); + mUI.overrideSettings(CameraSettings.KEY_ZSL, + mActivity.getString(R.string.pref_camera_zsl_value_on)); + mUI.overrideSettings(CameraSettings.KEY_FLASH_MODE, "off"); + mUI.overrideSettings(CameraSettings.KEY_LONGSHOT, + mActivity.getString(R.string.pref_camera_longshot_default)); + mBlurDegreeProgressBar.setVisibility(View.VISIBLE); + mBlurDegreeProgressBar.setProgress(50); + } + }); + mParameters.set(CameraSettings.KEY_QC_BOKEH_MODE, bokehMode); + mParameters.set(CameraSettings.KEY_QC_BOKEH_MPO_MODE, bokehMpo); + mParameters.set(CameraSettings.KEY_QC_BOKEH_BLUR_VALUE, bokehBlurDegree); + + } else { + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + mUI.overrideSettings(CameraSettings.KEY_BOKEH_MPO, + mActivity.getString(R.string.pref_camera_bokeh_mpo_default)); + mUI.overrideSettings(CameraSettings.KEY_BOKEH_BLUR_VALUE, + mActivity.getString(R.string.pref_camera_bokeh_blur_degree_default)); + mBlurDegreeProgressBar.setVisibility(View.GONE); + } + }); + } + Log.v(TAG, "Bokeh Mode = " + bokehMode + " bokehMpo = " + bokehMpo + + " bokehBlurDegree = " + bokehBlurDegree); } private int estimateJpegFileSize(final Size size, final String quality) { @@ -3906,6 +3993,7 @@ public class PhotoModule .pref_camera_advanced_feature_value_refocus_on); String optizoomOn = mActivity.getString(R.string .pref_camera_advanced_feature_value_optizoom_on); + String scenModeStr = mSceneMode; if (refocusOn.equals(mSceneMode)) { try { mSceneMode = Parameters.SCENE_MODE_AUTO; @@ -3929,6 +4017,9 @@ public class PhotoModule if (CameraUtil.isSupported(mSceneMode, mParameters.getSupportedSceneModes())) { if (!mParameters.getSceneMode().equals(mSceneMode)) { + if (mHandler.getLooper() == Looper.myLooper()) { + mUI.setPreference(CameraSettings.KEY_ADVANCED_FEATURES, scenModeStr); + } mParameters.setSceneMode(mSceneMode); // Setting scene mode will change the settings of flash mode, @@ -4649,6 +4740,11 @@ public class PhotoModule if (CameraSettings.KEY_ADVANCED_FEATURES.equals(pref.getKey())) { mUI.setPreference(CameraSettings.KEY_QC_CHROMA_FLASH, pref.getValue()); + mUI.setPreference(CameraSettings.KEY_SCENE_MODE, pref.getValue()); + } + + if (CameraSettings.KEY_CAMERA_HDR.equals(pref.getKey())) { + mUI.setPreference(CameraSettings.KEY_ADVANCED_FEATURES, pref.getValue()); } String ubiFocusOff = mActivity.getString(R.string. diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java index c64684f30..d1e57ca59 100755 --- a/src/com/android/camera/imageprocessor/PostProcessor.java +++ b/src/com/android/camera/imageprocessor/PostProcessor.java @@ -671,6 +671,8 @@ public class PostProcessor{ if(setFilter(postFilterId) || isFlashModeOn || isTrackingFocusOn || isMakeupOn || isSelfieMirrorOn || PersistUtil.getCameraZSLDisabled() || SettingsManager.getInstance().isCamera2HDRSupport() + || "18".equals(SettingsManager.getInstance().getValue( + SettingsManager.KEY_SCENE_MODE)) || mController.getCameraMode() == CaptureModule.DUAL_MODE) { mUseZSL = false; } else { diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java index 1e28080f4..b85d7f1ca 100644 --- a/src/com/android/camera/ui/CameraControls.java +++ b/src/com/android/camera/ui/CameraControls.java @@ -244,6 +244,8 @@ public class CameraControls extends RotatableLayout { mFrontBackSwitcher.setEnabled(enable); if(TsMakeupManager.HAS_TS_MAKEUP) { mTsMakeupSwitcher.setEnabled(enable); + } else { + mHdrSwitcher.setEnabled(enable); } mPreview.setEnabled(enable); diff --git a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java index b938363fa..fa9ca6284 100755 --- a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java +++ b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java @@ -1380,6 +1380,11 @@ public class ClearSightImageProcessor { finalRect.bottom = newYoffset + newHeight; } + if (finalRect.width() % 2 != 0 || finalRect.height() % 2 != 0) { + finalRect = new Rect(finalRect.left, finalRect.top, + finalRect.width() % 2 == 0 ? finalRect.right : finalRect.right + 1, + finalRect.height() % 2 == 0 ? finalRect.bottom : finalRect.bottom + 1); + } Log.d(TAG, "getFinalCropRect - final rect: " + finalRect.toString()); return finalRect; } |