summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/BestpictureActivity.java4
-rwxr-xr-x[-rw-r--r--]src/com/android/camera/CameraSettings.java64
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/CaptureModule.java23
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/CaptureUI.java2
-rwxr-xr-x[-rw-r--r--]src/com/android/camera/PhotoMenu.java2
-rw-r--r--src/com/android/camera/PhotoModule.java106
-rwxr-xr-xsrc/com/android/camera/imageprocessor/PostProcessor.java2
-rw-r--r--src/com/android/camera/ui/CameraControls.java2
-rwxr-xr-xsrc/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java5
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;
}