diff options
author | Angus Kong <shkong@google.com> | 2014-06-16 16:07:28 -0700 |
---|---|---|
committer | Angus Kong <shkong@google.com> | 2014-06-19 10:35:12 -0700 |
commit | 831347d9cb5c0e3f03db7aadfc89e91b231104e7 (patch) | |
tree | a6ee25b99851a96ee1fa86be60c28127bd85461c /src | |
parent | ca8d97fda9470f575de1f68ee90d6ab0047644e0 (diff) | |
download | android_packages_apps_Camera2-831347d9cb5c0e3f03db7aadfc89e91b231104e7.tar.gz android_packages_apps_Camera2-831347d9cb5c0e3f03db7aadfc89e91b231104e7.tar.bz2 android_packages_apps_Camera2-831347d9cb5c0e3f03db7aadfc89e91b231104e7.zip |
Migrate to use new CameraSettings.
Totally get rid of Camera.Parameters.
Change-Id: I147b88f77ecab52600088a10417c3eac3d7fd340
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/CurrentModuleProvider.java | 25 | ||||
-rw-r--r-- | src/com/android/camera/FocusOverlayManager.java | 79 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 81 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 63 | ||||
-rw-r--r-- | src/com/android/camera/app/AppController.java | 8 | ||||
-rw-r--r-- | src/com/android/camera/hardware/HardwareSpecImpl.java | 40 | ||||
-rw-r--r-- | src/com/android/camera/settings/SettingsManager.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/settings/SettingsUtil.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/util/CameraUtil.java | 85 |
10 files changed, 135 insertions, 253 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index fe5edf118..afa8cc99a 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -474,7 +474,8 @@ public class CameraActivity extends Activity */ if (!mSettingsManager.isSet(SettingsManager.SCOPE_GLOBAL, Keys.KEY_FLASH_SUPPORTED_BACK_CAMERA)) { - HardwareSpec hardware = new HardwareSpecImpl(camera.getCapabilities()); + HardwareSpec hardware = + new HardwareSpecImpl(getCameraProvider(), camera.getCapabilities()); mSettingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_FLASH_SUPPORTED_BACK_CAMERA, hardware.isFlashSupported()); diff --git a/src/com/android/camera/CurrentModuleProvider.java b/src/com/android/camera/CurrentModuleProvider.java deleted file mode 100644 index 6b1564a39..000000000 --- a/src/com/android/camera/CurrentModuleProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.camera; - -public interface CurrentModuleProvider { - - /** - * Returns the currently active module index. - */ - public int getCurrentModuleIndex(); -} diff --git a/src/com/android/camera/FocusOverlayManager.java b/src/com/android/camera/FocusOverlayManager.java index ceab38a07..b619c3ba9 100644 --- a/src/com/android/camera/FocusOverlayManager.java +++ b/src/com/android/camera/FocusOverlayManager.java @@ -21,7 +21,6 @@ import android.graphics.Matrix; import android.graphics.Rect; import android.graphics.RectF; import android.hardware.Camera.Area; -import android.hardware.Camera.Parameters; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -34,9 +33,7 @@ import com.android.camera.settings.Keys; import com.android.camera.settings.SettingsManager; import com.android.camera.ui.PreviewStatusListener; import com.android.camera.util.CameraUtil; -import com.android.camera.util.UsageStatistics; import com.android.ex.camera2.portability.CameraCapabilities; -import com.android.ex.camera2.portability.CameraCapabilitiesFactory; import java.util.ArrayList; import java.util.List; @@ -89,10 +86,9 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha private int mDisplayOrientation; private List<Area> mFocusArea; // focus area in driver format private List<Area> mMeteringArea; // metering area in driver format - private String mFocusMode; - private final String[] mDefaultFocusModes; - private String mOverrideFocusMode; - private Parameters mParameters; + private CameraCapabilities.FocusMode mFocusMode; + private final List<CameraCapabilities.FocusMode> mDefaultFocusModes; + private CameraCapabilities.FocusMode mOverrideFocusMode; private CameraCapabilities mCapabilities; private final AppController mAppController; private final SettingsManager mSettingsManager; @@ -141,29 +137,26 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha } public FocusOverlayManager(AppController appController, - String[] defaultFocusModes, - Parameters parameters, Listener listener, - boolean mirror, Looper looper, FocusUI ui) { + List<CameraCapabilities.FocusMode> defaultFocusModes, CameraCapabilities capabilities, + Listener listener, boolean mirror, Looper looper, FocusUI ui) { mAppController = appController; mSettingsManager = appController.getSettingsManager(); mHandler = new MainHandler(looper); mMatrix = new Matrix(); - mDefaultFocusModes = defaultFocusModes; - // TODO: Pass in the capabilities directly. - setParameters(parameters, CameraCapabilitiesFactory.createFrom(parameters)); + mDefaultFocusModes = new ArrayList<>(defaultFocusModes); + updateCapabilities(capabilities); mListener = listener; setMirror(mirror); mUI = ui; mFocusLocked = false; } - public void setParameters(Parameters parameters, CameraCapabilities capabilities) { + public void updateCapabilities(CameraCapabilities capabilities) { // parameters can only be null when onConfigurationChanged is called // before camera is open. We will just return in this case, because // parameters will be set again later with the right parameters after // camera is open. - if (parameters == null) return; - mParameters = parameters; + if (capabilities == null) return; mCapabilities = capabilities; mFocusAreaSupported = mCapabilities.supports(CameraCapabilities.Feature.FOCUS_AREA); mMeteringAreaSupported = mCapabilities.supports(CameraCapabilities.Feature.METERING_AREA); @@ -226,10 +219,10 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha } } - public void onShutterUp() { + public void onShutterUp(CameraCapabilities.FocusMode currentFocusMode) { if (!mInitialized) return; - if (needAutoFocusCall()) { + if (needAutoFocusCall(currentFocusMode)) { // User releases half-pressed focus key. if (mState == STATE_FOCUSING || mState == STATE_SUCCESS || mState == STATE_FAIL) { @@ -242,10 +235,10 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha unlockAeAwbIfNeeded(); } - public void focusAndCapture() { + public void focusAndCapture(CameraCapabilities.FocusMode currentFocusMode) { if (!mInitialized) return; - if (!needAutoFocusCall()) { + if (!needAutoFocusCall(currentFocusMode)) { // Focus is not needed. capture(); } else if (mState == STATE_SUCCESS || mState == STATE_FAIL) { @@ -458,37 +451,40 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha } } - public String getFocusMode() { - if (mOverrideFocusMode != null) return mOverrideFocusMode; - if (mParameters == null) return Parameters.FOCUS_MODE_AUTO; - List<String> supportedFocusModes = mParameters.getSupportedFocusModes(); + public CameraCapabilities.FocusMode getFocusMode( + final CameraCapabilities.FocusMode currentFocusMode) { + if (mOverrideFocusMode != null) { + return mOverrideFocusMode; + } + if (mCapabilities == null) { + return CameraCapabilities.FocusMode.AUTO; + } if (mFocusAreaSupported && mFocusArea != null) { // Always use autofocus in tap-to-focus. - mFocusMode = Parameters.FOCUS_MODE_AUTO; + mFocusMode = CameraCapabilities.FocusMode.AUTO; } else { // The default is continuous autofocus. - mFocusMode = mSettingsManager.getString(mAppController.getCameraScope(), - Keys.KEY_FOCUS_MODE); + mFocusMode = mCapabilities.getStringifier() + .focusModeFromString(mSettingsManager.getString(mAppController.getCameraScope(), + Keys.KEY_FOCUS_MODE)); // Try to find a supported focus mode from the default list. if (mFocusMode == null) { - for (int i = 0; i < mDefaultFocusModes.length; i++) { - String mode = mDefaultFocusModes[i]; - if (CameraUtil.isSupported(mode, supportedFocusModes)) { + for (CameraCapabilities.FocusMode mode : mDefaultFocusModes) { + if (mCapabilities.supports(mode)) { mFocusMode = mode; break; } } } } - if (!CameraUtil.isSupported(mFocusMode, supportedFocusModes)) { + if (!mCapabilities.supports(mFocusMode)) { // For some reasons, the driver does not support the current // focus mode. Fall back to auto. - if (CameraUtil.isSupported(Parameters.FOCUS_MODE_AUTO, - mParameters.getSupportedFocusModes())) { - mFocusMode = Parameters.FOCUS_MODE_AUTO; + if (mCapabilities.supports(CameraCapabilities.FocusMode.AUTO)) { + mFocusMode = CameraCapabilities.FocusMode.AUTO; } else { - mFocusMode = mParameters.getFocusMode(); + mFocusMode = currentFocusMode; } } return mFocusMode; @@ -518,7 +514,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha } else if (mState == STATE_FOCUSING || mState == STATE_FOCUSING_SNAP_ON_FINISH) { mUI.onFocusStarted(); } else { - if (CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE.equals(mFocusMode)) { + if (mFocusMode == CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) { // TODO: check HAL behavior and decide if this can be removed. mUI.onFocusSucceeded(); } else if (mState == STATE_SUCCESS) { @@ -573,7 +569,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha mHandler.removeMessages(RESET_TOUCH_FOCUS); } - public void overrideFocusMode(String focusMode) { + public void overrideFocusMode(CameraCapabilities.FocusMode focusMode) { mOverrideFocusMode = focusMode; } @@ -585,10 +581,9 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha return mAeAwbLock; } - private boolean needAutoFocusCall() { - String focusMode = getFocusMode(); - return !(focusMode.equals(Parameters.FOCUS_MODE_INFINITY) - || focusMode.equals(Parameters.FOCUS_MODE_FIXED) - || focusMode.equals(Parameters.FOCUS_MODE_EDOF)); + private boolean needAutoFocusCall(CameraCapabilities.FocusMode focusMode) { + return !(focusMode == CameraCapabilities.FocusMode.INFINITY + || focusMode == CameraCapabilities.FocusMode.FIXED + || focusMode == CameraCapabilities.FocusMode.EXTENDED_DOF); } } diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 891441d87..037aae465 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -25,7 +25,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.hardware.Camera.CameraInfo; -import android.hardware.Camera.Parameters; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; @@ -52,7 +51,6 @@ import com.android.camera.PhotoModule.NamedImages.NamedEntity; import com.android.camera.app.AppController; import com.android.camera.app.CameraAppUI; import com.android.camera.app.CameraProvider; -import com.android.camera.app.LocationManager; import com.android.camera.app.MediaSaver; import com.android.camera.app.MemoryManager; import com.android.camera.app.MemoryManager.MemoryListener; @@ -79,7 +77,6 @@ import com.android.camera.util.UsageStatistics; import com.android.camera.widget.AspectRatioSelector; import com.android.camera2.R; import com.android.ex.camera2.portability.CameraCapabilities; -import com.android.ex.camera2.portability.CameraAgent; import com.android.ex.camera2.portability.CameraAgent.CameraAFCallback; import com.android.ex.camera2.portability.CameraAgent.CameraAFMoveCallback; import com.android.ex.camera2.portability.CameraAgent.CameraPictureCallback; @@ -96,7 +93,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.ref.WeakReference; -import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.List; import java.util.Vector; @@ -134,8 +131,6 @@ public class PhotoModule private static final String DEBUG_IMAGE_PREFIX = "DEBUG_"; - private static DecimalFormat sMegaPixelFormat = new DecimalFormat("##0.0"); - private CameraActivity mActivity; private CameraProxy mCameraDevice; private int mCameraId; @@ -154,12 +149,9 @@ public class PhotoModule // needed to be updated in mUpdateSet. private int mUpdateSet; - private static final int SCREEN_DELAY = 2 * 60 * 1000; - private int mZoomValue; // The current zoom value. private int mTimerDuration; - private Parameters mInitialParams; private boolean mFocusAreaSupported; private boolean mMeteringAreaSupported; private boolean mAeLockSupported; @@ -204,7 +196,7 @@ public class PhotoModule private int mCameraDisplayOrientation; // The value for UI components like indicators. private int mDisplayOrientation; - // The value for android.hardware.Camera.Parameters.setRotation. + // The value for cameradevice.CameraSettings.setPhotoRotationDegrees. private int mJpegRotation; // Indicates whether we are using front camera private boolean mMirror; @@ -216,7 +208,6 @@ public class PhotoModule private ContentResolver mContentResolver; - private LocationManager mLocationManager; private AppController mAppController; private final PostViewPictureCallback mPostViewPictureCallback = @@ -450,7 +441,6 @@ public class PhotoModule mActivity.getCameraProvider().requestCamera(mCameraId); mQuickCapture = mActivity.getIntent().getBooleanExtra(EXTRA_QUICK_CAPTURE, false); - mLocationManager = mActivity.getLocationManager(); mSensorManager = (SensorManager) (mActivity.getSystemService(Context.SENSOR_SERVICE)); mUI.setCountdownFinishedListener(this); @@ -714,11 +704,13 @@ public class PhotoModule switchToGcamCapture(); } else { if (Keys.isHdrOn(settingsManager)) { - settingsManager.set(mAppController.getCameraScope(), - Keys.KEY_SCENE_MODE, CameraUtil.SCENE_MODE_HDR); + settingsManager.set(mAppController.getCameraScope(), Keys.KEY_SCENE_MODE, + mCameraCapabilities.getStringifier().stringify( + CameraCapabilities.SceneMode.HDR)); } else { - settingsManager.set(mAppController.getCameraScope(), - Keys.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO); + settingsManager.set(mAppController.getCameraScope(), Keys.KEY_SCENE_MODE, + mCameraCapabilities.getStringifier().stringify( + CameraCapabilities.SceneMode.AUTO)); } updateParametersSceneMode(); mCameraDevice.applySettings(mCameraSettings); @@ -757,7 +749,8 @@ public class PhotoModule @Override public HardwareSpec getHardwareSpec() { - return (mCameraSettings != null ? new HardwareSpecImpl(mCameraCapabilities) : null); + return (mCameraSettings != null ? + new HardwareSpecImpl(getCameraProvider(), mCameraCapabilities) : null); } @Override @@ -1355,7 +1348,7 @@ public class PhotoModule if (mFocusManager == null) { initializeFocusManager(); } - mFocusManager.setParameters(mInitialParams, mCameraCapabilities); + mFocusManager.updateCapabilities(mCameraCapabilities); // Do camera parameter dependent initialization. mCameraSettings = mCameraDevice.getSettings(); @@ -1521,7 +1514,7 @@ public class PhotoModule } mSnapshotOnIdle = false; - mFocusManager.focusAndCapture(); + mFocusManager.focusAndCapture(mCameraSettings.getCurrentFocusMode()); } @Override @@ -1596,12 +1589,20 @@ public class PhotoModule mFocusManager.removeMessages(); } else { mMirror = isCameraFrontFacing(); - String[] defaultFocusModes = mActivity.getResources().getStringArray( + String[] defaultFocusModesStrings = mActivity.getResources().getStringArray( R.array.pref_camera_focusmode_default_array); - mFocusManager = new FocusOverlayManager(mAppController, - defaultFocusModes, - mInitialParams, this, mMirror, - mActivity.getMainLooper(), mUI.getFocusUI()); + ArrayList<CameraCapabilities.FocusMode> defaultFocusModes = new ArrayList<>(); + CameraCapabilities.Stringifier stringifier = mCameraCapabilities.getStringifier(); + for (String modeString : defaultFocusModesStrings) { + CameraCapabilities.FocusMode mode = stringifier.focusModeFromString(modeString); + if (mode != null) { + defaultFocusModes.add(mode); + } + } + mFocusManager = + new FocusOverlayManager(mAppController, defaultFocusModes, + mCameraCapabilities, this, mMirror, mActivity.getMainLooper(), + mUI.getFocusUI()); MotionManager motionManager = getServices().getMotionManager(); if (motionManager != null) { motionManager.addListener(mFocusManager); @@ -1880,8 +1881,8 @@ public class PhotoModule if (!mSnapshotOnIdle) { // If the focus mode is continuous autofocus, call cancelAutoFocus // to resume it because it may have been paused by autoFocus call. - String focusMode = mFocusManager.getFocusMode(); - if (CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE.equals(focusMode)) { + if (mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode()) == + CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) { mCameraDevice.cancelAutoFocus(); } mFocusManager.setAeAwbLock(false); // Unlock AE and AWB. @@ -1948,12 +1949,10 @@ public class PhotoModule // video camera application. int[] fpsRange = CameraUtil.getPhotoPreviewFpsRange(mCameraCapabilities); if (fpsRange != null && fpsRange.length > 0) { - mCameraSettings.setPreviewFpsRange( - fpsRange[Parameters.PREVIEW_FPS_MIN_INDEX], - fpsRange[Parameters.PREVIEW_FPS_MAX_INDEX]); + mCameraSettings.setPreviewFpsRange(fpsRange[0], fpsRange[1]); } - mCameraSettings.setSetting(CameraUtil.RECORDING_HINT, CameraUtil.FALSE); + mCameraSettings.setRecordingHintEnabled(false); if (mCameraCapabilities.supports(CameraCapabilities.Feature.VIDEO_STABILIZATION)) { mCameraSettings.setVideoStabilization(false); @@ -2001,10 +2000,12 @@ public class PhotoModule // Initialize focus mode. mFocusManager.overrideFocusMode(null); - mCameraSettings.setFocusMode(mCameraCapabilities.getStringifier() - .focusModeFromString(mFocusManager.getFocusMode())); + mCameraSettings + .setFocusMode(mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode())); SessionStatsCollector.instance().autofocusActive( - mFocusManager.getFocusMode() == CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE); + mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode()) == + CameraCapabilities.FocusMode.CONTINUOUS_PICTURE + ); // Set picture size. updateParametersPictureSize(); @@ -2132,11 +2133,10 @@ public class PhotoModule // Set focus mode. mFocusManager.overrideFocusMode(null); - mCameraSettings.setFocusMode(mCameraCapabilities.getStringifier() - .focusModeFromString(mFocusManager.getFocusMode())); + mCameraSettings.setFocusMode( + mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode())); } else { - mFocusManager.overrideFocusMode(mCameraCapabilities.getStringifier() - .stringify(mCameraSettings.getCurrentFocusMode())); + mFocusManager.overrideFocusMode(mCameraSettings.getCurrentFocusMode()); } } @@ -2243,7 +2243,6 @@ public class PhotoModule } private void initializeCapabilities() { - mInitialParams = mCameraDevice.getParameters(); mCameraCapabilities = mCameraDevice.getCapabilities(); mFocusAreaSupported = mCameraCapabilities.supports(CameraCapabilities.Feature.FOCUS_AREA); mMeteringAreaSupported = mCameraCapabilities.supports(CameraCapabilities.Feature.METERING_AREA); @@ -2267,9 +2266,9 @@ public class PhotoModule // Set zoom parameters asynchronously mCameraSettings.setZoomRatio((float) mZoomValue); mCameraDevice.applySettings(mCameraSettings); - Parameters p = mCameraDevice.getParameters(); - if (p != null) { - return p.getZoom(); + CameraSettings settings = mCameraDevice.getSettings(); + if (settings != null) { + return settings.getCurrentZoomIndex(); } return index; } diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index ff52a8dbe..045696138 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -29,7 +29,6 @@ import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.SurfaceTexture; import android.hardware.Camera.CameraInfo; -import android.hardware.Camera.Parameters; import android.location.Location; import android.media.AudioManager; import android.media.CamcorderProfile; @@ -79,6 +78,7 @@ import com.google.common.logging.eventprotos; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -212,7 +212,6 @@ public class VideoModule extends CameraModule }; private FocusOverlayManager mFocusManager; private boolean mMirror; - private Parameters mInitialSettings; private boolean mFocusAreaSupported; private boolean mMeteringAreaSupported; @@ -471,10 +470,18 @@ public class VideoModule extends CameraModule mFocusManager.removeMessages(); } else { mMirror = isCameraFrontFacing(); - String[] defaultFocusModes = mActivity.getResources().getStringArray( + String[] defaultFocusModesStrings = mActivity.getResources().getStringArray( R.array.pref_camera_focusmode_default_array); + CameraCapabilities.Stringifier stringifier = mCameraCapabilities.getStringifier(); + ArrayList<CameraCapabilities.FocusMode> defaultFocusModes = new ArrayList<>(); + for (String modeString : defaultFocusModesStrings) { + CameraCapabilities.FocusMode mode = stringifier.focusModeFromString(modeString); + if (mode != null) { + defaultFocusModes.add(mode); + } + } mFocusManager = new FocusOverlayManager(mAppController, - defaultFocusModes, mInitialSettings, this, mMirror, + defaultFocusModes, mCameraCapabilities, this, mMirror, mActivity.getMainLooper(), mUI.getFocusUI()); } mAppController.addPreviewAreaSizeChangedListener(mFocusManager); @@ -549,7 +556,8 @@ public class VideoModule extends CameraModule @Override public HardwareSpec getHardwareSpec() { - return (mCameraSettings != null ? new HardwareSpecImpl(mCameraCapabilities) : null); + return (mCameraSettings != null ? + new HardwareSpecImpl(getCameraProvider(), mCameraCapabilities) : null); } @Override @@ -578,17 +586,18 @@ public class VideoModule extends CameraModule @Override public void onCameraAvailable(CameraProxy cameraProxy) { mCameraDevice = cameraProxy; - mInitialSettings = mCameraDevice.getParameters(); mCameraCapabilities = mCameraDevice.getCapabilities(); - mFocusAreaSupported = CameraUtil.isFocusAreaSupported(mInitialSettings); - mMeteringAreaSupported = CameraUtil.isMeteringAreaSupported(mInitialSettings); + mCameraSettings = mCameraDevice.getSettings(); + mFocusAreaSupported = mCameraCapabilities.supports(CameraCapabilities.Feature.FOCUS_AREA); + mMeteringAreaSupported = + mCameraCapabilities.supports(CameraCapabilities.Feature.METERING_AREA); readVideoPreferences(); resizeForPreviewAspectRatio(); initializeFocusManager(); // TODO: Having focus overlay manager caching the parameters is prone to error, // we should consider passing the parameters to focus overlay to ensure the // parameters are up to date. - mFocusManager.setParameters(mInitialSettings, mCameraCapabilities); + mFocusManager.updateCapabilities(mCameraCapabilities); startPreview(); initializeVideoSnapshot(); @@ -685,7 +694,7 @@ public class VideoModule extends CameraModule startVideoRecording(); } mAppController.setShutterEnabled(false); - mFocusManager.onShutterUp(); + mFocusManager.onShutterUp(mCameraSettings.getCurrentFocusMode()); // Keep the shutter button disabled when in video capture intent // mode and recording is stopped. It'll be re-enabled when @@ -777,11 +786,13 @@ public class VideoModule extends CameraModule @TargetApi(Build.VERSION_CODES.HONEYCOMB) /** * Calculates the preview size and stores it in mDesiredPreviewWidth and - * mDesiredPreviewHeight. This function checks {@link - * android.hardware.Camera.Parameters#getPreferredPreviewSizeForVideo()} + * mDesiredPreviewHeight. + * + * <p>This function checks {@link + * com.android.camera.cameradevice.CameraCapabilities#getPreferredPreviewSizeForVideo()} * but also considers the current preview area size on screen and make sure * the final preview size will not be smaller than 1/2 of the current - * on screen preview area in terms of their short sides. + * on screen preview area in terms of their short sides.</p> * * @return The preferred preview size or {@code null} if the camera is not * opened yet. @@ -885,9 +896,9 @@ public class VideoModule extends CameraModule // Set zoom parameters asynchronously mCameraSettings.setZoomIndex(mZoomValue); mCameraDevice.applySettings(mCameraSettings); - Parameters p = mCameraDevice.getParameters(); - if (p != null) { - return p.getZoom(); + CameraSettings settings = mCameraDevice.getSettings(); + if (settings != null) { + return settings.getCurrentZoomIndex(); } return index; } @@ -913,8 +924,9 @@ public class VideoModule extends CameraModule if (mFocusManager != null) { // If the focus mode is continuous autofocus, call cancelAutoFocus // to resume it because it may have been paused by autoFocus call. - String focusMode = mFocusManager.getFocusMode(); - if (CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE.equals(focusMode)) { + CameraCapabilities.FocusMode focusMode = + mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode()); + if (focusMode == CameraCapabilities.FocusMode.CONTINUOUS_PICTURE) { mCameraDevice.cancelAutoFocus(); } } @@ -1129,8 +1141,8 @@ public class VideoModule extends CameraModule // on the size restriction. } - // See android.hardware.Camera.Parameters.setRotation for - // documentation. + // See com.android.camera.cameradevice.CameraSettings.setPhotoRotationDegrees + // for documentation. // Note that mOrientation here is the device orientation, which is the opposite of // what activity.getWindowManager().getDefaultDisplay().getRotation() would return, // which is the orientation the graphics need to rotate in order to render correctly. @@ -1581,8 +1593,7 @@ public class VideoModule extends CameraModule int[] fpsRange = CameraUtil.getMaxPreviewFpsRange(mCameraCapabilities.getSupportedPreviewFpsRange()); if (fpsRange.length > 0) { - mCameraSettings.setPreviewFpsRange(fpsRange[Parameters.PREVIEW_FPS_MIN_INDEX], - fpsRange[Parameters.PREVIEW_FPS_MAX_INDEX]); + mCameraSettings.setPreviewFpsRange(fpsRange[0], fpsRange[1]); } else { mCameraSettings.setPreviewFrameRate(mProfile.videoFrameRate); } @@ -1595,7 +1606,7 @@ public class VideoModule extends CameraModule } updateFocusParameters(); - mCameraSettings.setSetting(CameraUtil.RECORDING_HINT, CameraUtil.TRUE); + mCameraSettings.setRecordingHintEnabled(true); if (mCameraCapabilities.supports(CameraCapabilities.Feature.VIDEO_STABILIZATION)) { mCameraSettings.setVideoStabilization(true); @@ -1638,15 +1649,15 @@ public class VideoModule extends CameraModule if (mMediaRecorderRecording) { if (mCameraCapabilities.supports(CameraCapabilities.FocusMode.CONTINUOUS_VIDEO)) { mCameraSettings.setFocusMode(CameraCapabilities.FocusMode.CONTINUOUS_VIDEO); - mFocusManager.overrideFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); + mFocusManager.overrideFocusMode(CameraCapabilities.FocusMode.CONTINUOUS_VIDEO); } else { mFocusManager.overrideFocusMode(null); } } else { mFocusManager.overrideFocusMode(null); if (mCameraCapabilities.supports(CameraCapabilities.FocusMode.CONTINUOUS_PICTURE)) { - mCameraSettings.setFocusMode(mCameraCapabilities.getStringifier() - .focusModeFromString(mFocusManager.getFocusMode())); + mCameraSettings.setFocusMode( + mFocusManager.getFocusMode(mCameraSettings.getCurrentFocusMode())); if (mFocusAreaSupported) { mCameraSettings.setFocusAreas(mFocusManager.getFocusAreas()); } diff --git a/src/com/android/camera/app/AppController.java b/src/com/android/camera/app/AppController.java index 6746593bd..563aff8f8 100644 --- a/src/com/android/camera/app/AppController.java +++ b/src/com/android/camera/app/AppController.java @@ -28,7 +28,6 @@ import android.view.View; import android.widget.FrameLayout; import com.android.camera.ButtonManager; -import com.android.camera.CurrentModuleProvider; import com.android.camera.module.ModuleController; import com.android.camera.settings.SettingsManager; import com.android.camera.ui.AbstractTutorialOverlay; @@ -37,7 +36,7 @@ import com.android.camera.ui.PreviewStatusListener; /** * The controller at app level. */ -public interface AppController extends CurrentModuleProvider { +public interface AppController { /** * An interface which defines the shutter events listener. @@ -112,6 +111,11 @@ public interface AppController extends CurrentModuleProvider { public ModuleController getCurrentModuleController(); /** + * Returns the currently active module index. + */ + public int getCurrentModuleIndex(); + + /** * Gets the mode that can be switched to from the given mode id through * quick switch. * diff --git a/src/com/android/camera/hardware/HardwareSpecImpl.java b/src/com/android/camera/hardware/HardwareSpecImpl.java index 0ea5375a6..1e67dd686 100644 --- a/src/com/android/camera/hardware/HardwareSpecImpl.java +++ b/src/com/android/camera/hardware/HardwareSpecImpl.java @@ -16,14 +16,10 @@ package com.android.camera.hardware; -import android.hardware.Camera; - -import com.android.camera.util.CameraUtil; +import com.android.camera.app.CameraProvider; import com.android.camera.util.GcamHelper; import com.android.ex.camera2.portability.CameraCapabilities; -import java.util.List; - /** * HardwareSpecImpl is the default implementation of * {@link com.android.camera.hardware.HardwareSpec} for @@ -40,31 +36,10 @@ public class HardwareSpecImpl implements HardwareSpec { /** * Compute the supported values for all * {@link com.android.camera.hardware.HardwareSpec} methods - * based on {@link android.hardware.Camera.Parameters}. - */ - @Deprecated - public HardwareSpecImpl(Camera.Parameters parameters) { - // Cache whether front camera is supported. - mIsFrontCameraSupported = (Camera.getNumberOfCameras() > 1); - - // Cache whether hdr is supported. - mIsHdrSupported = CameraUtil.isCameraHdrSupported(parameters); - - // Cache whether hdr plus is supported. - mIsHdrPlusSupported = GcamHelper.hasGcamCapture(); - - // Cache whether flash is supported. - mIsFlashSupported = isFlashSupported(parameters); - } - - /** - * Compute the supported values for all - * {@link com.android.camera.hardware.HardwareSpec} methods - * based on {@link com.android.ex.camera2.portability.CameraCapabilities}. */ - public HardwareSpecImpl(CameraCapabilities capabilities) { + public HardwareSpecImpl(CameraProvider provider, CameraCapabilities capabilities) { // Cache whether front camera is supported. - mIsFrontCameraSupported = (Camera.getNumberOfCameras() > 1); + mIsFrontCameraSupported = (provider.getFirstFrontCameraId() != -1); // Cache whether hdr is supported. mIsHdrSupported = capabilities.supports(CameraCapabilities.SceneMode.HDR); @@ -73,8 +48,7 @@ public class HardwareSpecImpl implements HardwareSpec { mIsHdrPlusSupported = GcamHelper.hasGcamCapture(); // Cache whether flash is supported. - mIsFlashSupported = capabilities.supports(CameraCapabilities.FlashMode.AUTO) || - capabilities.supports(CameraCapabilities.FlashMode.ON); + mIsFlashSupported = isFlashSupported(capabilities); } @Override @@ -101,8 +75,8 @@ public class HardwareSpecImpl implements HardwareSpec { * Returns whether flash is supported and flash has more than * one possible value. */ - private boolean isFlashSupported(Camera.Parameters parameters) { - List<String> supportedFlashModes = parameters.getSupportedFlashModes(); - return !(supportedFlashModes == null || (supportedFlashModes.size() == 1)); + private boolean isFlashSupported(CameraCapabilities capabilities) { + return (capabilities.supports(CameraCapabilities.FlashMode.AUTO) || capabilities.supports + (CameraCapabilities.FlashMode.ON)); } } diff --git a/src/com/android/camera/settings/SettingsManager.java b/src/com/android/camera/settings/SettingsManager.java index 78cffde7f..5a314e056 100644 --- a/src/com/android/camera/settings/SettingsManager.java +++ b/src/com/android/camera/settings/SettingsManager.java @@ -146,7 +146,7 @@ public class SettingsManager { } /** - * Interface with Camera Parameters and Modules. + * Interface with Camera Device Settings and Modules. */ public interface OnSettingChangedListener { /** diff --git a/src/com/android/camera/settings/SettingsUtil.java b/src/com/android/camera/settings/SettingsUtil.java index 40fdcdbc0..e67c3402b 100644 --- a/src/com/android/camera/settings/SettingsUtil.java +++ b/src/com/android/camera/settings/SettingsUtil.java @@ -21,7 +21,6 @@ import android.content.res.Resources; import android.app.AlertDialog; import android.content.DialogInterface; import android.hardware.Camera; -import android.hardware.Camera.Parameters; import android.media.CamcorderProfile; import android.util.SparseArray; @@ -29,6 +28,7 @@ import com.android.camera.debug.Log; import com.android.camera.util.Callback; import com.android.camera2.R; import com.android.ex.camera2.portability.CameraAgent; +import com.android.ex.camera2.portability.CameraCapabilities; import com.android.ex.camera2.portability.CameraSettings; import com.android.ex.camera2.portability.Size; diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java index 02549eda5..2c31b94a5 100644 --- a/src/com/android/camera/util/CameraUtil.java +++ b/src/com/android/camera/util/CameraUtil.java @@ -34,7 +34,6 @@ import android.graphics.Rect; import android.graphics.RectF; import android.hardware.Camera; import android.hardware.Camera.CameraInfo; -import android.hardware.Camera.Parameters; import android.location.Location; import android.net.Uri; import android.os.ParcelFileDescriptor; @@ -67,7 +66,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; -import java.util.StringTokenizer; /** * Collection of utility functions used in this package. @@ -102,15 +100,6 @@ public class CameraUtil { public static final String ACTION_CAMERA_SHUTTER_CLICK = "com.android.camera.action.SHUTTER_CLICK"; - // Fields from android.hardware.Camera.Parameters - public static final String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture"; - public static final String RECORDING_HINT = "recording-hint"; - private static final String AUTO_EXPOSURE_LOCK_SUPPORTED = "auto-exposure-lock-supported"; - private static final String AUTO_WHITE_BALANCE_LOCK_SUPPORTED = "auto-whitebalance-lock-supported"; - public static final String SCENE_MODE_HDR = "hdr"; - public static final String TRUE = "true"; - public static final String FALSE = "false"; - // Fields for the show-on-maps-functionality private static final String MAPS_PACKAGE_NAME = "com.google.android.apps.maps"; private static final String MAPS_CLASS_NAME = "com.google.android.maps.MapsActivity"; @@ -118,33 +107,6 @@ public class CameraUtil { /** Has to be in sync with the receiving MovieActivity. */ public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back"; - public static boolean isSupported(String value, List<String> supported) { - return supported == null ? false : supported.indexOf(value) >= 0; - } - - public static boolean isAutoExposureLockSupported(Parameters params) { - return TRUE.equals(params.get(AUTO_EXPOSURE_LOCK_SUPPORTED)); - } - - public static boolean isAutoWhiteBalanceLockSupported(Parameters params) { - return TRUE.equals(params.get(AUTO_WHITE_BALANCE_LOCK_SUPPORTED)); - } - - public static boolean isCameraHdrSupported(Parameters params) { - List<String> supported = params.getSupportedSceneModes(); - return (supported != null) && supported.contains(SCENE_MODE_HDR); - } - - public static boolean isMeteringAreaSupported(Parameters params) { - return params.getMaxNumMeteringAreas() > 0; - } - - public static boolean isFocusAreaSupported(Parameters params) { - return (params.getMaxNumFocusAreas() > 0 - && isSupported(Parameters.FOCUS_MODE_AUTO, - params.getSupportedFocusModes())); - } - // Private intent extras. Test only. private static final String EXTRAS_CAMERA_FACING = "android.intent.extras.CAMERA_FACING"; @@ -316,15 +278,6 @@ public class CameraUtil { } } - private static void throwIfCameraDisabled(Activity activity) throws CameraDisabledException { - // Check if device policy has disabled the camera. - DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService( - Context.DEVICE_POLICY_SERVICE); - if (dpm.getCameraDisabled(null)) { - throw new CameraDisabledException(); - } - } - public static void showErrorAndFinish(final Activity activity, int msgId) { DialogInterface.OnClickListener buttonListener = new DialogInterface.OnClickListener() { @@ -564,15 +517,6 @@ public class CameraUtil { return optimalSize; } - public static void dumpParameters(Parameters parameters) { - String flattened = parameters.flatten(); - StringTokenizer tokenizer = new StringTokenizer(flattened, ";"); - Log.d(TAG, "Dump all camera parameters:"); - while (tokenizer.hasMoreElements()) { - Log.d(TAG, tokenizer.nextToken()); - } - } - /** * Returns whether the device is voice-capable (meaning, it can do MMS). */ @@ -744,27 +688,6 @@ public class CameraUtil { view.startAnimation(animation); } - public static void fadeIn(View view) { - fadeIn(view, 0F, 1F, 400); - - // We disabled the button in fadeOut(), so enable it here. - view.setEnabled(true); - } - - public static void fadeOut(View view) { - if (view.getVisibility() != View.VISIBLE) { - return; - } - - // Since the button is still clickable before fade-out animation - // ends, we disable the button first to block click. - view.setEnabled(false); - Animation animation = new AlphaAnimation(1F, 0F); - animation.setDuration(400); - view.startAnimation(animation); - view.setVisibility(View.GONE); - } - public static int getJpegRotation(CameraInfo info, int orientation) { // See android.hardware.Camera.Parameters.setRotation for // documentation. @@ -849,8 +772,8 @@ public class CameraUtil { // Find the lowest min rate in supported ranges who can cover 30fps. int lowestMinRate = MAX_PREVIEW_FPS_TIMES_1000; for (int[] rate : frameRates) { - int minFps = rate[Parameters.PREVIEW_FPS_MIN_INDEX]; - int maxFps = rate[Parameters.PREVIEW_FPS_MAX_INDEX]; + int minFps = rate[0]; + int maxFps = rate[1]; if (maxFps >= PREFERRED_PREVIEW_FPS_TIMES_1000 && minFps <= PREFERRED_PREVIEW_FPS_TIMES_1000 && minFps < lowestMinRate) { @@ -864,8 +787,8 @@ public class CameraUtil { int highestMaxRate = 0; for (int i = 0; i < frameRates.size(); i++) { int[] rate = frameRates.get(i); - int minFps = rate[Parameters.PREVIEW_FPS_MIN_INDEX]; - int maxFps = rate[Parameters.PREVIEW_FPS_MAX_INDEX]; + int minFps = rate[0]; + int maxFps = rate[1]; if (minFps == lowestMinRate && highestMaxRate < maxFps) { highestMaxRate = maxFps; resultIndex = i; |