diff options
author | repo Shareef Ali <shareefalis@gmail.com> | 2015-01-01 05:13:15 -0600 |
---|---|---|
committer | Tony Layher <layhertony@gmail.com> | 2015-01-08 22:05:19 -0500 |
commit | aa9b875625c4f587124cfceab0249359dc139ca1 (patch) | |
tree | 8fe041efb87e0591c3b9be8edf8e141616c3ea82 | |
parent | 481fdc4dd2a153dbcaa92c90c9deedb6314e51ac (diff) | |
download | android_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.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 56 | ||||
-rw-r--r-- | src/com/android/camera/app/CameraAppUI.java | 6 | ||||
-rw-r--r-- | src/com/android/camera/settings/Keys.java | 1 |
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"; |