diff options
| author | Emilian Peev <epeev@google.com> | 2022-05-24 22:20:42 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-05-24 22:20:42 +0000 |
| commit | f25e9aec2adb610e15e2b3b235b3debc8ff708c6 (patch) | |
| tree | 59327d4cd22accb3c2d7f42754e556f52fdf18c0 /core/java | |
| parent | 27a45d8ec3003009c0fdee717310a7d9c858e9d0 (diff) | |
| parent | c7f3fa192076b72139c794724eda0588182f9ce5 (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.aidl | 4 | ||||
| -rw-r--r-- | core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java | 94 |
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); + } + } } |
