summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrepo Shareef Ali <shareefalis@gmail.com>2015-01-01 05:13:15 -0600
committerTony Layher <layhertony@gmail.com>2015-01-08 22:05:19 -0500
commitaa9b875625c4f587124cfceab0249359dc139ca1 (patch)
tree8fe041efb87e0591c3b9be8edf8e141616c3ea82
parent481fdc4dd2a153dbcaa92c90c9deedb6314e51ac (diff)
downloadandroid_packages_apps_Camera2-aa9b875625c4f587124cfceab0249359dc139ca1.tar.gz
android_packages_apps_Camera2-aa9b875625c4f587124cfceab0249359dc139ca1.tar.bz2
android_packages_apps_Camera2-aa9b875625c4f587124cfceab0249359dc139ca1.zip
Camera2: Samsung 4k Camera workaround.
* Problem: Samsung 4k does not like changing setting while doing 4k or after 4k. Fix: prevent it from changing setting Change-Id: I5eab679e72cf22272940c387277b2dc57fd6e347
-rw-r--r--src/com/android/camera/CameraActivity.java9
-rw-r--r--src/com/android/camera/VideoModule.java56
-rw-r--r--src/com/android/camera/app/CameraAppUI.java6
-rw-r--r--src/com/android/camera/settings/Keys.java1
4 files changed, 54 insertions, 18 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 22e2c17f5..680b117c8 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -504,6 +504,10 @@ public class CameraActivity extends Activity
hardware.isFlashSupported());
}
+ mSettingsManager.set(SettingsManager.SCOPE_GLOBAL,
+ Keys.KEY_VIDEOCAMERA_SAMSUNG4K_MODE,
+ isSamsung4k());
+
if (!mModuleManager.getModuleAgent(mCurrentModeIndex).requestAppForCamera()) {
// We shouldn't be here. Just close the camera and leave.
mCameraController.closeCamera(false);
@@ -2479,6 +2483,11 @@ public class CameraActivity extends Activity
((VideoModule) mCurrentModule).isRecording() : false;
}
+ public boolean isSamsung4k() {
+ return (mCurrentModule instanceof VideoModule) ?
+ ((VideoModule) mCurrentModule).isSamsung4k() : false;
+ }
+
public CameraAgent.CameraOpenCallback getCameraOpenErrorCallback() {
return mCameraController;
}
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 249b49bc4..bb08242cf 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -594,9 +594,15 @@ public class VideoModule extends CameraModule
mCameraDevice = cameraProxy;
mCameraCapabilities = mCameraDevice.getCapabilities();
mCameraSettings = mCameraDevice.getSettings();
- mFocusAreaSupported = mCameraCapabilities.supports(CameraCapabilities.Feature.FOCUS_AREA);
- mMeteringAreaSupported =
- mCameraCapabilities.supports(CameraCapabilities.Feature.METERING_AREA);
+ if (isSamsung4k()) {
+ mFocusAreaSupported = false;
+ mMeteringAreaSupported = false;
+ } else {
+ mFocusAreaSupported =
+ mCameraCapabilities.supports(CameraCapabilities.Feature.FOCUS_AREA);
+ mMeteringAreaSupported =
+ mCameraCapabilities.supports(CameraCapabilities.Feature.METERING_AREA);
+ }
readVideoPreferences();
resizeForPreviewAspectRatio();
initializeFocusManager();
@@ -721,6 +727,19 @@ public class VideoModule extends CameraModule
// TODO: Remove this when old camera controls are removed from the UI.
}
+ public boolean isSamsung4k() {
+ if (Build.BRAND.toLowerCase().contains("samsung")) {
+ SettingsManager settingsManager = mActivity.getSettingsManager();
+ String videoQualityKey = isCameraFrontFacing() ? Keys.KEY_VIDEO_QUALITY_FRONT
+ : Keys.KEY_VIDEO_QUALITY_BACK;
+ String videoQuality = settingsManager
+ .getString(SettingsManager.SCOPE_GLOBAL, videoQualityKey);
+ int quality = SettingsUtil.getVideoQuality(videoQuality, mCameraId);
+ return quality == CamcorderProfile.QUALITY_2160P;
+ }
+ return false;
+ }
+
private void readVideoPreferences() {
// The preference stores values from ListPreference and is thus string type for all values.
// We need to convert it to int manually.
@@ -788,9 +807,9 @@ public class VideoModule extends CameraModule
* @return The preferred preview size or {@code null} if the camera is not
* opened yet.
*/
- private static Point getDesiredPreviewSize(Context context, CameraSettings settings,
+ private Point getDesiredPreviewSize(Context context, CameraSettings settings,
CameraCapabilities capabilities, CamcorderProfile profile, Point previewScreenSize) {
- if (capabilities.getSupportedVideoSizes().size() == 0) {
+ if (isSamsung4k() || capabilities.getSupportedVideoSizes().size() == 0) {
// Driver doesn't support separate outputs for preview and video.
return new Point(profile.videoFrameWidth, profile.videoFrameHeight);
}
@@ -1346,15 +1365,16 @@ public class VideoModule extends CameraModule
return;
}
mAppController.getCameraAppUI().setSwipeEnabled(false);
-
- // The parameters might have been altered by MediaRecorder already.
- // We need to force mCameraDevice to refresh before getting it.
- mCameraDevice.refreshSettings();
- // The parameters may have been changed by MediaRecorder upon starting
- // recording. We need to alter the parameters if we support camcorder
- // zoom. To reduce latency when setting the parameters during zoom, we
- // update the settings here once.
- mCameraSettings = mCameraDevice.getSettings();
+ if (!isSamsung4k()) {
+ // The parameters might have been altered by MediaRecorder already.
+ // We need to force mCameraDevice to refresh before getting it.
+ mCameraDevice.refreshSettings();
+ // The parameters may have been changed by MediaRecorder upon starting
+ // recording. We need to alter the parameters if we support camcorder
+ // zoom. To reduce latency when setting the parameters during zoom, we
+ // update the settings here once.
+ mCameraSettings = mCameraDevice.getSettings();
+ }
mMediaRecorderRecording = true;
mActivity.lockOrientation();
@@ -1848,7 +1868,7 @@ public class VideoModule extends CameraModule
mParameters.setFlashMode(flashMode);
}
}*/
- if (mCameraDevice != null) {
+ if (mCameraDevice != null && !isSamsung4k()) {
mCameraDevice.applySettings(mCameraSettings);
}
mUI.updateOnScreenIndicators(mCameraSettings);
@@ -1953,14 +1973,14 @@ public class VideoModule extends CameraModule
/***********************FocusOverlayManager Listener****************************/
@Override
public void autoFocus() {
- if (mCameraDevice != null) {
+ if (mCameraDevice != null && !isSamsung4k()) {
mCameraDevice.autoFocus(mHandler, mAutoFocusCallback);
}
}
@Override
public void cancelAutoFocus() {
- if (mCameraDevice != null) {
+ if (mCameraDevice != null && !isSamsung4k()) {
mCameraDevice.cancelAutoFocus();
setFocusParameters();
}
@@ -1983,7 +2003,7 @@ public class VideoModule extends CameraModule
@Override
public void setFocusParameters() {
- if (mCameraDevice != null) {
+ if (mCameraDevice != null && !isSamsung4k()) {
updateFocusParameters();
mCameraDevice.applySettings(mCameraSettings);
}
diff --git a/src/com/android/camera/app/CameraAppUI.java b/src/com/android/camera/app/CameraAppUI.java
index d79f013df..a1020d0bc 100644
--- a/src/com/android/camera/app/CameraAppUI.java
+++ b/src/com/android/camera/app/CameraAppUI.java
@@ -1896,6 +1896,8 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
boolean flashBackCamera = mController.getSettingsManager().getBoolean(
SettingsManager.SCOPE_GLOBAL, Keys.KEY_FLASH_SUPPORTED_BACK_CAMERA);
+ boolean isSamsung4k = mController.getSettingsManager().getBoolean(
+ SettingsManager.SCOPE_GLOBAL, Keys.KEY_VIDEOCAMERA_SAMSUNG4K_MODE);
if (bottomBarSpec.hideFlash || !flashBackCamera) {
buttonManager.hideButton(ButtonManager.BUTTON_FLASH);
} else {
@@ -1906,6 +1908,10 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
} else if (bottomBarSpec.enableTorchFlash) {
buttonManager.initializeButton(ButtonManager.BUTTON_TORCH,
bottomBarSpec.flashCallback);
+ if (isSamsung4k) {
+ // Disable flash icon.
+ buttonManager.disableButton(ButtonManager.BUTTON_FLASH);
+ }
} else if (bottomBarSpec.enableHdrPlusFlash) {
buttonManager.initializeButton(ButtonManager.BUTTON_HDR_PLUS_FLASH,
bottomBarSpec.flashCallback);
diff --git a/src/com/android/camera/settings/Keys.java b/src/com/android/camera/settings/Keys.java
index ad8178275..02ab48f75 100644
--- a/src/com/android/camera/settings/Keys.java
+++ b/src/com/android/camera/settings/Keys.java
@@ -42,6 +42,7 @@ public class Keys {
public static final String KEY_FOCUS_MODE = "pref_camera_focusmode_key";
public static final String KEY_FLASH_MODE = "pref_camera_flashmode_key";
public static final String KEY_VIDEOCAMERA_FLASH_MODE = "pref_camera_video_flashmode_key";
+ public static final String KEY_VIDEOCAMERA_SAMSUNG4K_MODE = "pref_camera_video_samsung4k_key";
public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
public static final String KEY_EXPOSURE = "pref_camera_exposure_key";
public static final String KEY_VIDEO_EFFECT = "pref_video_effect_key";