diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-10-04 22:19:19 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-10-04 22:19:19 +0000 |
commit | 585d2e9ac74710b27e6ec8c35faf2cf567cc788a (patch) | |
tree | 4ed4ccd0f64dd262ba83db6bfdd2c163ab84fa34 | |
parent | 0e20252316b1a6ede45a390522699dae6ffcbecd (diff) | |
parent | ff8b5e4309ac7c82a4d648e31c37b38f5f5d5671 (diff) | |
download | cts-585d2e9ac74710b27e6ec8c35faf2cf567cc788a.tar.gz |
Merge "Camera: Fix race condition in MultiResolutionImageReader test" into android13-tests-dev
-rw-r--r-- | tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java b/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java index aecdb34c5a1..b022037c7d7 100644 --- a/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java +++ b/tests/camera/utils/src/android/hardware/camera2/cts/CameraTestUtils.java @@ -724,10 +724,22 @@ public class CameraTestUtils extends Assert { @Override public void onImageAvailable(ImageReader reader) { - if (VERBOSE) Log.v(TAG, "new image available"); + if (VERBOSE) Log.v(TAG, "new image available from reader " + reader.toString()); if (mAcquireLatest) { - mLastReader = reader; + synchronized (mLock) { + // If there is switch of image readers, acquire and releases all images + // from the previous image reader + if (mLastReader != reader) { + if (mLastReader != null) { + Image image = mLastReader.acquireLatestImage(); + if (image != null) { + image.close(); + } + } + mLastReader = reader; + } + } mImageAvailable.open(); } else { if (mQueue.size() < mMaxBuffers) { @@ -744,11 +756,17 @@ public class CameraTestUtils extends Assert { if (mAcquireLatest) { Image image = null; if (mImageAvailable.block(timeoutMs)) { - if (mLastReader != null) { - image = mLastReader.acquireLatestImage(); - if (VERBOSE) Log.v(TAG, "acquireLatestImage"); - } else { - fail("invalid image reader"); + synchronized (mLock) { + if (mLastReader != null) { + image = mLastReader.acquireLatestImage(); + if (VERBOSE) Log.v(TAG, "acquireLatestImage from " + + mLastReader.toString() + " produces " + image); + if (image == null) { + return null; + } + } else { + fail("invalid image reader"); + } } mImageAvailable.close(); } else { @@ -783,6 +801,7 @@ public class CameraTestUtils extends Assert { private final boolean mAcquireLatest; private ConditionVariable mImageAvailable = new ConditionVariable(); private ImageReader mLastReader = null; + private final Object mLock = new Object(); } public static class SimpleCaptureCallback extends CameraCaptureSession.CaptureCallback { |