summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorEmilian Peev <epeev@google.com>2022-05-24 22:20:42 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-05-24 22:20:42 +0000
commitf25e9aec2adb610e15e2b3b235b3debc8ff708c6 (patch)
tree59327d4cd22accb3c2d7f42754e556f52fdf18c0 /core/java
parent27a45d8ec3003009c0fdee717310a7d9c858e9d0 (diff)
parentc7f3fa192076b72139c794724eda0588182f9ce5 (diff)
Merge "Camera: Pass shared outputs during advanced extension configuration" into tm-dev
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/hardware/camera2/extension/CameraOutputConfig.aidl4
-rw-r--r--core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java94
2 files changed, 48 insertions, 50 deletions
diff --git a/core/java/android/hardware/camera2/extension/CameraOutputConfig.aidl b/core/java/android/hardware/camera2/extension/CameraOutputConfig.aidl
index a61bb3304c12..34d016adbc06 100644
--- a/core/java/android/hardware/camera2/extension/CameraOutputConfig.aidl
+++ b/core/java/android/hardware/camera2/extension/CameraOutputConfig.aidl
@@ -15,8 +15,8 @@
*/
package android.hardware.camera2.extension;
-import android.hardware.camera2.extension.Size;
import android.hardware.camera2.extension.OutputConfigId;
+import android.hardware.camera2.extension.Size;
import android.view.Surface;
/** @hide */
@@ -35,5 +35,5 @@ parcelable CameraOutputConfig
OutputConfigId outputId;
int surfaceGroupId;
String physicalCameraId;
- List<OutputConfigId> surfaceSharingOutputConfigs;
+ List<CameraOutputConfig> sharedSurfaceConfigs;
}
diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
index 5503e2834d98..c8dc2d0b0b91 100644
--- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
@@ -217,60 +217,30 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
CameraSessionConfig sessionConfig = mSessionProcessor.initSession(mCameraDevice.getId(),
previewSurface, captureSurface);
List<CameraOutputConfig> outputConfigs = sessionConfig.outputConfigs;
- // map camera output ids to output configurations
- HashMap<Integer, OutputConfiguration> cameraOutputs = new HashMap<>();
- for (CameraOutputConfig output : outputConfigs) {
- OutputConfiguration cameraOutput = null;
- switch(output.type) {
- case CameraOutputConfig.TYPE_SURFACE:
- if (output.surface == null) {
- Log.w(TAG, "Unsupported client output id: " + output.outputId.id +
- ", skipping!");
- continue;
- }
- cameraOutput = new OutputConfiguration(output.surfaceGroupId,
- output.surface);
- break;
- case CameraOutputConfig.TYPE_IMAGEREADER:
- if ((output.imageFormat == ImageFormat.UNKNOWN) || (output.size.width <= 0) ||
- (output.size.height <= 0)) {
- Log.w(TAG, "Unsupported client output id: " + output.outputId.id +
- ", skipping!");
- continue;
- }
- ImageReader reader = ImageReader.newInstance(output.size.width,
- output.size.height, output.imageFormat, output.capacity);
- mReaderMap.put(output.outputId.id, reader);
- cameraOutput = new OutputConfiguration(output.surfaceGroupId,
- reader.getSurface());
- break;
- case CameraOutputConfig.TYPE_MULTIRES_IMAGEREADER:
- // Support for multi-resolution outputs to be added in future releases
- default:
- throw new IllegalArgumentException("Unsupported output config type: " +
- output.type);
- }
- cameraOutput.setPhysicalCameraId(output.physicalCameraId);
- cameraOutputs.put(output.outputId.id, cameraOutput);
- }
-
ArrayList<OutputConfiguration> outputList = new ArrayList<>();
for (CameraOutputConfig output : outputConfigs) {
- if (!cameraOutputs.containsKey(output.outputId.id)) {
- // Shared surface already removed by a previous iteration
+ Surface outputSurface = initializeSurfrace(output);
+ if (outputSurface == null) {
continue;
}
- OutputConfiguration outConfig = cameraOutputs.get(output.outputId.id);
- if ((output.surfaceSharingOutputConfigs != null) &&
- !output.surfaceSharingOutputConfigs.isEmpty()) {
- outConfig.enableSurfaceSharing();
- for (OutputConfigId outputId : output.surfaceSharingOutputConfigs) {
- outConfig.addSurface(cameraOutputs.get(outputId.id).getSurface());
- cameraOutputs.remove(outputId.id);
+ OutputConfiguration cameraOutput = new OutputConfiguration(output.surfaceGroupId,
+ outputSurface);
+
+ if ((output.sharedSurfaceConfigs != null) && !output.sharedSurfaceConfigs.isEmpty()) {
+ cameraOutput.enableSurfaceSharing();
+ for (CameraOutputConfig sharedOutputConfig : output.sharedSurfaceConfigs) {
+ Surface sharedSurface = initializeSurfrace(sharedOutputConfig);
+ if (sharedSurface == null) {
+ continue;
+ }
+ cameraOutput.addSurface(sharedSurface);
+ mCameraConfigMap.put(sharedSurface, sharedOutputConfig);
}
}
- outputList.add(outConfig);
- mCameraConfigMap.put(outConfig.getSurface(), output);
+
+ cameraOutput.setPhysicalCameraId(output.physicalCameraId);
+ outputList.add(cameraOutput);
+ mCameraConfigMap.put(cameraOutput.getSurface(), output);
}
SessionConfiguration sessionConfiguration = new SessionConfiguration(
@@ -995,4 +965,32 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
CameraMetadataNative.update(ret.getNativeMetadata(), request.parameters);
return ret;
}
+
+ private Surface initializeSurfrace(CameraOutputConfig output) {
+ switch(output.type) {
+ case CameraOutputConfig.TYPE_SURFACE:
+ if (output.surface == null) {
+ Log.w(TAG, "Unsupported client output id: " + output.outputId.id +
+ ", skipping!");
+ return null;
+ }
+ return output.surface;
+ case CameraOutputConfig.TYPE_IMAGEREADER:
+ if ((output.imageFormat == ImageFormat.UNKNOWN) || (output.size.width <= 0) ||
+ (output.size.height <= 0)) {
+ Log.w(TAG, "Unsupported client output id: " + output.outputId.id +
+ ", skipping!");
+ return null;
+ }
+ ImageReader reader = ImageReader.newInstance(output.size.width,
+ output.size.height, output.imageFormat, output.capacity);
+ mReaderMap.put(output.outputId.id, reader);
+ return reader.getSurface();
+ case CameraOutputConfig.TYPE_MULTIRES_IMAGEREADER:
+ // Support for multi-resolution outputs to be added in future releases
+ default:
+ throw new IllegalArgumentException("Unsupported output config type: " +
+ output.type);
+ }
+ }
}