summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2014-06-16 16:07:28 -0700
committerAngus Kong <shkong@google.com>2014-06-19 10:35:12 -0700
commit831347d9cb5c0e3f03db7aadfc89e91b231104e7 (patch)
treea6ee25b99851a96ee1fa86be60c28127bd85461c /src/com
parentca8d97fda9470f575de1f68ee90d6ab0047644e0 (diff)
downloadandroid_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/com')
-rw-r--r--src/com/android/camera/CameraActivity.java3
-rw-r--r--src/com/android/camera/CurrentModuleProvider.java25
-rw-r--r--src/com/android/camera/FocusOverlayManager.java79
-rw-r--r--src/com/android/camera/PhotoModule.java81
-rw-r--r--src/com/android/camera/VideoModule.java63
-rw-r--r--src/com/android/camera/app/AppController.java8
-rw-r--r--src/com/android/camera/hardware/HardwareSpecImpl.java40
-rw-r--r--src/com/android/camera/settings/SettingsManager.java2
-rw-r--r--src/com/android/camera/settings/SettingsUtil.java2
-rw-r--r--src/com/android/camera/util/CameraUtil.java85
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;