Remove ImageCaptureCOnfig.Builder and move it to ImageCapture.Builder.
Bug: 144454947
Test: ./gradlew bOS
Change-Id: Ie71de278f86527ad280c369896c2966649c3727d
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/ImageCaptureTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/ImageCaptureTest.java
index 4b22f84..4bfb4c9 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/ImageCaptureTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/ImageCaptureTest.java
@@ -117,7 +117,7 @@
private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
private ExecutorService mListenerExecutor;
- private ImageCaptureConfig mDefaultConfig;
+ private ImageCapture.Builder mDefaultBuilder;
private FakeRepeatingUseCase mRepeatingUseCase;
private FakeUseCaseConfig mFakeUseCaseConfig;
private String mCameraId;
@@ -148,7 +148,7 @@
throw new IllegalStateException("Invalid sensor rotation: " + sensorRotation);
}
- return new ImageCaptureConfig.Builder()
+ return new ImageCapture.Builder()
.setTargetRotation(surfaceRotation)
.getUseCaseConfig();
}
@@ -167,7 +167,7 @@
throw new IllegalArgumentException(
"Unable to attach to camera with LensFacing " + BACK_LENS_FACING, e);
}
- mDefaultConfig = new ImageCaptureConfig.Builder().getUseCaseConfig();
+ mDefaultBuilder = new ImageCapture.Builder();
mFakeUseCaseConfig = new FakeUseCaseConfig.Builder().getUseCaseConfig();
mRepeatingUseCase = new FakeRepeatingUseCase(mFakeUseCaseConfig, BACK_SELECTOR);
@@ -188,7 +188,7 @@
@Test
public void capturedImageHasCorrectSize() {
- ImageCapture useCase = new ImageCaptureConfig.Builder().setTargetResolution(
+ ImageCapture useCase = new ImageCapture.Builder().setTargetResolution(
DEFAULT_RESOLUTION).setTargetRotation(Surface.ROTATION_0).build();
mInstrumentation.runOnMainSync(
@@ -226,7 +226,7 @@
@FlakyTest //TODO(b/143734846): Callback is not always being called
@Test
public void canCaptureMultipleImages() {
- ImageCapture useCase = new ImageCapture(mDefaultConfig);
+ ImageCapture useCase = mDefaultBuilder.build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -247,7 +247,7 @@
@FlakyTest //TODO(b/143734846): Callback is not always being called
@Test
public void canCaptureMultipleImagesWithMaxQuality() {
- ImageCapture useCase = new ImageCaptureConfig.Builder()
+ ImageCapture useCase = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.build();
mInstrumentation.runOnMainSync(
@@ -268,7 +268,7 @@
@Test
public void saveCanSucceed() throws IOException {
- ImageCapture useCase = new ImageCapture(mDefaultConfig);
+ ImageCapture useCase = mDefaultBuilder.build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -286,7 +286,7 @@
@Test
public void canSaveFile_withRotation() throws IOException {
- ImageCapture useCase = new ImageCaptureConfig.Builder().setTargetRotation(
+ ImageCapture useCase = new ImageCapture.Builder().setTargetRotation(
Surface.ROTATION_0).build();
mInstrumentation.runOnMainSync(
() -> {
@@ -316,7 +316,8 @@
throws IOException, CameraInfoUnavailableException {
// Use a non-rotated configuration since some combinations of rotation + flipping vertically
// can be equivalent to flipping horizontally
- ImageCapture useCase = new ImageCapture(createNonRotatedConfiguration());
+ ImageCapture useCase = ImageCapture.Builder.fromConfig(
+ createNonRotatedConfiguration()).build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -343,7 +344,8 @@
throws IOException, CameraInfoUnavailableException {
// Use a non-rotated configuration since some combinations of rotation + flipping
// horizontally can be equivalent to flipping vertically
- ImageCapture useCase = new ImageCapture(createNonRotatedConfiguration());
+ ImageCapture useCase = ImageCapture.Builder.fromConfig(
+ createNonRotatedConfiguration()).build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -367,7 +369,7 @@
@Test
public void canSaveFile_withAttachedLocation() throws IOException {
- ImageCapture useCase = new ImageCapture(mDefaultConfig);
+ ImageCapture useCase = mDefaultBuilder.build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -392,7 +394,7 @@
@Test
public void canSaveMultipleFiles() throws IOException {
- ImageCapture useCase = new ImageCapture(mDefaultConfig);
+ ImageCapture useCase = mDefaultBuilder.build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -414,7 +416,7 @@
@Test
public void saveWillFail_whenInvalidFilePathIsUsed() {
- ImageCapture useCase = new ImageCapture(mDefaultConfig);
+ ImageCapture useCase = mDefaultBuilder.build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -434,11 +436,11 @@
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void camera2InteropCaptureSessionCallbacks() {
- ImageCaptureConfig.Builder configBuilder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder builder = new ImageCapture.Builder();
CameraCaptureSession.CaptureCallback captureCallback =
mock(CameraCaptureSession.CaptureCallback.class);
- new Camera2Config.Extender(configBuilder).setSessionCaptureCallback(captureCallback);
- ImageCapture useCase = configBuilder.build();
+ new Camera2Config.Extender(builder).setSessionCaptureCallback(captureCallback);
+ ImageCapture useCase = builder.build();
mInstrumentation.runOnMainSync(
() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, useCase);
@@ -478,7 +480,7 @@
Assume.assumeTrue(resolutions.length > 0);
Size resolution = resolutions[0];
- ImageCapture useCase = new ImageCaptureConfig.Builder()
+ ImageCapture useCase = new ImageCapture.Builder()
.setBufferFormat(ImageFormat.RAW10)
.build();
mInstrumentation.runOnMainSync(
@@ -498,7 +500,7 @@
@Test(expected = IllegalArgumentException.class)
public void constructor_withBufferFormatAndCaptureProcessor_throwsException() {
- new ImageCaptureConfig.Builder()
+ new ImageCapture.Builder()
.setBufferFormat(ImageFormat.RAW_SENSOR)
.setCaptureProcessor(mock(CaptureProcessor.class))
.build();
@@ -506,7 +508,7 @@
@Test(expected = IllegalArgumentException.class)
public void constructor_maxCaptureStageInvalid_throwsException() {
- new ImageCaptureConfig.Builder().setMaxCaptureStages(0).build();
+ new ImageCapture.Builder().setMaxCaptureStages(0).build();
}
@Test
@@ -521,7 +523,7 @@
}
};
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().setCaptureBundle(
+ ImageCapture imageCapture = new ImageCapture.Builder().setCaptureBundle(
captureBundle).build();
mInstrumentation.runOnMainSync(() -> {
@@ -551,7 +553,7 @@
}
};
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setMaxCaptureStages(1)
.setCaptureBundle(captureBundle)
.setCaptureProcessor(mock(CaptureProcessor.class))
@@ -580,7 +582,7 @@
@Test
public void onCaptureCancelled_onErrorCAMERA_CLOSED() throws InterruptedException {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
mInstrumentation.runOnMainSync(() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, imageCapture);
mLifecycleOwner.startAndResume();
@@ -606,7 +608,7 @@
@Test
public void onRequestFailed_OnErrorCAPTURE_FAILED() throws InterruptedException {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
mInstrumentation.runOnMainSync(() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, imageCapture);
mLifecycleOwner.startAndResume();
@@ -635,7 +637,7 @@
@Test
public void onStateOffline_abortAllCaptureRequests() {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
mInstrumentation.runOnMainSync(() -> {
CameraX.bindToLifecycle(mLifecycleOwner, BACK_SELECTOR, imageCapture);
mLifecycleOwner.startAndResume();
@@ -664,7 +666,7 @@
@Test
public void takePictureReturnsErrorNO_CAMERA_whenNotBound() {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
OnImageCapturedCallback callback = createMockOnImageCapturedCallback(null);
imageCapture.takePicture(mListenerExecutor, callback);
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/UseCaseCombinationTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/UseCaseCombinationTest.java
index deb6d09..b2bb7ea 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/UseCaseCombinationTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/UseCaseCombinationTest.java
@@ -35,7 +35,6 @@
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageAnalysisConfig;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.Preview;
import androidx.camera.core.PreviewSurfaceProviders;
@@ -217,7 +216,7 @@
}
private void initImageCapture() {
- mImageCapture = new ImageCaptureConfig.Builder().build();
+ mImageCapture = new ImageCapture.Builder().build();
}
private void initPreview() {
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/Camera2ImplCameraXTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/Camera2ImplCameraXTest.java
index 3b0a52d..5ce4ab6 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/Camera2ImplCameraXTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/Camera2ImplCameraXTest.java
@@ -49,7 +49,6 @@
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageAnalysisConfig;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.ImageProxy;
import androidx.camera.core.LensFacing;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
@@ -428,7 +427,7 @@
new Camera2Config.Extender(builder).setDeviceStateCallback(mDeviceStateCallback);
ImageAnalysis useCase0 = builder.build();
- ImageCapture useCase1 = new ImageCaptureConfig.Builder()
+ ImageCapture useCase1 = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.build();
@@ -460,7 +459,7 @@
new Camera2Config.Extender(builder).setDeviceStateCallback(mDeviceStateCallback);
ImageAnalysis useCase0 = builder.build();
- ImageCapture useCase1 = new ImageCaptureConfig.Builder()
+ ImageCapture useCase1 = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.build();
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/UseCaseSurfaceOccupancyManagerTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/UseCaseSurfaceOccupancyManagerTest.java
index 07362fce..3078636 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/UseCaseSurfaceOccupancyManagerTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/UseCaseSurfaceOccupancyManagerTest.java
@@ -22,7 +22,6 @@
import androidx.camera.core.AppConfig;
import androidx.camera.core.CameraX;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.UseCase;
import androidx.camera.core.VideoCapture;
import androidx.camera.core.VideoCaptureConfig;
@@ -57,9 +56,9 @@
@Test(expected = IllegalArgumentException.class)
public void failedWhenBindTooManyImageCapture() {
- ImageCaptureConfig config = new ImageCaptureConfig.Builder().getUseCaseConfig();
- ImageCapture useCase1 = new ImageCapture(config);
- ImageCapture useCase2 = new ImageCapture(config);
+ ImageCapture.Builder builder = new ImageCapture.Builder();
+ ImageCapture useCase1 = builder.build();
+ ImageCapture useCase2 = builder.build();
// Should throw IllegalArgumentException
UseCaseSurfaceOccupancyManager.checkUseCaseLimitNotExceeded(
@@ -81,7 +80,7 @@
@Test
public void passWhenNotBindTooManyImageVideoCapture() {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder().build();
UseCaseSurfaceOccupancyManager.checkUseCaseLimitNotExceeded(
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/ImageCaptureConfigProvider.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/ImageCaptureConfigProvider.java
index 99b4677..4bcc187 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/ImageCaptureConfigProvider.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/ImageCaptureConfigProvider.java
@@ -54,9 +54,8 @@
@Override
public ImageCaptureConfig getConfig(LensFacing lensFacing) {
- ImageCaptureConfig.Builder builder =
- ImageCaptureConfig.Builder.fromConfig(
- ImageCapture.DEFAULT_CONFIG.getConfig(lensFacing));
+ ImageCapture.Builder builder = ImageCapture.Builder.fromConfig(
+ ImageCapture.DEFAULT_CONFIG.getConfig(lensFacing));
// SessionConfig containing all intrinsic properties needed for ImageCapture
SessionConfig.Builder sessionBuilder = new SessionConfig.Builder();
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2CaptureOptionUnpackerTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2CaptureOptionUnpackerTest.java
index 29d4c2d..0fd205c 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2CaptureOptionUnpackerTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2CaptureOptionUnpackerTest.java
@@ -29,7 +29,7 @@
import androidx.camera.camera2.ExperimentalCamera2Interop;
import androidx.camera.core.CameraCaptureCallback;
import androidx.camera.core.CaptureConfig;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.test.filters.SmallTest;
import org.junit.Before;
@@ -55,14 +55,14 @@
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void unpackerExtractsCaptureCallbacks() {
- ImageCaptureConfig.Builder imageCaptureConfigBuilder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder();
CaptureCallback captureCallback = mock(CaptureCallback.class);
- new Camera2Config.Extender(imageCaptureConfigBuilder)
+ new Camera2Config.Extender(imageCaptureBuilder)
.setSessionCaptureCallback(captureCallback);
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- mUnpacker.unpack(imageCaptureConfigBuilder.getUseCaseConfig(), captureBuilder);
+ mUnpacker.unpack(imageCaptureBuilder.getUseCaseConfig(), captureBuilder);
CaptureConfig captureConfig = captureBuilder.build();
CameraCaptureCallback cameraCaptureCallback =
@@ -74,7 +74,7 @@
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void unpackerExtractsOptions() {
- ImageCaptureConfig.Builder imageCaptureConfigBuilder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder imageCaptureConfigBuilder = new ImageCapture.Builder();
// Add 2 options to ensure that multiple options can be unpacked.
new Camera2Config.Extender(imageCaptureConfigBuilder)
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java
index 55c1978..e1cc587 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java
@@ -330,7 +330,7 @@
@Test
public void suggestedResolutionsForMixedUseCaseNotSupportedInLegacyDevice() {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder()
@@ -359,7 +359,7 @@
@Test
public void getSuggestedResolutionsForMixedUseCaseInLimitedDevice() {
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder()
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2SessionOptionUnpackerTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2SessionOptionUnpackerTest.java
index d544ea2..90fe766 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2SessionOptionUnpackerTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2SessionOptionUnpackerTest.java
@@ -31,7 +31,7 @@
import androidx.camera.camera2.Camera2Config;
import androidx.camera.camera2.ExperimentalCamera2Interop;
import androidx.camera.core.CameraCaptureCallback;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.core.SessionConfig;
import androidx.test.filters.SmallTest;
@@ -58,7 +58,7 @@
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void unpackerExtractsInteropCallbacks() {
- ImageCaptureConfig.Builder imageCaptureConfigBuilder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder();
CaptureCallback captureCallback = mock(CaptureCallback.class);
CameraDevice.StateCallback deviceCallback = mock(CameraDevice.StateCallback.class);
CameraCaptureSession.StateCallback sessionStateCallback =
@@ -66,14 +66,14 @@
CameraEventCallbacks cameraEventCallbacks = mock(CameraEventCallbacks.class);
when(cameraEventCallbacks.clone()).thenReturn(cameraEventCallbacks);
- new Camera2Config.Extender(imageCaptureConfigBuilder)
+ new Camera2Config.Extender(imageCaptureBuilder)
.setSessionCaptureCallback(captureCallback)
.setDeviceStateCallback(deviceCallback)
.setSessionStateCallback(sessionStateCallback)
.setCameraEventCallback(cameraEventCallbacks);
SessionConfig.Builder sessionBuilder = new SessionConfig.Builder();
- mUnpacker.unpack(imageCaptureConfigBuilder.getUseCaseConfig(), sessionBuilder);
+ mUnpacker.unpack(imageCaptureBuilder.getUseCaseConfig(), sessionBuilder);
SessionConfig sessionConfig = sessionBuilder.build();
CameraCaptureCallback interopCallback =
@@ -95,7 +95,7 @@
@Test
@UseExperimental(markerClass = ExperimentalCamera2Interop.class)
public void unpackerExtractsOptions() {
- ImageCaptureConfig.Builder imageCaptureConfigBuilder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder imageCaptureConfigBuilder = new ImageCapture.Builder();
// Add 2 options to ensure that multiple options can be unpacked.
new Camera2Config.Extender(imageCaptureConfigBuilder)
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/ImageCaptureOptionUnpackerTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/ImageCaptureOptionUnpackerTest.java
index a49500a..a735592 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/ImageCaptureOptionUnpackerTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/ImageCaptureOptionUnpackerTest.java
@@ -92,7 +92,7 @@
@Test
public void unpackWithoutCaptureMode() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder().getUseCaseConfig();
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder().getUseCaseConfig();
mUnpacker.setDeviceProperty(PROPERTIES_PIXEL_2_API26);
mUnpacker.unpack(imageCaptureConfig, captureBuilder);
@@ -107,7 +107,7 @@
@Test
public void unpackWithValidPixel2AndMinLatency() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
.getUseCaseConfig();
@@ -124,7 +124,7 @@
@Test
public void unpackWithValidPixel2AndMaxQuality() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.getUseCaseConfig();
@@ -141,7 +141,7 @@
@Test
public void unpackWithPixel2NotSupportApiLevelAndMinLatency() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
.getUseCaseConfig();
@@ -158,7 +158,7 @@
@Test
public void unpackWithPixel2NotSupportApiLevelAndMaxQuality() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.getUseCaseConfig();
@@ -175,7 +175,7 @@
@Test
public void unpackWithValidPixel3AndMinLatency() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
.getUseCaseConfig();
@@ -192,7 +192,7 @@
@Test
public void unpackWithValidPixel3AndMaxQuality() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.getUseCaseConfig();
@@ -209,7 +209,7 @@
@Test
public void unpackWithPixel3NotSupportApiLevelAndMinLatency() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
.getUseCaseConfig();
@@ -226,7 +226,7 @@
@Test
public void unpackWithPixel3NotSupportApiLevelAndMaxQuality() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.getUseCaseConfig();
@@ -243,7 +243,7 @@
@Test
public void unpackWithNotSupportManufacture() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.getUseCaseConfig();
@@ -260,7 +260,7 @@
@Test
public void unpackWithNotSupportModel() {
CaptureConfig.Builder captureBuilder = new CaptureConfig.Builder();
- ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
+ ImageCaptureConfig imageCaptureConfig = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
.getUseCaseConfig();
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java
index 1682758..7cefb48 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java
@@ -526,7 +526,7 @@
mContext, LIMITED_CAMERA_ID, mMockCamcorderProfileHelper);
Preview preview = new Preview.Builder().build();
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
ImageAnalysis imageAnalysis = new ImageAnalysisConfig.Builder().build();
List<UseCase> useCases = new ArrayList<>();
@@ -560,7 +560,7 @@
setupCamera(/* supportsRaw= */ false);
Preview preview = new Preview.Builder().build();
- ImageCapture imageCapture = new ImageCaptureConfig.Builder().build();
+ ImageCapture imageCapture = new ImageCapture.Builder().build();
ImageAnalysis imageAnalysis = new ImageAnalysisConfig.Builder().build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder().build();
@@ -655,7 +655,7 @@
new SupportedSurfaceCombination(
mContext, LEGACY_CAMERA_ID, mMockCamcorderProfileHelper);
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder()
@@ -682,7 +682,7 @@
new SupportedSurfaceCombination(
mContext, LIMITED_CAMERA_ID, mMockCamcorderProfileHelper);
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder()
@@ -718,7 +718,7 @@
2. supportedOutputSizes for ImageCapture and Preview in
SupportedSurfaceCombination#getAllPossibleSizeArrangements are the same.
*/
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetResolution(mDisplaySize)
.build();
Preview preview = new Preview.Builder()
@@ -750,7 +750,7 @@
Preview preview = new Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build();
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build();
ImageAnalysis imageAnalysis = new ImageAnalysisConfig.Builder()
@@ -795,7 +795,7 @@
assertTrue(previewExceptionHappened);
boolean imageCaptureExceptionHappened = false;
- ImageCaptureConfig.Builder imageCaptureConfigBuilder = new ImageCaptureConfig.Builder()
+ ImageCapture.Builder imageCaptureConfigBuilder = new ImageCapture.Builder()
.setTargetResolution(mDisplaySize)
.setTargetAspectRatio(AspectRatio.RATIO_16_9);
try {
@@ -831,7 +831,7 @@
formatResolutionsPairList.add(Pair.create(ImageFormat.PRIVATE, new Size[]{mAnalysisSize}));
// Sets use cases customized supported resolutions to 640x480 only.
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setSupportedResolutions(formatResolutionsPairList)
.build();
VideoCapture videoCapture = new VideoCaptureConfig.Builder()
@@ -1021,7 +1021,7 @@
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setDefaultResolution(mMod16Size)
.build();
- ImageCapture imageCapture = new ImageCaptureConfig.Builder()
+ ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.setDefaultResolution(mMod16Size)
.build();
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
index 2e095d6..eebf684 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
@@ -52,7 +52,7 @@
* <p>When the torch is enabled, the torch will remain enabled during photo capture regardless
* of {@link FlashMode} setting. When the torch is disabled, flash will function as
* {@link FlashMode} set by either {@link ImageCapture#setFlashMode(int)} or
- * {@link ImageCaptureConfig.Builder#setFlashMode(int)}.
+ * {@link ImageCapture.Builder#setFlashMode(int)}.
*
* @param torch true to open the torch, false to close it.
* @return A {@link ListenableFuture} which is successful when the torch was changed to the
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
index 8ac39dd..6ab4654 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
@@ -16,6 +16,30 @@
package androidx.camera.core;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_BUFFER_FORMAT;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_CAMERA_ID_FILTER;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_CAPTURE_BUNDLE;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_CAPTURE_CONFIG_UNPACKER;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_CAPTURE_PROCESSOR;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_DEFAULT_CAPTURE_CONFIG;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_DEFAULT_SESSION_CONFIG;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_FLASH_MODE;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_IMAGE_CAPTURE_MODE;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_IO_EXECUTOR;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_LENS_FACING;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_MAX_CAPTURE_STAGES;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_MAX_RESOLUTION;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_SESSION_CONFIG_UNPACKER;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_SUPPORTED_RESOLUTIONS;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_SURFACE_OCCUPANCY_PRIORITY;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_TARGET_ASPECT_RATIO;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_TARGET_ASPECT_RATIO_CUSTOM;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_TARGET_CLASS;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_TARGET_NAME;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_TARGET_RESOLUTION;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_TARGET_ROTATION;
+import static androidx.camera.core.ImageCaptureConfig.OPTION_USE_CASE_EVENT_CALLBACK;
+
import android.annotation.SuppressLint;
import android.graphics.ImageFormat;
import android.location.Location;
@@ -26,6 +50,7 @@
import android.os.Looper;
import android.os.SystemClock;
import android.util.Log;
+import android.util.Pair;
import android.util.Rational;
import android.util.Size;
import android.view.Display;
@@ -62,6 +87,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
@@ -89,6 +115,7 @@
*/
@SuppressWarnings("ClassCanBeStatic") // TODO(b/141958189): Suppressed during upgrade to AGP 3.6.
public class ImageCapture extends UseCase {
+
/**
* Provides a static configuration with implementation-agnostic options.
*
@@ -139,9 +166,10 @@
* by {@link #takePicture(Executor, OnImageCapturedCallback)}
*/
private final CaptureProcessor mCaptureProcessor;
- private final ImageCaptureConfig.Builder mUseCaseConfigBuilder;
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- ImageReaderProxy mImageReader;
+ private final Builder mUseCaseConfigBuilder;
+ /** synthetic accessor */
+ @SuppressWarnings("WeakerAccess")
+ ImageReaderProxy mImageReader;
/** Callback used to match the {@link ImageProxy} with the {@link ImageInfo}. */
private CameraCaptureCallback mMetadataMatchingCaptureCallback;
private ImageCaptureConfig mConfig;
@@ -165,9 +193,9 @@
* @param userConfig for this use case instance
* @throws IllegalArgumentException if the configuration is invalid.
*/
- public ImageCapture(@NonNull ImageCaptureConfig userConfig) {
+ ImageCapture(@NonNull ImageCaptureConfig userConfig) {
super(userConfig);
- mUseCaseConfigBuilder = ImageCaptureConfig.Builder.fromConfig(userConfig);
+ mUseCaseConfigBuilder = Builder.fromConfig(userConfig);
// Ensure we're using the combined configuration (user config + defaults)
mConfig = (ImageCaptureConfig) getUseCaseConfig();
mCaptureMode = mConfig.getCaptureMode();
@@ -333,7 +361,7 @@
ImageCaptureConfig defaults = CameraX.getDefaultUseCaseConfig(
ImageCaptureConfig.class, lensFacing);
if (defaults != null) {
- return ImageCaptureConfig.Builder.fromConfig(defaults);
+ return Builder.fromConfig(defaults);
}
return null;
@@ -419,29 +447,26 @@
* Sets the desired rotation of the output image.
*
* <p>This will affect the EXIF rotation metadata in images saved by takePicture calls and the
- * rotation value returned by {@link OnImageCapturedCallback}. These will be set
- * to be the rotation, which if applied to the output image data, will make the image match
- * target rotation specified here.
+ * rotation value returned by {@link OnImageCapturedCallback}. These will be set to be the
+ * rotation, which if applied to the output image data, will make the image match target
+ * rotation specified here.
*
- * <p>While rotation can also be set via
- * {@link ImageCaptureConfig.Builder#setTargetRotation(int)}, using
+ * <p>While rotation can also be set via {@link Builder#setTargetRotation(int)}, using
* {@link ImageCapture#setTargetRotation(int)} allows the target rotation to be set dynamically.
*
* <p>In general, it is best to use an {@link android.view.OrientationEventListener} to
- * set the target rotation. This way, the rotation output will indicate
- * which way is down for a given image. This is important since display orientation may be
- * locked by device default, user setting, or app configuration,
- * and some devices may not transition to a reverse-portrait display orientation. In
- * these cases, use {@link androidx.camera.core.ImageCapture#setTargetRotation} to set
- * target rotation dynamically according to the
- * {@link android.view.OrientationEventListener}, without re-creating the use case. Note
+ * set the target rotation. This way, the rotation output will indicate which way is down for
+ * a given image. This is important since display orientation may be locked by device
+ * default, user setting, or app configuration, and some devices may not transition to a
+ * reverse-portrait display orientation. In these cases,
+ * use {@link ImageCapture#setTargetRotation} to set target rotation dynamically according to
+ * the {@link android.view.OrientationEventListener}, without re-creating the use case. Note
* the OrientationEventListener output of degrees in the range [0..359] should be converted to
* a surface rotation, i.e. one of {@link Surface#ROTATION_0}, {@link Surface#ROTATION_90},
* {@link Surface#ROTATION_180}, or {@link Surface#ROTATION_270}.
*
* <p>If no target rotation is set by the application, it is set to the value of
- * {@link Display#getRotation()} of the default display at the time the
- * use case is created.
+ * {@link Display#getRotation()} of the default display at the time the use case is created.
*
* <p>takePicture uses the target rotation at the time it begins executing (which may be delayed
* waiting on a previous takePicture call to complete).
@@ -1167,7 +1192,7 @@
* A rotation of 90 degrees would mean rotating the image 90 degrees clockwise produces an
* image that will match the display orientation.
*
- * <p>See also {@link ImageCaptureConfig.Builder#setTargetRotation(int)} and
+ * <p>See also {@link Builder#setTargetRotation(int)} and
* {@link #setTargetRotation(int)}.
*
* <p>Timestamps are in nanoseconds and monotonic and can be compared to timestamps from
@@ -1220,8 +1245,8 @@
private static final ImageCaptureConfig DEFAULT_CONFIG;
static {
- ImageCaptureConfig.Builder builder =
- new ImageCaptureConfig.Builder()
+ Builder builder =
+ new Builder()
.setCaptureMode(DEFAULT_CAPTURE_MODE)
.setFlashMode(DEFAULT_FLASH_MODE)
.setSurfaceOccupancyPriority(DEFAULT_SURFACE_OCCUPANCY_PRIORITY);
@@ -1507,4 +1532,511 @@
}
}
}
+
+ /** Builder for an {@link ImageCapture}. */
+ public static final class Builder implements
+ UseCaseConfig.Builder<ImageCapture, ImageCaptureConfig, Builder>,
+ ImageOutputConfig.Builder<Builder>,
+ CameraDeviceConfig.Builder<Builder>,
+ IoConfig.Builder<Builder> {
+
+ private final MutableOptionsBundle mMutableConfig;
+
+ /** Creates a new Builder object. */
+ public Builder() {
+ this(MutableOptionsBundle.create());
+ }
+
+ private Builder(MutableOptionsBundle mutableConfig) {
+ mMutableConfig = mutableConfig;
+
+ Class<?> oldConfigClass =
+ mutableConfig.retrieveOption(TargetConfig.OPTION_TARGET_CLASS, null);
+ if (oldConfigClass != null && !oldConfigClass.equals(ImageCapture.class)) {
+ throw new IllegalArgumentException(
+ "Invalid target class configuration for "
+ + Builder.this
+ + ": "
+ + oldConfigClass);
+ }
+
+ setTargetClass(ImageCapture.class);
+ }
+
+ /**
+ * Generates a Builder from another Config object
+ *
+ * @param configuration An immutable configuration to pre-populate this builder.
+ * @return The new Builder.
+ */
+ @NonNull
+ public static Builder fromConfig(@NonNull ImageCaptureConfig configuration) {
+ return new Builder(MutableOptionsBundle.from(configuration));
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public MutableConfig getMutableConfig() {
+ return mMutableConfig;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public ImageCaptureConfig getUseCaseConfig() {
+ return new ImageCaptureConfig(OptionsBundle.from(mMutableConfig));
+ }
+
+ /**
+ * Builds an immutable {@link ImageCapture} from the current state.
+ *
+ * @return A {@link ImageCapture} populated with the current state.
+ * @throws IllegalArgumentException if attempting to set both target aspect ratio and
+ * target resolution.
+ */
+ @Override
+ @NonNull
+ public ImageCapture build() {
+ // Error at runtime for using both setTargetResolution and setTargetAspectRatio on
+ // the same config.
+ if (getMutableConfig().retrieveOption(OPTION_TARGET_ASPECT_RATIO, null) != null
+ && getMutableConfig().retrieveOption(OPTION_TARGET_RESOLUTION, null) != null) {
+ throw new IllegalArgumentException(
+ "Cannot use both setTargetResolution and setTargetAspectRatio on the same "
+ + "config.");
+ }
+ return new ImageCapture(getUseCaseConfig());
+ }
+
+ /**
+ * Sets the image capture mode.
+ *
+ * <p>Valid capture modes are {@link CaptureMode#MIN_LATENCY}, which prioritizes latency
+ * over image quality, or {@link CaptureMode#MAX_QUALITY}, which prioritizes image quality
+ * over latency.
+ *
+ * <p>If not set, the capture mode will default to {@link CaptureMode#MIN_LATENCY}.
+ *
+ * @param captureMode The requested image capture mode.
+ * @return The current Builder.
+ */
+ @NonNull
+ public Builder setCaptureMode(@NonNull CaptureMode captureMode) {
+ getMutableConfig().insertOption(OPTION_IMAGE_CAPTURE_MODE, captureMode);
+ return this;
+ }
+
+ /**
+ * Sets the {@link FlashMode}.
+ *
+ * <p>If not set, the flash mode will default to {@link FlashMode#OFF}.
+ *
+ * <p>See {@link ImageCapture#setFlashMode(int)} for more information.
+ *
+ * @param flashMode The requested flash mode.
+ * @return The current Builder.
+ */
+ @NonNull
+ public Builder setFlashMode(@FlashMode int flashMode) {
+ getMutableConfig().insertOption(OPTION_FLASH_MODE, flashMode);
+ return this;
+ }
+
+ /**
+ * Sets the {@link CaptureBundle}.
+ *
+ * @param captureBundle The requested capture bundle for extension.
+ * @return The current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public Builder setCaptureBundle(@NonNull CaptureBundle captureBundle) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_BUNDLE, captureBundle);
+ return this;
+ }
+
+ /**
+ * Sets the {@link CaptureProcessor}.
+ *
+ * @param captureProcessor The requested capture processor for extension.
+ * @return The current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public Builder setCaptureProcessor(@NonNull CaptureProcessor captureProcessor) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_PROCESSOR, captureProcessor);
+ return this;
+ }
+
+ /**
+ * Sets the {@link ImageFormat} of the {@link ImageProxy} returned by the
+ * {@link ImageCapture.OnImageCapturedCallback}.
+ *
+ * <p>Warning. This could lead to an invalid configuration as image format support is per
+ * device. Also, setting the buffer format in conjuncture with image capture extensions will
+ * result in an invalid configuration. In this case {@link
+ * ImageCapture#ImageCapture(ImageCaptureConfig)} will throw an
+ * {@link IllegalArgumentException}.
+ *
+ * @param bufferImageFormat The image format for captured images.
+ * @return The current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public Builder setBufferFormat(int bufferImageFormat) {
+ getMutableConfig().insertOption(OPTION_BUFFER_FORMAT, bufferImageFormat);
+ return this;
+ }
+
+ /**
+ * Sets the max number of {@link CaptureStage}.
+ *
+ * @param maxCaptureStages The max CaptureStage number.
+ * @return The current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public Builder setMaxCaptureStages(int maxCaptureStages) {
+ getMutableConfig().insertOption(OPTION_MAX_CAPTURE_STAGES, maxCaptureStages);
+ return this;
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setSupportedResolutions(@NonNull List<Pair<Integer, Size[]>> resolutions) {
+ getMutableConfig().insertOption(OPTION_SUPPORTED_RESOLUTIONS, resolutions);
+ return this;
+ }
+
+ // Implementations of TargetConfig.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setTargetClass(@NonNull Class<ImageCapture> targetClass) {
+ getMutableConfig().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfig().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return this;
+ }
+
+ /**
+ * Sets the name of the target object being configured, used only for debug logging.
+ *
+ * <p>The name should be a value that can uniquely identify an instance of the object being
+ * configured.
+ *
+ * <p>If not set, the target name will default to a unique name automatically generated
+ * with the class canonical name and random UUID.
+ *
+ * @param targetName A unique string identifier for the instance of the class being
+ * configured.
+ * @return the current Builder.
+ */
+ @Override
+ @NonNull
+ public Builder setTargetName(@NonNull String targetName) {
+ getMutableConfig().insertOption(OPTION_TARGET_NAME, targetName);
+ return this;
+ }
+
+ // Implementations of CameraDeviceConfig.Builder default methods
+
+ /**
+ * Sets the primary camera to be configured based on the direction the lens is facing.
+ *
+ * <p>If multiple cameras exist with equivalent lens facing direction, the first ("primary")
+ * camera for that direction will be chosen.
+ *
+ * @param lensFacing The direction of the camera's lens.
+ * @return the current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setLensFacing(@NonNull LensFacing lensFacing) {
+ getMutableConfig().insertOption(OPTION_LENS_FACING, lensFacing);
+ return this;
+ }
+
+ /**
+ * Sets a {@link CameraIdFilter} that filter out the unavailable camera id.
+ *
+ * <p>The camera id filter will be used to filter those cameras with lens facing
+ * specified in the config.
+ *
+ * @param cameraIdFilter The {@link CameraIdFilter}.
+ * @return the current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setCameraIdFilter(@NonNull CameraIdFilter cameraIdFilter) {
+ getMutableConfig().insertOption(OPTION_CAMERA_ID_FILTER, cameraIdFilter);
+ return this;
+ }
+
+ // Implementations of ImageOutputConfig.Builder default methods
+
+ /**
+ * Sets the aspect ratio of the intended target for images from this configuration.
+ *
+ * <p>This is the ratio of the target's width to the image's height, where the numerator of
+ * the provided {@link Rational} corresponds to the width, and the denominator corresponds
+ * to the height.
+ *
+ * <p>The target aspect ratio is used as a hint when determining the resulting output aspect
+ * ratio which may differ from the request, possibly due to device constraints.
+ * Application code should check the resulting output's resolution.
+ *
+ * <p>This method can be used to request an aspect ratio that is not from the standard set
+ * of aspect ratios defined in the {@link AspectRatio}.
+ *
+ * <p>This method will remove any value set by setTargetAspectRatio().
+ *
+ * <p>For ImageCapture, the outputs are the {@link ImageProxy} or the File passed to image
+ * capture listeners.
+ *
+ * @param aspectRatio A {@link Rational} representing the ratio of the target's width and
+ * height.
+ * @return The current Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ @Override
+ public Builder setTargetAspectRatioCustom(@NonNull Rational aspectRatio) {
+ getMutableConfig().insertOption(OPTION_TARGET_ASPECT_RATIO_CUSTOM, aspectRatio);
+ getMutableConfig().removeOption(OPTION_TARGET_ASPECT_RATIO);
+ return this;
+ }
+
+ /**
+ * Sets the aspect ratio of the intended target for images from this configuration.
+ *
+ * <p>It is not allowed to set both target aspect ratio and target resolution on the same
+ * use case. Attempting so will throw an IllegalArgumentException when building the
+ * Config.
+ *
+ * <p>The target aspect ratio is used as a hint when determining the resulting output aspect
+ * ratio which may differ from the request, possibly due to device constraints.
+ * Application code should check the resulting output's resolution.
+ *
+ * <p>If not set, resolutions with aspect ratio 4:3 will be considered in higher
+ * priority.
+ *
+ * @param aspectRatio A {@link AspectRatio} representing the ratio of the
+ * target's width and height.
+ * @return The current Builder.
+ */
+ @NonNull
+ @Override
+ public Builder setTargetAspectRatio(@AspectRatio int aspectRatio) {
+ getMutableConfig().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
+ return this;
+ }
+
+ /**
+ * Sets the rotation of the intended target for images from this configuration.
+ *
+ * <p>This will affect the EXIF rotation metadata in images saved by takePicture calls and
+ * the rotation value returned by
+ * {@link androidx.camera.core.ImageCapture.OnImageCapturedCallback}. These will be set to
+ * be the rotation, which if applied to the output image data, will make the image match the
+ * target rotation specified here.
+ *
+ * <p>This is one of four valid values: {@link Surface#ROTATION_0}, {@link
+ * Surface#ROTATION_90}, {@link Surface#ROTATION_180}, {@link Surface#ROTATION_270}.
+ * Rotation values are relative to the "natural" rotation, {@link Surface#ROTATION_0}.
+ *
+ * <p>In general, it is best to additionally set the target rotation dynamically on the use
+ * case. See {@link androidx.camera.core.ImageCapture#setTargetRotation(int)} for
+ * additional documentation.
+ *
+ * <p>If not set, the target rotation will default to the value of
+ * {@link android.view.Display#getRotation()} of the default display at the time the use
+ * case is created.
+ *
+ * @param rotation The rotation of the intended target.
+ * @return The current Builder.
+ * @see androidx.camera.core.ImageCapture#setTargetRotation(int)
+ * @see android.view.OrientationEventListener
+ */
+ @NonNull
+ @Override
+ public Builder setTargetRotation(@RotationValue int rotation) {
+ getMutableConfig().insertOption(OPTION_TARGET_ROTATION, rotation);
+ return this;
+ }
+
+ /**
+ * Sets the intended output target resolution.
+ *
+ * <p>The target resolution attempts to establish a minimum bound for the image resolution.
+ * The actual image resolution will be the closest available resolution in size that is not
+ * smaller than the target resolution, as determined by the Camera implementation. However,
+ * if no resolution exists that is equal to or larger than the target resolution, the
+ * nearest available resolution smaller than the target resolution will be chosen.
+ * Resolutions with the same aspect ratio of the provided {@link Size} will be considered in
+ * higher priority before resolutions of different aspect ratios.
+ *
+ * <p>It is not allowed to set both target aspect ratio and target resolution on the same
+ * use case. Attempting so will throw an IllegalArgumentException when building the
+ * Config.
+ *
+ * <p>The resolution {@link Size} should be expressed at the use cases's target rotation.
+ * For example, a device with portrait natural orientation in natural target rotation
+ * requesting a portrait image may specify 480x640, and the same device, rotated 90 degrees
+ * and targeting landscape orientation may specify 640x480.
+ *
+ * <p>The maximum available resolution that could be selected for an {@link ImageCapture}
+ * will depend on the camera device's capability.
+ *
+ * <p>If not set, the largest available resolution will be selected to use. Usually,
+ * users will intend to get the largest still image that the camera device can support.
+ *
+ * @param resolution The target resolution to choose from supported output sizes list.
+ * @return The current Builder.
+ */
+ @NonNull
+ @Override
+ public Builder setTargetResolution(@NonNull Size resolution) {
+ getMutableConfig().insertOption(OPTION_TARGET_RESOLUTION, resolution);
+ if (resolution != null) {
+ getMutableConfig().insertOption(OPTION_TARGET_ASPECT_RATIO_CUSTOM,
+ new Rational(resolution.getWidth(), resolution.getHeight()));
+ }
+ return this;
+ }
+
+ /**
+ * Sets the default resolution of the intended target from this configuration.
+ *
+ * @param resolution The default resolution to choose from supported output sizes list.
+ * @return The current Builder.
+ * @hide
+ */
+ @NonNull
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setDefaultResolution(@NonNull Size resolution) {
+ getMutableConfig().insertOption(ImageOutputConfig.OPTION_DEFAULT_RESOLUTION,
+ resolution);
+ return this;
+ }
+
+ /** @hide */
+ @NonNull
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setMaxResolution(@NonNull Size resolution) {
+ getMutableConfig().insertOption(OPTION_MAX_RESOLUTION, resolution);
+ return this;
+ }
+
+ // Implementations of IoConfig.Builder default methods
+
+ /**
+ * Sets the default executor that will be used for IO tasks.
+ *
+ * <p> This executor will be used for any IO tasks specifically for ImageCapture, such as
+ * {@link ImageCapture#takePicture(File, Executor, ImageCapture.OnImageSavedCallback)}
+ * and {@link ImageCapture#takePicture(File, ImageCapture.Metadata, Executor,
+ * ImageCapture.OnImageSavedCallback)}. If no executor is set, then a default Executor
+ * specifically for IO will be used instead.
+ *
+ * @param executor The executor which will be used for IO tasks.
+ * @return the current Builder.
+ */
+ @Override
+ @NonNull
+ public Builder setIoExecutor(@NonNull Executor executor) {
+ getMutableConfig().insertOption(OPTION_IO_EXECUTOR, executor);
+ return this;
+ }
+
+ // Implementations of UseCaseConfig.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setDefaultSessionConfig(@NonNull SessionConfig sessionConfig) {
+ getMutableConfig().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
+ return this;
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setDefaultCaptureConfig(@NonNull CaptureConfig captureConfig) {
+ getMutableConfig().insertOption(OPTION_DEFAULT_CAPTURE_CONFIG, captureConfig);
+ return this;
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setSessionOptionUnpacker(
+ @NonNull SessionConfig.OptionUnpacker optionUnpacker) {
+ getMutableConfig().insertOption(OPTION_SESSION_CONFIG_UNPACKER, optionUnpacker);
+ return this;
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setCaptureOptionUnpacker(
+ @NonNull CaptureConfig.OptionUnpacker optionUnpacker) {
+ getMutableConfig().insertOption(OPTION_CAPTURE_CONFIG_UNPACKER, optionUnpacker);
+ return this;
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setSurfaceOccupancyPriority(int priority) {
+ getMutableConfig().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
+ return this;
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @NonNull
+ public Builder setUseCaseEventCallback(
+ @NonNull UseCase.EventCallback useCaseEventCallback) {
+ getMutableConfig().insertOption(OPTION_USE_CASE_EVENT_CALLBACK, useCaseEventCallback);
+ return this;
+ }
+ }
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
index fc6971c..5016e25 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
@@ -31,10 +31,14 @@
import java.io.File;
import java.util.List;
import java.util.Set;
-import java.util.UUID;
import java.util.concurrent.Executor;
-/** Configuration for an image capture use case. */
+/**
+ * Configuration for an image capture use case.
+ *
+ * @hide
+ */
+@RestrictTo(Scope.LIBRARY_GROUP)
public final class ImageCaptureConfig
implements UseCaseConfig<ImageCapture>,
ImageOutputConfig,
@@ -687,513 +691,4 @@
// End of the default implementation of Config
// *********************************************************************************************
-
- /** Builder for a {@link ImageCaptureConfig}. */
- public static final class Builder
- implements UseCaseConfig.Builder<
- ImageCapture, ImageCaptureConfig, Builder>,
- ImageOutputConfig.Builder<Builder>,
- CameraDeviceConfig.Builder<Builder>,
- IoConfig.Builder<Builder> {
-
- private final MutableOptionsBundle mMutableConfig;
-
- /** Creates a new Builder object. */
- public Builder() {
- this(MutableOptionsBundle.create());
- }
-
- private Builder(MutableOptionsBundle mutableConfig) {
- mMutableConfig = mutableConfig;
-
- Class<?> oldConfigClass =
- mutableConfig.retrieveOption(TargetConfig.OPTION_TARGET_CLASS, null);
- if (oldConfigClass != null && !oldConfigClass.equals(ImageCapture.class)) {
- throw new IllegalArgumentException(
- "Invalid target class configuration for "
- + Builder.this
- + ": "
- + oldConfigClass);
- }
-
- setTargetClass(ImageCapture.class);
- }
-
- /**
- * Generates a Builder from another Config object
- *
- * @param configuration An immutable configuration to pre-populate this builder.
- * @return The new Builder.
- */
- @NonNull
- public static Builder fromConfig(@NonNull ImageCaptureConfig configuration) {
- return new Builder(MutableOptionsBundle.from(configuration));
- }
-
- /**
- * {@inheritDoc}
- *
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public MutableConfig getMutableConfig() {
- return mMutableConfig;
- }
-
- /**
- * {@inheritDoc}
- *
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- @Override
- public ImageCaptureConfig getUseCaseConfig() {
- return new ImageCaptureConfig(OptionsBundle.from(mMutableConfig));
- }
-
- /**
- * Builds an immutable {@link ImageCaptureConfig} from the current state.
- *
- * @return A {@link ImageCaptureConfig} populated with the current state.
- * @throws IllegalArgumentException if attempting to set both target aspect ratio and
- * target resolution.
- */
- @Override
- @NonNull
- public ImageCapture build() {
- // Error at runtime for using both setTargetResolution and setTargetAspectRatio on
- // the same config.
- if (getMutableConfig().retrieveOption(OPTION_TARGET_ASPECT_RATIO, null) != null
- && getMutableConfig().retrieveOption(OPTION_TARGET_RESOLUTION, null) != null) {
- throw new IllegalArgumentException(
- "Cannot use both setTargetResolution and setTargetAspectRatio on the same "
- + "config.");
- }
- return new ImageCapture(getUseCaseConfig());
- }
-
- /**
- * Sets the image capture mode.
- *
- * <p>Valid capture modes are {@link CaptureMode#MIN_LATENCY}, which prioritizes latency
- * over image quality, or {@link CaptureMode#MAX_QUALITY}, which prioritizes image quality
- * over latency.
- *
- * <p>If not set, the capture mode will default to {@link CaptureMode#MIN_LATENCY}.
- *
- * @param captureMode The requested image capture mode.
- * @return The current Builder.
- */
- @NonNull
- public Builder setCaptureMode(@NonNull CaptureMode captureMode) {
- getMutableConfig().insertOption(OPTION_IMAGE_CAPTURE_MODE, captureMode);
- return this;
- }
-
- /**
- * Sets the {@link FlashMode}.
- *
- * <p>If not set, the flash mode will default to {@link FlashMode#OFF}.
- *
- * <p>See {@link ImageCapture#setFlashMode(int)} for more information.
- *
- * @param flashMode The requested flash mode.
- * @return The current Builder.
- */
- @NonNull
- public Builder setFlashMode(@FlashMode int flashMode) {
- getMutableConfig().insertOption(OPTION_FLASH_MODE, flashMode);
- return this;
- }
-
- /**
- * Sets the {@link CaptureBundle}.
- *
- * @param captureBundle The requested capture bundle for extension.
- * @return The current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public Builder setCaptureBundle(@NonNull CaptureBundle captureBundle) {
- getMutableConfig().insertOption(OPTION_CAPTURE_BUNDLE, captureBundle);
- return this;
- }
-
- /**
- * Sets the {@link CaptureProcessor}.
- *
- * @param captureProcessor The requested capture processor for extension.
- * @return The current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public Builder setCaptureProcessor(@NonNull CaptureProcessor captureProcessor) {
- getMutableConfig().insertOption(OPTION_CAPTURE_PROCESSOR, captureProcessor);
- return this;
- }
-
- /**
- * Sets the {@link ImageFormat} of the {@link ImageProxy} returned by the
- * {@link ImageCapture.OnImageCapturedCallback}.
- *
- * <p>Warning. This could lead to an invalid configuration as image format support is per
- * device. Also, setting the buffer format in conjuncture with image capture extensions will
- * result in an invalid configuration. In this case {@link
- * ImageCapture#ImageCapture(ImageCaptureConfig)} will throw an
- * {@link IllegalArgumentException}.
- *
- * @param bufferImageFormat The image format for captured images.
- * @return The current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public Builder setBufferFormat(int bufferImageFormat) {
- getMutableConfig().insertOption(OPTION_BUFFER_FORMAT, bufferImageFormat);
- return this;
- }
-
- /**
- * Sets the max number of {@link CaptureStage}.
- *
- * @param maxCaptureStages The max CaptureStage number.
- * @return The current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public Builder setMaxCaptureStages(int maxCaptureStages) {
- getMutableConfig().insertOption(OPTION_MAX_CAPTURE_STAGES, maxCaptureStages);
- return this;
- }
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setSupportedResolutions(@NonNull List<Pair<Integer, Size[]>> resolutions) {
- getMutableConfig().insertOption(OPTION_SUPPORTED_RESOLUTIONS, resolutions);
- return this;
- }
-
- // Implementations of TargetConfig.Builder default methods
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setTargetClass(@NonNull Class<ImageCapture> targetClass) {
- getMutableConfig().insertOption(OPTION_TARGET_CLASS, targetClass);
-
- // If no name is set yet, then generate a unique name
- if (null == getMutableConfig().retrieveOption(OPTION_TARGET_NAME, null)) {
- String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
- setTargetName(targetName);
- }
-
- return this;
- }
-
- /**
- * Sets the name of the target object being configured, used only for debug logging.
- *
- * <p>The name should be a value that can uniquely identify an instance of the object being
- * configured.
- *
- * <p>If not set, the target name will default to an unique name automatically generated
- * with the class canonical name and random UUID.
- *
- * @param targetName A unique string identifier for the instance of the class being
- * configured.
- * @return the current Builder.
- */
- @Override
- @NonNull
- public Builder setTargetName(@NonNull String targetName) {
- getMutableConfig().insertOption(OPTION_TARGET_NAME, targetName);
- return this;
- }
-
- // Implementations of CameraDeviceConfig.Builder default methods
-
- /**
- * Sets the primary camera to be configured based on the direction the lens is facing.
- *
- * <p>If multiple cameras exist with equivalent lens facing direction, the first ("primary")
- * camera for that direction will be chosen.
- *
- * @param lensFacing The direction of the camera's lens.
- * @return the current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setLensFacing(@NonNull LensFacing lensFacing) {
- getMutableConfig().insertOption(OPTION_LENS_FACING, lensFacing);
- return this;
- }
-
- /**
- * Sets a {@link CameraIdFilter} that filter out the unavailable camera id.
- *
- * <p>The camera id filter will be used to filter those cameras with lens facing
- * specified in the config.
- *
- * @param cameraIdFilter The {@link CameraIdFilter}.
- * @return the current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setCameraIdFilter(@NonNull CameraIdFilter cameraIdFilter) {
- getMutableConfig().insertOption(OPTION_CAMERA_ID_FILTER, cameraIdFilter);
- return this;
- }
-
- // Implementations of ImageOutputConfig.Builder default methods
-
- /**
- * Sets the aspect ratio of the intended target for images from this configuration.
- *
- * <p>This is the ratio of the target's width to the image's height, where the numerator of
- * the provided {@link Rational} corresponds to the width, and the denominator corresponds
- * to the height.
- *
- * <p>The target aspect ratio is used as a hint when determining the resulting output aspect
- * ratio which may differ from the request, possibly due to device constraints.
- * Application code should check the resulting output's resolution.
- *
- * <p>This method can be used to request an aspect ratio that is not from the standard set
- * of aspect ratios defined in the {@link AspectRatio}.
- *
- * <p>This method will remove any value set by setTargetAspectRatio().
- *
- * <p>For ImageCapture, the outputs are the {@link ImageProxy} or the File passed to image
- * capture listeners.
- *
- * @param aspectRatio A {@link Rational} representing the ratio of the target's width and
- * height.
- * @return The current Builder.
- * @hide
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- @Override
- public Builder setTargetAspectRatioCustom(@NonNull Rational aspectRatio) {
- getMutableConfig().insertOption(OPTION_TARGET_ASPECT_RATIO_CUSTOM, aspectRatio);
- getMutableConfig().removeOption(OPTION_TARGET_ASPECT_RATIO);
- return this;
- }
-
- /**
- * Sets the aspect ratio of the intended target for images from this configuration.
- *
- * <p>It is not allowed to set both target aspect ratio and target resolution on the same
- * use case. Attempting so will throw an IllegalArgumentException when building the
- * Config.
- *
- * <p>The target aspect ratio is used as a hint when determining the resulting output aspect
- * ratio which may differ from the request, possibly due to device constraints.
- * Application code should check the resulting output's resolution.
- *
- * <p>If not set, resolutions with aspect ratio 4:3 will be considered in higher
- * priority.
- *
- * @param aspectRatio A {@link AspectRatio} representing the ratio of the
- * target's width and height.
- * @return The current Builder.
- */
- @NonNull
- @Override
- public Builder setTargetAspectRatio(@AspectRatio int aspectRatio) {
- getMutableConfig().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
- return this;
- }
-
- /**
- * Sets the rotation of the intended target for images from this configuration.
- *
- * <p>This will affect the EXIF rotation metadata in images saved by takePicture calls and
- * the rotation value returned by
- * {@link androidx.camera.core.ImageCapture.OnImageCapturedCallback}. These will be set to
- * be the rotation, which if applied to the output image data, will make the image match the
- * target rotation specified here.
- *
- * <p>This is one of four valid values: {@link Surface#ROTATION_0}, {@link
- * Surface#ROTATION_90}, {@link Surface#ROTATION_180}, {@link Surface#ROTATION_270}.
- * Rotation values are relative to the "natural" rotation, {@link Surface#ROTATION_0}.
- *
- * <p>In general, it is best to additionally set the target rotation dynamically on the use
- * case. See {@link androidx.camera.core.ImageCapture#setTargetRotation(int)} for
- * additional documentation.
- *
- * <p>If not set, the target rotation will default to the value of
- * {@link android.view.Display#getRotation()} of the default display at the time the use
- * case is created.
- *
- * @see androidx.camera.core.ImageCapture#setTargetRotation(int)
- * @see android.view.OrientationEventListener
- *
- * @param rotation The rotation of the intended target.
- * @return The current Builder.
- */
- @NonNull
- @Override
- public Builder setTargetRotation(@RotationValue int rotation) {
- getMutableConfig().insertOption(OPTION_TARGET_ROTATION, rotation);
- return this;
- }
-
- /**
- * Sets the intended output target resolution.
- *
- * <p>The target resolution attempts to establish a minimum bound for the image resolution.
- * The actual image resolution will be the closest available resolution in size that is not
- * smaller than the target resolution, as determined by the Camera implementation. However,
- * if no resolution exists that is equal to or larger than the target resolution, the
- * nearest available resolution smaller than the target resolution will be chosen.
- * Resolutions with the same aspect ratio of the provided {@link Size} will be considered in
- * higher priority before resolutions of different aspect ratios.
- *
- * <p>It is not allowed to set both target aspect ratio and target resolution on the same
- * use case. Attempting so will throw an IllegalArgumentException when building the
- * Config.
- *
- * <p>The resolution {@link Size} should be expressed at the use cases's target rotation.
- * For example, a device with portrait natural orientation in natural target rotation
- * requesting a portrait image may specify 480x640, and the same device, rotated 90 degrees
- * and targeting landscape orientation may specify 640x480.
- *
- * <p>The maximum available resolution that could be selected for an {@link ImageCapture}
- * will depend on the camera device's capability.
- *
- * <p>If not set, the largest available resolution will be selected to use. Usually,
- * users will intend to get the largest still image that the camera device can support.
- *
- * @param resolution The target resolution to choose from supported output sizes list.
- * @return The current Builder.
- */
- @NonNull
- @Override
- public Builder setTargetResolution(@NonNull Size resolution) {
- getMutableConfig().insertOption(OPTION_TARGET_RESOLUTION, resolution);
- if (resolution != null) {
- getMutableConfig().insertOption(OPTION_TARGET_ASPECT_RATIO_CUSTOM,
- new Rational(resolution.getWidth(), resolution.getHeight()));
- }
- return this;
- }
-
- /**
- * Sets the default resolution of the intended target from this configuration.
- *
- * @param resolution The default resolution to choose from supported output sizes list.
- * @return The current Builder.
- * @hide
- */
- @NonNull
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- public Builder setDefaultResolution(@NonNull Size resolution) {
- getMutableConfig().insertOption(ImageOutputConfig.OPTION_DEFAULT_RESOLUTION,
- resolution);
- return this;
- }
-
- /** @hide */
- @NonNull
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- public Builder setMaxResolution(@NonNull Size resolution) {
- getMutableConfig().insertOption(OPTION_MAX_RESOLUTION, resolution);
- return this;
- }
-
- // Implementations of IoConfig.Builder default methods
-
- /**
- * Sets the default executor that will be used for IO tasks.
- *
- * <p> This executor will be used for any IO tasks specifically for ImageCapture, such as
- * {@link ImageCapture#takePicture(File, Executor, ImageCapture.OnImageSavedCallback)}
- * and {@link ImageCapture#takePicture(File, ImageCapture.Metadata, Executor,
- * ImageCapture.OnImageSavedCallback)}. If no executor is set, then a default Executor
- * specifically for IO will be used instead.
- *
- * @param executor The executor which will be used for IO tasks.
- * @return the current Builder.
- */
- @Override
- @NonNull
- public Builder setIoExecutor(@NonNull Executor executor) {
- getMutableConfig().insertOption(OPTION_IO_EXECUTOR, executor);
- return this;
- }
-
- // Implementations of UseCaseConfig.Builder default methods
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setDefaultSessionConfig(@NonNull SessionConfig sessionConfig) {
- getMutableConfig().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
- return this;
- }
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setDefaultCaptureConfig(@NonNull CaptureConfig captureConfig) {
- getMutableConfig().insertOption(OPTION_DEFAULT_CAPTURE_CONFIG, captureConfig);
- return this;
- }
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setSessionOptionUnpacker(
- @NonNull SessionConfig.OptionUnpacker optionUnpacker) {
- getMutableConfig().insertOption(OPTION_SESSION_CONFIG_UNPACKER, optionUnpacker);
- return this;
- }
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setCaptureOptionUnpacker(
- @NonNull CaptureConfig.OptionUnpacker optionUnpacker) {
- getMutableConfig().insertOption(OPTION_CAPTURE_CONFIG_UNPACKER, optionUnpacker);
- return this;
- }
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setSurfaceOccupancyPriority(int priority) {
- getMutableConfig().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
- return this;
- }
-
- /** @hide */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Override
- @NonNull
- public Builder setUseCaseEventCallback(
- @NonNull UseCase.EventCallback useCaseEventCallback) {
- getMutableConfig().insertOption(OPTION_USE_CASE_EVENT_CALLBACK, useCaseEventCallback);
- return this;
- }
- }
}
diff --git a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ImageCaptureExtenderTest.java b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ImageCaptureExtenderTest.java
index 7d8d041..fa7ef47 100644
--- a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ImageCaptureExtenderTest.java
+++ b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ImageCaptureExtenderTest.java
@@ -47,7 +47,6 @@
import androidx.camera.core.CameraX;
import androidx.camera.core.CaptureProcessor;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.impl.CaptureStageImpl;
@@ -113,13 +112,13 @@
ImageCaptureExtender.ImageCaptureAdapter imageCaptureAdapter =
new ImageCaptureExtender.ImageCaptureAdapter(mockImageCaptureExtenderImpl, null);
- ImageCaptureConfig.Builder configBuilder =
- new ImageCaptureConfig.Builder().setCaptureBundle(
+ ImageCapture.Builder builder =
+ new ImageCapture.Builder().setCaptureBundle(
imageCaptureAdapter).setUseCaseEventCallback(
imageCaptureAdapter).setCaptureProcessor(
mock(CaptureProcessor.class));
- ImageCapture useCase = configBuilder.build();
+ ImageCapture useCase = builder.build();
LensFacing lensFacing = CameraX.getDefaultLensFacing();
CameraSelector cameraSelector = new CameraSelector.Builder()
@@ -169,11 +168,10 @@
ImageCaptureExtender.ImageCaptureAdapter imageCaptureAdapter =
new ImageCaptureExtender.ImageCaptureAdapter(mockImageCaptureExtenderImpl, null);
- ImageCaptureConfig.Builder configBuilder =
- new ImageCaptureConfig.Builder().setCaptureBundle(
- imageCaptureAdapter).setUseCaseEventCallback(
- imageCaptureAdapter).setCaptureProcessor(
- mock(CaptureProcessor.class));
+ ImageCapture.Builder configBuilder = new ImageCapture.Builder().setCaptureBundle(
+ imageCaptureAdapter).setUseCaseEventCallback(
+ imageCaptureAdapter).setCaptureProcessor(
+ mock(CaptureProcessor.class));
new Camera2Config.Extender(configBuilder).setCameraEventCallback(
new CameraEventCallbacks(imageCaptureAdapter));
@@ -228,7 +226,7 @@
assumeTrue(ExtensionVersion.getRuntimeVersion().compareTo(Version.VERSION_1_1) >= 0);
LensFacing lensFacing = CameraX.getDefaultLensFacing();
- ImageCaptureConfig.Builder configBuilder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder builder = new ImageCapture.Builder();
ImageCaptureExtenderImpl mockImageCaptureExtenderImpl = mock(
ImageCaptureExtenderImpl.class);
@@ -238,18 +236,18 @@
when(mockImageCaptureExtenderImpl.getSupportedResolutions()).thenReturn(
targetFormatResolutionsPairList);
- ImageCaptureExtender fakeExtender = new FakeImageCaptureExtender(configBuilder,
+ ImageCaptureExtender fakeExtender = new FakeImageCaptureExtender(builder,
mockImageCaptureExtenderImpl);
// Checks the config does not include supported resolutions before applying effect mode.
- assertThat(configBuilder.getUseCaseConfig().getSupportedResolutions(null)).isNull();
+ assertThat(builder.getUseCaseConfig().getSupportedResolutions(null)).isNull();
// Checks the config includes supported resolutions after applying effect mode.
CameraSelector selector =
new CameraSelector.Builder().requireLensFacing(lensFacing).build();
fakeExtender.enableExtension(selector);
List<Pair<Integer, Size[]>> resultFormatResolutionsPairList =
- configBuilder.getUseCaseConfig().getSupportedResolutions(null);
+ builder.getUseCaseConfig().getSupportedResolutions(null);
assertThat(resultFormatResolutionsPairList).isNotNull();
// Checks the result and target pair lists are the same
@@ -299,7 +297,7 @@
}
final class FakeImageCaptureExtender extends ImageCaptureExtender {
- FakeImageCaptureExtender(ImageCaptureConfig.Builder builder,
+ FakeImageCaptureExtender(ImageCapture.Builder builder,
ImageCaptureExtenderImpl impl) {
init(builder, impl, EffectMode.NORMAL);
}
diff --git a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/util/ExtensionsTestUtil.java b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/util/ExtensionsTestUtil.java
index fe3303d..685f85b 100644
--- a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/util/ExtensionsTestUtil.java
+++ b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/util/ExtensionsTestUtil.java
@@ -109,17 +109,17 @@
}
/**
- * Creates an {@link ImageCaptureConfig.Builder} object for specific {@link EffectMode} and
+ * Creates an {@link ImageCapture.Builder} object for specific {@link EffectMode} and
* {@link LensFacing}.
*
* @param effectMode The effect mode for the created object.
* @param lensFacing The lens facing for the created object.
- * @return An {@link ImageCaptureConfig.Builder} object.
+ * @return An {@link ImageCapture.Builder} object.
*/
@NonNull
- public static ImageCaptureConfig.Builder createImageCaptureConfigBuilderWithEffect(
+ public static ImageCapture.Builder createImageCaptureConfigBuilderWithEffect(
@NonNull EffectMode effectMode, @NonNull LensFacing lensFacing) {
- ImageCaptureConfig.Builder builder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder builder = new ImageCapture.Builder();
CameraSelector selector =
new CameraSelector.Builder().requireLensFacing(lensFacing).build();
ImageCaptureExtender extender = null;
@@ -209,7 +209,7 @@
public static ImageCaptureConfig createImageCaptureConfigWithEffect(
@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
- ImageCaptureConfig.Builder imageCaptureConfigBuilder =
+ ImageCapture.Builder imageCaptureConfigBuilder =
createImageCaptureConfigBuilderWithEffect(effectMode, lensFacing);
return imageCaptureConfigBuilder.getUseCaseConfig();
}
@@ -241,9 +241,7 @@
@NonNull
public static ImageCapture createImageCaptureWithEffect(@NonNull EffectMode effectMode,
@NonNull LensFacing lensFacing) {
- ImageCaptureConfig imageCaptureConfig = createImageCaptureConfigWithEffect(effectMode,
- lensFacing);
- return new ImageCapture(imageCaptureConfig);
+ return createImageCaptureConfigBuilderWithEffect(effectMode, lensFacing).build();
}
/**
@@ -356,15 +354,15 @@
/**
* Creates an {@link ImageCaptureExtender} object for specific {@link EffectMode} and
- * {@link ImageCaptureConfig.Builder}.
+ * {@link ImageCapture.Builder}.
*
* @param effectMode The effect mode for the created object.
- * @param builder The {@link ImageCaptureConfig.Builder} for the created object.
+ * @param builder The {@link ImageCapture.Builder} for the created object.
* @return An {@link ImageCaptureExtender} object.
*/
@NonNull
public static ImageCaptureExtender createImageCaptureExtender(@NonNull EffectMode effectMode,
- @NonNull ImageCaptureConfig.Builder builder) {
+ @NonNull ImageCapture.Builder builder) {
ImageCaptureExtender extender = null;
switch (effectMode) {
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/AutoImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/AutoImageCaptureExtender.java
index 35ee05b..d20f956 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/AutoImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/AutoImageCaptureExtender.java
@@ -20,7 +20,7 @@
import androidx.annotation.NonNull;
import androidx.camera.core.CameraSelector;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.impl.AutoImageCaptureExtenderImpl;
@@ -36,7 +36,7 @@
* @param builder Builder that will be used to create the configurations for the
* {@link androidx.camera.core.ImageCapture}.
*/
- public static AutoImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ public static AutoImageCaptureExtender create(ImageCapture.Builder builder) {
if (ExtensionVersion.isExtensionVersionSupported()) {
try {
return new VendorAutoImageCaptureExtender(builder);
@@ -67,7 +67,7 @@
static class VendorAutoImageCaptureExtender extends AutoImageCaptureExtender {
private final AutoImageCaptureExtenderImpl mImpl;
- VendorAutoImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ VendorAutoImageCaptureExtender(ImageCapture.Builder builder) {
mImpl = new AutoImageCaptureExtenderImpl();
init(builder, mImpl, EffectMode.AUTO);
}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java
index 8875fef..1b6f321 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java
@@ -20,7 +20,7 @@
import androidx.annotation.NonNull;
import androidx.camera.core.CameraSelector;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.impl.BeautyImageCaptureExtenderImpl;
@@ -36,7 +36,7 @@
* @param builder Builder that will be used to create the configurations for the
* {@link androidx.camera.core.ImageCapture}.
*/
- public static BeautyImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ public static BeautyImageCaptureExtender create(ImageCapture.Builder builder) {
if (ExtensionVersion.isExtensionVersionSupported()) {
try {
return new VendorBeautyImageCaptureExtender(builder);
@@ -67,7 +67,7 @@
static class VendorBeautyImageCaptureExtender extends BeautyImageCaptureExtender {
private final BeautyImageCaptureExtenderImpl mImpl;
- VendorBeautyImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ VendorBeautyImageCaptureExtender(ImageCapture.Builder builder) {
mImpl = new BeautyImageCaptureExtenderImpl();
init(builder, mImpl, EffectMode.BEAUTY);
}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/BokehImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/BokehImageCaptureExtender.java
index 6f2e43f..a2dfa0f 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/BokehImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/BokehImageCaptureExtender.java
@@ -20,7 +20,7 @@
import androidx.annotation.NonNull;
import androidx.camera.core.CameraSelector;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.impl.BokehImageCaptureExtenderImpl;
@@ -36,7 +36,7 @@
* @param builder Builder that will be used to create the configurations for the
* {@link androidx.camera.core.ImageCapture}.
*/
- public static BokehImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ public static BokehImageCaptureExtender create(ImageCapture.Builder builder) {
if (ExtensionVersion.isExtensionVersionSupported()) {
try {
return new VendorBokehImageCaptureExtender(builder);
@@ -67,7 +67,7 @@
private static class VendorBokehImageCaptureExtender extends BokehImageCaptureExtender {
private final BokehImageCaptureExtenderImpl mImpl;
- VendorBokehImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ VendorBokehImageCaptureExtender(ImageCapture.Builder builder) {
mImpl = new BokehImageCaptureExtenderImpl();
init(builder, mImpl, EffectMode.BOKEH);
}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
index e8be743..bd347f0 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
@@ -25,7 +25,6 @@
import androidx.camera.core.CameraSelector;
import androidx.camera.core.CameraX;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.Preview;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
@@ -187,7 +186,7 @@
private static boolean checkImageCaptureExtensionCapability(EffectMode effectMode,
LensFacing lensFacing) {
- ImageCaptureConfig.Builder builder = new ImageCaptureConfig.Builder();
+ ImageCapture.Builder builder = new ImageCapture.Builder();
CameraSelector selector =
new CameraSelector.Builder().requireLensFacing(lensFacing).build();
ImageCaptureExtender extender;
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/HdrImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/HdrImageCaptureExtender.java
index e81e3d3..ba0c681 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/HdrImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/HdrImageCaptureExtender.java
@@ -20,7 +20,7 @@
import androidx.annotation.NonNull;
import androidx.camera.core.CameraSelector;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.impl.HdrImageCaptureExtenderImpl;
/**
@@ -35,7 +35,7 @@
* @param builder Builder that will be used to create the configurations for the
* {@link androidx.camera.core.ImageCapture}.
*/
- public static HdrImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ public static HdrImageCaptureExtender create(ImageCapture.Builder builder) {
if (ExtensionVersion.isExtensionVersionSupported()) {
try {
return new VendorHdrImageCaptureExtender(builder);
@@ -66,7 +66,7 @@
static class VendorHdrImageCaptureExtender extends HdrImageCaptureExtender {
private final HdrImageCaptureExtenderImpl mImpl;
- VendorHdrImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ VendorHdrImageCaptureExtender(ImageCapture.Builder builder) {
mImpl = new HdrImageCaptureExtenderImpl();
init(builder, mImpl, EffectMode.HDR);
}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java
index 4c9bc4c3..cd67da9 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java
@@ -36,7 +36,7 @@
import androidx.camera.core.CaptureConfig;
import androidx.camera.core.CaptureStage;
import androidx.camera.core.Config;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.core.LensFacing;
import androidx.camera.core.UseCase;
import androidx.camera.core.impl.utils.CameraSelectorUtil;
@@ -60,11 +60,11 @@
static final Config.Option<EffectMode> OPTION_IMAGE_CAPTURE_EXTENDER_MODE =
Config.Option.create("camerax.extensions.imageCaptureExtender.mode", EffectMode.class);
- private ImageCaptureConfig.Builder mBuilder;
+ private ImageCapture.Builder mBuilder;
private ImageCaptureExtenderImpl mImpl;
private EffectMode mEffectMode;
- void init(ImageCaptureConfig.Builder builder, ImageCaptureExtenderImpl implementation,
+ void init(ImageCapture.Builder builder, ImageCaptureExtenderImpl implementation,
EffectMode effectMode) {
mBuilder = builder;
mImpl = implementation;
@@ -72,7 +72,7 @@
}
/**
- * Indicates whether extension function can support with {@link ImageCaptureConfig.Builder}
+ * Indicates whether extension function can support with {@link ImageCapture.Builder}
*
* @param cameraSelector The selector that determines a camera that will be checked for the
* availability of extensions.
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java
index 072edde..3f0d41e 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java
@@ -20,7 +20,7 @@
import androidx.annotation.NonNull;
import androidx.camera.core.CameraSelector;
-import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.core.ImageCapture;
import androidx.camera.extensions.ExtensionsManager.EffectMode;
import androidx.camera.extensions.impl.NightImageCaptureExtenderImpl;
@@ -36,7 +36,7 @@
* @param builder Builder that will be used to create the configurations for the
* {@link androidx.camera.core.ImageCapture}.
*/
- public static NightImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ public static NightImageCaptureExtender create(ImageCapture.Builder builder) {
if (ExtensionVersion.isExtensionVersionSupported()) {
try {
return new VendorNightImageCaptureExtender(builder);
@@ -67,7 +67,7 @@
static class VendorNightImageCaptureExtender extends NightImageCaptureExtender {
private final NightImageCaptureExtenderImpl mImpl;
- VendorNightImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ VendorNightImageCaptureExtender(ImageCapture.Builder builder) {
mImpl = new NightImageCaptureExtenderImpl();
init(builder, mImpl, EffectMode.NIGHT);
}
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java
index b097500..240661d 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java
@@ -40,7 +40,6 @@
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageCapture.OnImageCapturedCallback;
import androidx.camera.core.ImageCapture.OnImageSavedCallback;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.Preview;
import androidx.camera.core.VideoCapture;
@@ -79,7 +78,7 @@
private final Preview.Builder mPreviewBuilder;
private final VideoCaptureConfig.Builder mVideoCaptureConfigBuilder;
- private final ImageCaptureConfig.Builder mImageCaptureConfigBuilder;
+ private final ImageCapture.Builder mImageCaptureBuilder;
private final CameraView mCameraView;
final AtomicBoolean mVideoIsRecording = new AtomicBoolean(false);
private CameraView.CaptureMode mCaptureMode = CaptureMode.IMAGE;
@@ -121,8 +120,7 @@
mPreviewBuilder = new Preview.Builder().setTargetName("Preview");
- mImageCaptureConfigBuilder =
- new ImageCaptureConfig.Builder().setTargetName("ImageCapture");
+ mImageCaptureBuilder = new ImageCapture.Builder().setTargetName("ImageCapture");
mVideoCaptureConfigBuilder =
new VideoCaptureConfig.Builder().setTargetName("VideoCapture");
@@ -190,15 +188,15 @@
Rational targetAspectRatio;
if (getCaptureMode() == CaptureMode.IMAGE) {
- mImageCaptureConfigBuilder.setTargetAspectRatio(AspectRatio.RATIO_4_3);
+ mImageCaptureBuilder.setTargetAspectRatio(AspectRatio.RATIO_4_3);
targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_3_4 : ASPECT_RATIO_4_3;
} else {
- mImageCaptureConfigBuilder.setTargetAspectRatio(AspectRatio.RATIO_16_9);
+ mImageCaptureBuilder.setTargetAspectRatio(AspectRatio.RATIO_16_9);
targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_9_16 : ASPECT_RATIO_16_9;
}
- mImageCaptureConfigBuilder.setTargetRotation(getDisplaySurfaceRotation());
- mImageCapture = mImageCaptureConfigBuilder.build();
+ mImageCaptureBuilder.setTargetRotation(getDisplaySurfaceRotation());
+ mImageCapture = mImageCaptureBuilder.build();
mVideoCaptureConfigBuilder.setTargetRotation(getDisplaySurfaceRotation());
mVideoCapture = mVideoCaptureConfigBuilder.build();
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
index 1673a4c..e533fd6 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
@@ -47,7 +47,6 @@
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageAnalysisConfig;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.Preview;
import androidx.camera.core.UseCase;
@@ -415,7 +414,7 @@
}
void enableImageCapture() {
- mImageCapture = new ImageCaptureConfig.Builder()
+ mImageCapture = new ImageCapture.Builder()
.setCaptureMode(mCaptureMode)
.setTargetName("ImageCapture")
.build();
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/PreviewProcessorTimestampTest.java b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/PreviewProcessorTimestampTest.java
index dbc9f23..5d8b10a 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/PreviewProcessorTimestampTest.java
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/PreviewProcessorTimestampTest.java
@@ -42,7 +42,6 @@
import androidx.camera.core.CaptureProcessor;
import androidx.camera.core.ImageAnalysisConfig;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.Preview;
import androidx.camera.core.PreviewConfig;
@@ -108,7 +107,7 @@
TimestampCaptureProcessor.TimestampListener mTimestampListener;
SurfaceTexture.OnFrameAvailableListener mOnFrameAvailableListener;
- private ImageCaptureConfig.Builder mImageCaptureConfigBuilder;
+ private ImageCapture.Builder mImageCaptureBuilder;
private Preview.Builder mPreviewBuilder;
private ImageAnalysisConfig.Builder mImageAnalysisConfigBuilder;
@@ -146,7 +145,7 @@
mLifecycleOwner = new FakeLifecycleOwner();
- mImageCaptureConfigBuilder = new ImageCaptureConfig.Builder();
+ mImageCaptureBuilder = new ImageCapture.Builder();
mPreviewBuilder = new Preview.Builder();
mImageAnalysisConfigBuilder = new ImageAnalysisConfig.Builder();
mCameraStatusCallback = new CameraDevice.StateCallback() {
@@ -212,7 +211,7 @@
mSurfaceTextureLatch = new CountDownLatch(1);
- new Camera2Config.Extender(mImageCaptureConfigBuilder).setDeviceStateCallback(
+ new Camera2Config.Extender(mImageCaptureBuilder).setDeviceStateCallback(
mCameraStatusCallback);
}
@@ -237,7 +236,7 @@
enableExtension(mEffectMode, mLensFacing);
// To test bind/unbind and take picture.
- ImageCapture imageCapture = mImageCaptureConfigBuilder.build();
+ ImageCapture imageCapture = mImageCaptureBuilder.build();
PreviewConfig previewConfig = mPreviewBuilder.getUseCaseConfig();
CaptureProcessor previewCaptureProcessor = previewConfig.getCaptureProcessor(null);
@@ -294,25 +293,23 @@
switch (effectMode) {
case HDR:
- imageCaptureExtender = HdrImageCaptureExtender.create(mImageCaptureConfigBuilder);
+ imageCaptureExtender = HdrImageCaptureExtender.create(mImageCaptureBuilder);
previewExtender = HdrPreviewExtender.create(mPreviewBuilder);
break;
case BOKEH:
- imageCaptureExtender = BokehImageCaptureExtender.create(
- mImageCaptureConfigBuilder);
+ imageCaptureExtender = BokehImageCaptureExtender.create(mImageCaptureBuilder);
previewExtender = BokehPreviewExtender.create(mPreviewBuilder);
break;
case BEAUTY:
- imageCaptureExtender = BeautyImageCaptureExtender.create(
- mImageCaptureConfigBuilder);
+ imageCaptureExtender = BeautyImageCaptureExtender.create(mImageCaptureBuilder);
previewExtender = BeautyPreviewExtender.create(mPreviewBuilder);
break;
case NIGHT:
- imageCaptureExtender = NightImageCaptureExtender.create(mImageCaptureConfigBuilder);
+ imageCaptureExtender = NightImageCaptureExtender.create(mImageCaptureBuilder);
previewExtender = NightPreviewExtender.create(mPreviewBuilder);
break;
case AUTO:
- imageCaptureExtender = AutoImageCaptureExtender.create(mImageCaptureConfigBuilder);
+ imageCaptureExtender = AutoImageCaptureExtender.create(mImageCaptureBuilder);
previewExtender = AutoPreviewExtender.create(mPreviewBuilder);
break;
}
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
index 22e2470..5b5f487 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
@@ -41,7 +41,6 @@
import androidx.camera.core.CameraSelector;
import androidx.camera.core.CameraX;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.ImageCaptureConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.Preview;
import androidx.camera.core.PreviewSurfaceProviders;
@@ -251,9 +250,7 @@
void enableImageCapture(ImageCaptureType imageCaptureType) {
mCurrentImageCaptureType = imageCaptureType;
- ImageCaptureConfig.Builder builder =
- new ImageCaptureConfig.Builder()
- .setTargetName("ImageCapture");
+ ImageCapture.Builder builder = new ImageCapture.Builder().setTargetName("ImageCapture");
Button toggleButton = findViewById(R.id.PhotoToggle);
toggleButton.setText(mCurrentImageCaptureType.toString());
diff --git a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraParams.kt b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraParams.kt
index 2e6c59d..e8cf6c8 100644
--- a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraParams.kt
+++ b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraParams.kt
@@ -25,7 +25,6 @@
import android.os.HandlerThread
import android.util.Size
import androidx.camera.core.ImageCapture
-import androidx.camera.core.ImageCaptureConfig
import androidx.camera.core.Preview
import androidx.camera.integration.antelope.MainActivity.Companion.FIXED_FOCUS_DISTANCE
import androidx.camera.integration.antelope.MainActivity.Companion.INVALID_FOCAL_LENGTH
@@ -105,11 +104,11 @@
internal var cameraXPreviewSessionStateCallback: CameraXPreviewSessionStateCallback? = null
internal var cameraXCaptureSessionCallback: CameraXCaptureSessionCallback? = null
internal var cameraXPreviewBuilder: Preview.Builder = Preview.Builder()
- internal var cameraXCaptureBuilder: ImageCaptureConfig.Builder = ImageCaptureConfig.Builder()
+ internal var cameraXCaptureBuilder: ImageCapture.Builder = ImageCapture.Builder()
// Custom lifecycle for CameraX API
internal var cameraXLifecycle: CustomLifecycle = CustomLifecycle()
- internal var cameraXImageCaptureUseCase: ImageCapture = ImageCaptureConfig.Builder().build()
+ internal var cameraXImageCaptureUseCase: ImageCapture = ImageCapture.Builder().build()
// Testing variables
internal var timer: CameraTimer = CameraTimer()
diff --git a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraUtils.kt b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraUtils.kt
index ab919f2..0b73ead 100644
--- a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraUtils.kt
+++ b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CameraUtils.kt
@@ -29,7 +29,7 @@
import android.util.SparseIntArray
import android.view.Surface
import androidx.appcompat.app.AppCompatActivity
-import androidx.camera.core.ImageCaptureConfig
+import androidx.camera.core.ImageCapture
import androidx.camera.core.Preview
import androidx.camera.integration.antelope.MainActivity.Companion.FIXED_FOCUS_DISTANCE
import androidx.camera.integration.antelope.MainActivity.Companion.cameraParams
@@ -167,7 +167,7 @@
cameraXPreviewBuilder = Preview.Builder()
- cameraXCaptureBuilder = ImageCaptureConfig.Builder()
+ cameraXCaptureBuilder = ImageCapture.Builder()
imageAvailableListener =
ImageAvailableListener(activity, this, TestConfig())
diff --git a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt
index 705ce10..8582c6a 100644
--- a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt
+++ b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt
@@ -27,7 +27,6 @@
import androidx.camera.camera2.ExperimentalCamera2Interop
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageCapture
-import androidx.camera.core.ImageCaptureConfig
import androidx.camera.core.LensFacing
import androidx.camera.core.Preview
import androidx.camera.core.PreviewSurfaceProviders
@@ -315,9 +314,9 @@
deviceStateCallback:
CameraDevice.StateCallback,
sessionCaptureCallback: CameraCaptureSession.CaptureCallback
-): ImageCaptureConfig.Builder {
+): ImageCapture.Builder {
- val configBuilder = ImageCaptureConfig.Builder()
+ val configBuilder = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
Camera2Config.Extender(configBuilder)
.setDeviceStateCallback(deviceStateCallback)