summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Newberger <alann@google.com>2015-05-20 19:18:58 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-05-20 19:18:58 +0000
commit5ae3d7a378785363b3d3db4b014becadc9d7cbbb (patch)
tree409b59c475810ddf5c0d70e67a3035a2b4000f89
parentb3e6d82065e9bc523267a9936fc37a4bb0027eb0 (diff)
parent47e2f28a64e5b52c6fadb459336c182751b72751 (diff)
downloadandroid_packages_apps_Camera2-5ae3d7a378785363b3d3db4b014becadc9d7cbbb.tar.gz
android_packages_apps_Camera2-5ae3d7a378785363b3d3db4b014becadc9d7cbbb.tar.bz2
android_packages_apps_Camera2-5ae3d7a378785363b3d3db4b014becadc9d7cbbb.zip
am 47e2f28a: am a5813069: Dynamic configuration management for Camera2
* commit '47e2f28a64e5b52c6fadb459336c182751b72751': Dynamic configuration management for Camera2
-rw-r--r--src_pd/com/android/camera/one/v2/OneCameraCreator.java85
1 files changed, 83 insertions, 2 deletions
diff --git a/src_pd/com/android/camera/one/v2/OneCameraCreator.java b/src_pd/com/android/camera/one/v2/OneCameraCreator.java
index e954bc2d6..0f93706d0 100644
--- a/src_pd/com/android/camera/one/v2/OneCameraCreator.java
+++ b/src_pd/com/android/camera/one/v2/OneCameraCreator.java
@@ -17,6 +17,7 @@
package com.android.camera.one.v2;
import android.content.Context;
+import android.graphics.ImageFormat;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.util.DisplayMetrics;
@@ -25,14 +26,25 @@ import com.android.camera.FatalErrorHandler;
import com.android.camera.SoundPlayer;
import com.android.camera.async.MainThread;
import com.android.camera.burst.BurstFacade;
+import com.android.camera.debug.Log;
import com.android.camera.one.OneCamera;
import com.android.camera.one.OneCameraAccessException;
import com.android.camera.one.OneCameraCaptureSetting;
+import com.android.camera.one.OneCameraCharacteristics;
import com.android.camera.one.config.OneCameraFeatureConfig;
+import com.android.camera.one.config.OneCameraFeatureConfig.CaptureSupportLevel;
+import com.android.camera.one.v2.camera2proxy.AndroidCameraDeviceProxy;
+import com.android.camera.one.v2.common.PictureSizeCalculator;
+import com.android.camera.one.v2.imagesaver.ImageSaver;
+import com.android.camera.one.v2.imagesaver.JpegImageBackendImageSaver;
+import com.android.camera.one.v2.imagesaver.YuvImageBackendImageSaver;
import com.android.camera.one.v2.photo.ImageRotationCalculator;
-import com.android.camera.util.Size;
+import com.android.camera.processing.ProcessingServiceManager;
+import com.android.camera.processing.imagebackend.ImageBackend;
public class OneCameraCreator {
+ private static Log.Tag TAG = new Log.Tag("OneCamCreator");
+
public static OneCamera create(
CameraDevice device,
CameraCharacteristics characteristics,
@@ -46,6 +58,75 @@ public class OneCameraCreator {
SoundPlayer soundPlayer,
FatalErrorHandler fatalErrorHandler) throws OneCameraAccessException {
// TODO: Might want to switch current camera to vendor HDR.
- return new OneCameraImpl(device, characteristics, captureSetting.getCaptureSize());
+
+ CaptureSupportLevel captureSupportLevel = featureConfig
+ .getCaptureSupportLevel(characteristics);
+ Log.i(TAG, "Camera support level: " + captureSupportLevel.name());
+
+ OneCameraCharacteristics oneCharacteristics =
+ new OneCameraCharacteristicsImpl(characteristics);
+
+ PictureSizeCalculator pictureSizeCalculator =
+ new PictureSizeCalculator(oneCharacteristics);
+ PictureSizeCalculator.Configuration configuration = null;
+
+ OneCameraFactory cameraFactory = null;
+ ImageSaver.Builder imageSaverBuilder = null;
+ ImageBackend imageBackend = ProcessingServiceManager.instance().getImageBackend();
+
+ // Depending on the support level of the camera, choose the right
+ // configuration.
+ switch (captureSupportLevel) {
+ case LIMITED_JPEG:
+ case LEGACY_JPEG:
+ // LIMITED and LEGACY have different picture takers which will
+ // be selected by the support level that is passes into
+ // #createOneCamera below - otherwise they use the same OneCamera and image backend.
+ cameraFactory = new SimpleOneCameraFactory(ImageFormat.JPEG,
+ featureConfig.getMaxAllowedImageReaderCount(),
+ imageRotationCalculator);
+ configuration = pictureSizeCalculator.computeConfiguration(
+ captureSetting.getCaptureSize(),
+ ImageFormat.JPEG);
+ imageSaverBuilder = new JpegImageBackendImageSaver(imageRotationCalculator,
+ imageBackend, configuration.getPostCaptureCrop());
+ break;
+ case LIMITED_YUV:
+ // Same as above, but we're using YUV images.
+ cameraFactory = new SimpleOneCameraFactory(ImageFormat.YUV_420_888,
+ featureConfig.getMaxAllowedImageReaderCount(),
+ imageRotationCalculator);
+ configuration = pictureSizeCalculator.computeConfiguration(
+ captureSetting.getCaptureSize(),
+ ImageFormat.YUV_420_888);
+ imageSaverBuilder = new YuvImageBackendImageSaver(imageRotationCalculator,
+ imageBackend,
+ configuration.getPostCaptureCrop());
+ break;
+ case ZSL:
+ // ZSL has its own OneCamera and produces YUV images.
+ cameraFactory = new ZslOneCameraFactory(ImageFormat.YUV_420_888,
+ featureConfig.getMaxAllowedImageReaderCount());
+ configuration = pictureSizeCalculator.computeConfiguration(
+ captureSetting.getCaptureSize(),
+ ImageFormat.YUV_420_888);
+ imageSaverBuilder = new YuvImageBackendImageSaver(imageRotationCalculator,
+ imageBackend, configuration.getPostCaptureCrop());
+ break;
+ }
+
+ Log.i(TAG, "Picture Size Configuration: " + configuration);
+
+ return cameraFactory.createOneCamera(new AndroidCameraDeviceProxy(device),
+ new OneCameraCharacteristicsImpl(characteristics),
+ captureSupportLevel,
+ mainThread,
+ configuration.getNativeOutputSize(),
+ imageSaverBuilder,
+ captureSetting.getFlashSetting(),
+ captureSetting.getExposureSetting(),
+ captureSetting.getHdrSceneSetting(),
+ burstController,
+ fatalErrorHandler);
}
}