Merge "Camera: Send onPrepared callback to all shared surfaces"
diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java
index dcd069d..da771e4 100644
--- a/core/java/android/hardware/camera2/CameraCaptureSession.java
+++ b/core/java/android/hardware/camera2/CameraCaptureSession.java
@@ -118,6 +118,11 @@
* the Surface provided to prepare must not be used as a target of a CaptureRequest submitted
* to this session.</p>
*
+ * <p>Note that if 2 surfaces share the same stream via {@link
+ * OutputConfiguration#enableSurfaceSharing} and {@link OutputConfiguration#addSurface},
+ * prepare() only needs to be called on one surface, and {link
+ * StateCallback#onSurfacePrepared} will be triggered for both surfaces.</p>
+ *
* <p>{@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY}
* devices cannot pre-allocate output buffers; for those devices,
* {@link StateCallback#onSurfacePrepared} will be immediately called, and no preallocation is
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index e3b97e8..e75b375 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -708,7 +708,8 @@
synchronized(mInterfaceLock) {
int streamId = -1;
for (int i = 0; i < mConfiguredOutputs.size(); i++) {
- if (surface == mConfiguredOutputs.valueAt(i).getSurface()) {
+ final List<Surface> surfaces = mConfiguredOutputs.valueAt(i).getSurfaces();
+ if (surfaces.contains(surface)) {
streamId = mConfiguredOutputs.keyAt(i);
break;
}
@@ -2020,9 +2021,10 @@
Log.w(TAG, "onPrepared invoked for unknown output Surface");
return;
}
- final Surface surface = output.getSurface();
-
- sessionCallback.onSurfacePrepared(surface);
+ final List<Surface> surfaces = output.getSurfaces();
+ for (Surface surface : surfaces) {
+ sessionCallback.onSurfacePrepared(surface);
+ }
}
@Override