Revert "Enable extensions to switch between different camera2 implementations"
This reverts commit 64180328f3825fdb6928772efa2ac95ace060fe3.
Reason for revert: Dependency added on unreleased library `camera-camera2-pipe-integration` which will block release.
Change-Id: I005a10586f229949b2e8bd2df85996bec9a630b1
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt
index aafb109..cf910d3 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt
@@ -24,6 +24,7 @@
import androidx.camera.camera2.pipe.integration.impl.CameraProperties
import androidx.camera.core.CameraInfo
import androidx.camera.core.impl.CameraInfoInternal
+import androidx.core.util.Preconditions
/**
* An interface for retrieving Camera2-related camera information.
@@ -31,7 +32,7 @@
@ExperimentalCamera2Interop
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
class Camera2CameraInfo private constructor(
- internal val cameraProperties: CameraProperties,
+ private val cameraProperties: CameraProperties,
) {
/**
@@ -72,31 +73,6 @@
fun getCameraId(): String = cameraProperties.cameraId.value
- /**
- * Returns a map consisting of the camera ids and the
- * [android.hardware.camera2.CameraCharacteristics]s.
- *
- * For every camera, the map contains at least the CameraCharacteristics for the camera id.
- * If the camera is logical camera, it will also contain associated physical camera ids and
- * their CameraCharacteristics.
- */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
- fun getCameraCharacteristicsMap(): Map<String, CameraCharacteristics> {
- return buildMap {
- put(
- cameraProperties.cameraId.value,
- cameraProperties.metadata.unwrapAs(CameraCharacteristics::class)!!
- )
- for (cameraId in cameraProperties.metadata.physicalCameraIds) {
- put(
- cameraId.value,
- cameraProperties.metadata.awaitPhysicalMetadata(cameraId)
- .unwrapAs(CameraCharacteristics::class)!!
- )
- }
- }
- }
-
companion object {
/**
@@ -111,10 +87,11 @@
@JvmStatic
fun from(@Suppress("UNUSED_PARAMETER") cameraInfo: CameraInfo): Camera2CameraInfo {
var cameraInfoImpl = (cameraInfo as CameraInfoInternal).implementation
- require(cameraInfoImpl is CameraInfoAdapter) {
+ Preconditions.checkArgument(
+ cameraInfoImpl is CameraInfoAdapter,
"CameraInfo doesn't contain Camera2 implementation."
- }
- return cameraInfoImpl.camera2CameraInfo
+ )
+ return (cameraInfoImpl as CameraInfoAdapter).camera2CameraInfo
}
/**
@@ -123,29 +100,5 @@
@RestrictTo(RestrictTo.Scope.LIBRARY)
@JvmStatic
fun create(cameraProperties: CameraProperties) = Camera2CameraInfo(cameraProperties)
-
- /**
- * Returns the [android.hardware.camera2.CameraCharacteristics] for this camera.
- *
- * The CameraCharacteristics will be the ones that would be obtained by
- * [android.hardware.camera2.CameraManager.getCameraCharacteristics]. The
- * CameraCharacteristics that are retrieved are not static and can change depending on the
- * current internal configuration of the camera.
- *
- * @param cameraInfo The [CameraInfo] to extract the CameraCharacteristics from.
- * @throws IllegalStateException if the camera info does not contain the camera 2
- * characteristics(e.g., if CameraX was not initialized with a
- * [androidx.camera.camera2.Camera2Config]).
- */
- @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- @JvmStatic
- fun extractCameraCharacteristics(cameraInfo: CameraInfo): CameraCharacteristics {
- var cameraInfoImpl = (cameraInfo as CameraInfoInternal).implementation
- require(cameraInfoImpl is CameraInfoAdapter) {
- "CameraInfo doesn't contain Camera2 implementation."
- }
- return cameraInfoImpl.camera2CameraInfo
- .cameraProperties.metadata.unwrapAs(CameraCharacteristics::class)!!
- }
}
}
diff --git a/camera/camera-extensions/build.gradle b/camera/camera-extensions/build.gradle
index 3ae5439..fbe84e3 100644
--- a/camera/camera-extensions/build.gradle
+++ b/camera/camera-extensions/build.gradle
@@ -30,7 +30,6 @@
implementation("androidx.core:core:1.0.0")
implementation("androidx.concurrent:concurrent-futures:1.0.0")
implementation(libs.autoValueAnnotations)
- implementation(project(':camera:camera-camera2-pipe-integration'))
annotationProcessor(libs.autoValue)
compileOnly(project(":camera:camera-extensions-stub"))
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java
index a859edb..0da3b2b 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java
@@ -19,12 +19,16 @@
import android.hardware.camera2.CameraCharacteristics;
import androidx.annotation.NonNull;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
+import androidx.camera.camera2.interop.Camera2CameraInfo;
+import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
import androidx.camera.core.CameraFilter;
import androidx.camera.core.CameraInfo;
+import androidx.camera.core.impl.CameraInfoInternal;
import androidx.camera.core.impl.Identifier;
-import androidx.camera.extensions.internal.Camera2CameraInfoWrapper;
import androidx.camera.extensions.internal.VendorExtender;
+import androidx.core.util.Preconditions;
import java.util.ArrayList;
import java.util.List;
@@ -50,15 +54,18 @@
return mId;
}
+ @OptIn(markerClass = ExperimentalCamera2Interop.class)
@NonNull
@Override
public List<CameraInfo> filter(@NonNull List<CameraInfo> cameraInfos) {
List<CameraInfo> result = new ArrayList<>();
for (CameraInfo cameraInfo : cameraInfos) {
- String cameraId = Camera2CameraInfoWrapper.from(cameraInfo).getCameraId();
+ Preconditions.checkArgument(cameraInfo instanceof CameraInfoInternal,
+ "The camera info doesn't contain internal implementation.");
+ String cameraId = Camera2CameraInfo.from(cameraInfo).getCameraId();
Map<String, CameraCharacteristics> cameraCharacteristicsMap =
- Camera2CameraInfoWrapper.from(cameraInfo).getCameraCharacteristicsMap();
+ Camera2CameraInfo.from(cameraInfo).getCameraCharacteristicsMap();
if (mVendorExtender
.isExtensionAvailable(cameraId, cameraCharacteristicsMap)) {
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java
index 6d5494f..5722a6b 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java
@@ -26,8 +26,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
+import androidx.camera.camera2.interop.Camera2CameraInfo;
+import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.Logger;
import androidx.camera.core.impl.SessionProcessor;
@@ -90,12 +93,13 @@
mAdvancedExtenderImpl = advancedExtenderImpl;
}
+ @OptIn(markerClass = ExperimentalCamera2Interop.class)
@Override
public void init(@NonNull CameraInfo cameraInfo) {
- mCameraId = Camera2CameraInfoWrapper.from(cameraInfo).getCameraId();
+ mCameraId = Camera2CameraInfo.from(cameraInfo).getCameraId();
Map<String, CameraCharacteristics> cameraCharacteristicsMap =
- Camera2CameraInfoWrapper.from(cameraInfo).getCameraCharacteristicsMap();
+ Camera2CameraInfo.from(cameraInfo).getCameraCharacteristicsMap();
mAdvancedExtenderImpl.init(mCameraId, cameraCharacteristicsMap);
}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java
index fa8e2fb..508f54d8 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java
@@ -29,8 +29,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
+import androidx.camera.camera2.interop.Camera2CameraInfo;
+import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.Logger;
import androidx.camera.core.impl.ImageFormatConstants;
@@ -89,7 +92,6 @@
CaptureRequest.FLASH_MODE,
CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION
));
-
static {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
sBaseSupportedKeys.add(CaptureRequest.CONTROL_ZOOM_RATIO);
@@ -154,6 +156,7 @@
&& mImageCaptureExtenderImpl.isExtensionAvailable(cameraId, cameraCharacteristics);
}
+ @OptIn(markerClass = ExperimentalCamera2Interop.class)
@Override
public void init(@NonNull CameraInfo cameraInfo) {
mCameraInfo = cameraInfo;
@@ -162,9 +165,9 @@
return;
}
- mCameraId = Camera2CameraInfoWrapper.from(cameraInfo).getCameraId();
+ mCameraId = Camera2CameraInfo.from(cameraInfo).getCameraId();
mCameraCharacteristics =
- Camera2CameraInfoWrapper.extractCameraCharacteristics(cameraInfo);
+ Camera2CameraInfo.extractCameraCharacteristics(cameraInfo);
mPreviewExtenderImpl.init(mCameraId, mCameraCharacteristics);
mImageCaptureExtenderImpl.init(mCameraId, mCameraCharacteristics);
@@ -187,8 +190,9 @@
return null;
}
+ @OptIn(markerClass = ExperimentalCamera2Interop.class)
private Size[] getOutputSizes(int imageFormat) {
- StreamConfigurationMap map = Camera2CameraInfoWrapper.from(mCameraInfo)
+ StreamConfigurationMap map = Camera2CameraInfo.from(mCameraInfo)
.getCameraCharacteristic(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
return map.getOutputSizes(imageFormat);
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/Camera2CameraInfoWrapper.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/Camera2CameraInfoWrapper.java
deleted file mode 100644
index 48d3935..0000000
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/Camera2CameraInfoWrapper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.camera.extensions.internal;
-
-import android.hardware.camera2.CameraCharacteristics;
-import android.os.Build;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.OptIn;
-import androidx.annotation.RequiresApi;
-import androidx.camera.camera2.internal.Camera2CameraInfoImpl;
-import androidx.camera.camera2.pipe.integration.adapter.CameraInfoAdapter;
-import androidx.camera.core.CameraInfo;
-import androidx.camera.core.impl.CameraInfoInternal;
-
-import java.util.Map;
-
-
-@OptIn(markerClass = {androidx.camera.camera2.interop.ExperimentalCamera2Interop.class,
- androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop.class})
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public final class Camera2CameraInfoWrapper {
- private androidx.camera.camera2.interop.Camera2CameraInfo mCamera2CameraInfo;
- private androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo
- mCameraPipeCameraInfo;
-
- Camera2CameraInfoWrapper(@NonNull Camera2CameraInfoImpl camera2CameraInfo) {
- mCamera2CameraInfo =
- androidx.camera.camera2.interop.Camera2CameraInfo.from(camera2CameraInfo);
- }
-
- Camera2CameraInfoWrapper(@NonNull CameraInfoAdapter cameraInfoAdapter) {
- mCameraPipeCameraInfo =
- androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo.from(
- cameraInfoAdapter);
- }
-
- @NonNull
- public static Camera2CameraInfoWrapper from(@NonNull CameraInfo cameraInfo) {
- CameraInfoInternal cameraInfoInternal =
- ((CameraInfoInternal) cameraInfo).getImplementation();
- if (cameraInfoInternal instanceof Camera2CameraInfoImpl) {
- return new Camera2CameraInfoWrapper((Camera2CameraInfoImpl) cameraInfoInternal);
- } else if (cameraInfoInternal instanceof CameraInfoAdapter) {
- return new Camera2CameraInfoWrapper((CameraInfoAdapter) cameraInfoInternal);
- } else {
- throw new IllegalArgumentException("Not a Camera2 implementation!");
- }
- }
-
- @NonNull
- public String getCameraId() {
- if (mCamera2CameraInfo != null) {
- return mCamera2CameraInfo.getCameraId();
- } else {
- return mCameraPipeCameraInfo.getCameraId();
- }
- }
-
- @NonNull
- public <T> T getCameraCharacteristic(@NonNull CameraCharacteristics.Key<T> key) {
- if (mCamera2CameraInfo != null) {
- return mCamera2CameraInfo.getCameraCharacteristic(key);
- } else {
- return mCameraPipeCameraInfo.getCameraCharacteristic(key);
- }
- }
-
- @NonNull
- public static CameraCharacteristics extractCameraCharacteristics(
- @NonNull CameraInfo cameraInfo) {
- CameraInfoInternal cameraInfoInternal =
- ((CameraInfoInternal) cameraInfo).getImplementation();
- if (cameraInfoInternal instanceof Camera2CameraInfoImpl) {
- return androidx.camera.camera2.interop.Camera2CameraInfo.extractCameraCharacteristics(
- cameraInfo);
- } else if (cameraInfoInternal instanceof CameraInfoAdapter) {
- return androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo
- .extractCameraCharacteristics(cameraInfo);
- } else {
- throw new IllegalArgumentException("Not a Camera2 implementation!");
- }
- }
-
- @NonNull
- public Map<String, CameraCharacteristics> getCameraCharacteristicsMap() {
- if (mCamera2CameraInfo != null) {
- return mCamera2CameraInfo.getCameraCharacteristicsMap();
- } else {
- return mCameraPipeCameraInfo.getCameraCharacteristicsMap();
- }
- }
-}
diff --git a/camera/integration-tests/extensionstestapp/build.gradle b/camera/integration-tests/extensionstestapp/build.gradle
index e99a244..065d53d 100644
--- a/camera/integration-tests/extensionstestapp/build.gradle
+++ b/camera/integration-tests/extensionstestapp/build.gradle
@@ -63,7 +63,6 @@
// Guava
implementation(libs.guavaAndroid)
implementation("androidx.viewpager2:viewpager2:1.0.0")
- implementation(project(':camera:camera-camera2-pipe-integration'))
androidTestImplementation(libs.testExtJunit)
androidTestImplementation(libs.testCore)
@@ -77,7 +76,6 @@
exclude(group:"androidx.test")
}
androidTestImplementation(project(":internal-testutils-runtime"))
- androidTestImplementation(project(":concurrent:concurrent-futures"))
androidTestCompileOnly(project(":camera:camera-extensions-stub"))
// Testing resource dependency for manifest
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 05119ed..d0f23fc 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
@@ -60,7 +60,6 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.camera2.interop.Camera2Interop;
import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
-import androidx.camera.camera2.pipe.integration.CameraPipeConfig;
import androidx.camera.core.Camera;
import androidx.camera.core.CameraControl;
import androidx.camera.core.CameraInfo;
@@ -80,7 +79,6 @@
import androidx.camera.integration.extensions.utils.ExtensionModeUtil;
import androidx.camera.integration.extensions.utils.FpsRecorder;
import androidx.camera.integration.extensions.validation.CameraValidationResultActivity;
-import androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.concurrent.futures.CallbackToFutureAdapter;
@@ -111,8 +109,6 @@
private static final String TAG = "CameraExtensionActivity";
private static final int PERMISSIONS_REQUEST_CODE = 42;
- public static final String INTENT_EXTRA_CAMERA_IMPLEMENTATION = "camera_implementation";
- public static final String CAMERA_PIPE_IMPLEMENTATION_OPTION = "camera_pipe";
private CameraSelector mCurrentCameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
@@ -435,10 +431,7 @@
mFrameInfo = findViewById(R.id.frameInfo);
mPreviewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE);
setupPinchToZoomAndTapToFocus(mPreviewView);
- String cameraImplementation =
- getIntent().getStringExtra(INTENT_EXTRA_CAMERA_IMPLEMENTATION);
Futures.addCallback(setupPermissions(), new FutureCallback<Boolean>() {
- @OptIn(markerClass = ExperimentalCameraProviderConfiguration.class)
@Override
public void onSuccess(@Nullable Boolean result) {
mPermissionsGranted = Preconditions.checkNotNull(result);
@@ -451,10 +444,6 @@
return;
}
- if (cameraImplementation != null &&
- cameraImplementation.equals(CAMERA_PIPE_IMPLEMENTATION_OPTION)) {
- ProcessCameraProvider.configureInstance(CameraPipeConfig.defaultConfig());
- }
ListenableFuture<ProcessCameraProvider> cameraProviderFuture =
ProcessCameraProvider.getInstance(CameraExtensionsActivity.this);