diff options
author | Alan Newberger <alann@google.com> | 2015-05-15 15:05:00 -0700 |
---|---|---|
committer | Alan Newberger <alann@google.com> | 2015-05-15 15:16:20 -0700 |
commit | a5813069b90628f20dca2184dbb579200a958670 (patch) | |
tree | c31cb2d7e73854e98b18d6975b1f07e532ded92c /src_pd | |
parent | 797ea92e91faa8c02c7cd042e607960eb50ec2ba (diff) | |
download | android_packages_apps_Camera2-a5813069b90628f20dca2184dbb579200a958670.tar.gz android_packages_apps_Camera2-a5813069b90628f20dca2184dbb579200a958670.tar.bz2 android_packages_apps_Camera2-a5813069b90628f20dca2184dbb579200a958670.zip |
Dynamic configuration management for Camera2
Ensure Camera2 app selects the appropriate OneCamera per
feature configuration.
Bug: 21204365
Change-Id: I47671a91c89f20e2add2f1f3889d4411341fa1dc
Diffstat (limited to 'src_pd')
-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); } } |