diff options
author | Alan Newberger <alann@google.com> | 2015-05-20 19:18:58 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-05-20 19:18:58 +0000 |
commit | 5ae3d7a378785363b3d3db4b014becadc9d7cbbb (patch) | |
tree | 409b59c475810ddf5c0d70e67a3035a2b4000f89 | |
parent | b3e6d82065e9bc523267a9936fc37a4bb0027eb0 (diff) | |
parent | 47e2f28a64e5b52c6fadb459336c182751b72751 (diff) | |
download | android_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.java | 85 |
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); } } |