From: Yin-Chia Yeh Date: Wed, 21 Feb 2018 20:38:19 +0000 (-0800) Subject: Camera: improve Surface equality check X-Git-Tag: android-x86-9.0-r1~198^2~147^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4f1514724cd25453c11a0feee1083941a99b1252;p=android-x86%2Fframeworks-base.git Camera: improve Surface equality check Bug: 72134091 73711267 Change-Id: I0d7b42f8621c1fb19ad9645d8b407eb90b05654d --- diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index 3ed533a4efcb..a1a14b964c37 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -24,6 +24,7 @@ import android.hardware.camera2.impl.SyntheticKey; import android.hardware.camera2.params.OutputConfiguration; import android.hardware.camera2.utils.HashCodeHelpers; import android.hardware.camera2.utils.TypeReference; +import android.hardware.camera2.utils.SurfaceUtils; import android.os.Parcel; import android.os.Parcelable; import android.util.ArraySet; @@ -643,6 +644,30 @@ public final class CaptureRequest extends CameraMetadata> break; } } + + if (!streamFound) { + // Check if we can match s by native object ID + long reqSurfaceId = SurfaceUtils.getSurfaceId(s); + for (int j = 0; j < configuredOutputs.size(); ++j) { + int streamId = configuredOutputs.keyAt(j); + OutputConfiguration outConfig = configuredOutputs.valueAt(j); + int surfaceId = 0; + for (Surface outSurface : outConfig.getSurfaces()) { + if (reqSurfaceId == SurfaceUtils.getSurfaceId(outSurface)) { + streamFound = true; + mStreamIdxArray[i] = streamId; + mSurfaceIdxArray[i] = surfaceId; + i++; + break; + } + surfaceId++; + } + if (streamFound) { + break; + } + } + } + if (!streamFound) { mStreamIdxArray = null; mSurfaceIdxArray = null; diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java index e7f2134de0ee..71a361bd00c6 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java +++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java @@ -730,7 +730,7 @@ public class LegacyCameraDevice implements AutoCloseable { LegacyExceptionUtils.throwOnError(nativeSetSurfaceDimens(surface, width, height)); } - static long getSurfaceId(Surface surface) throws BufferQueueAbandonedException { + public static long getSurfaceId(Surface surface) throws BufferQueueAbandonedException { checkNotNull(surface); try { return nativeGetSurfaceId(surface); diff --git a/core/java/android/hardware/camera2/utils/SurfaceUtils.java b/core/java/android/hardware/camera2/utils/SurfaceUtils.java index e1e1c4fd8018..92478441aea3 100644 --- a/core/java/android/hardware/camera2/utils/SurfaceUtils.java +++ b/core/java/android/hardware/camera2/utils/SurfaceUtils.java @@ -56,6 +56,20 @@ public class SurfaceUtils { } /** + * Get the native object id of a surface. + * + * @param surface The surface to be checked. + * @return the native object id of the surface, 0 if surface is not backed by a native object. + */ + public static long getSurfaceId(Surface surface) { + try { + return LegacyCameraDevice.getSurfaceId(surface); + } catch (BufferQueueAbandonedException e) { + return 0; + } + } + + /** * Get the Surface size. * * @param surface The surface to be queried for size.