diff options
| author | 2023-10-24 19:39:03 +0000 | |
|---|---|---|
| committer | 2023-10-24 19:39:03 +0000 | |
| commit | aca5839b95a2435336d61a0636f8740652a2149f (patch) | |
| tree | a435e81cf1edd1f610765736e239f2109d83ecba | |
| parent | a894e1d8c4fec69ef5b3e6e4fe97b04eebd446e3 (diff) | |
| parent | d4759b731b71536335b8342726c219e9eacdff46 (diff) | |
Merge "Camera: Disable buffer timestamp pruning during burst capture" into main
| -rw-r--r-- | core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java index bf77681bbbbd..db7055b1756d 100644 --- a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java @@ -357,7 +357,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { mCameraRepeatingSurface = mRepeatingRequestImageReader.getSurface(); } mRepeatingRequestImageCallback = new CameraOutputImageCallback( - mRepeatingRequestImageReader); + mRepeatingRequestImageReader, true /*pruneOlderBuffers*/); mRepeatingRequestImageReader .setOnImageAvailableListener(mRepeatingRequestImageCallback, mHandler); } @@ -398,7 +398,8 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT); } - mBurstCaptureImageCallback = new CameraOutputImageCallback(mBurstCaptureImageReader); + mBurstCaptureImageCallback = new CameraOutputImageCallback(mBurstCaptureImageReader, + false /*pruneOlderBuffers*/); mBurstCaptureImageReader.setOnImageAvailableListener(mBurstCaptureImageCallback, mHandler); mCameraBurstSurface = mBurstCaptureImageReader.getSurface(); @@ -1106,7 +1107,9 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { } for (Pair<Image, TotalCaptureResult> captureStage : mCaptureStageMap.values()) { - captureStage.first.close(); + if (captureStage.first != null) { + captureStage.first.close(); + } } mCaptureStageMap.clear(); } @@ -1207,6 +1210,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { if (mImageProcessor != null) { if (mCapturePendingMap.indexOfKey(timestamp) >= 0) { Image img = mCapturePendingMap.get(timestamp).first; + mCapturePendingMap.remove(timestamp); mCaptureStageMap.put(stageId, new Pair<>(img, result)); checkAndFireBurstProcessing(); } else { @@ -1303,6 +1307,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { reader.detachImage(img); if (mCapturePendingMap.indexOfKey(timestamp) >= 0) { Integer stageId = mCapturePendingMap.get(timestamp).second; + mCapturePendingMap.remove(timestamp); Pair<Image, TotalCaptureResult> captureStage = mCaptureStageMap.get(stageId); if (captureStage != null) { @@ -1402,9 +1407,11 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { private HashMap<Long, Pair<Image, OnImageAvailableListener>> mImageListenerMap = new HashMap<>(); private boolean mOutOfBuffers = false; + private final boolean mPruneOlderBuffers; - CameraOutputImageCallback(ImageReader imageReader) { + CameraOutputImageCallback(ImageReader imageReader, boolean pruneOlderBuffers) { mImageReader = imageReader; + mPruneOlderBuffers = pruneOlderBuffers; } @Override @@ -1447,6 +1454,10 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { ArrayList<Long> removedTs = new ArrayList<>(); for (long ts : timestamps) { if (ts < timestamp) { + if (!mPruneOlderBuffers) { + Log.w(TAG, "Unexpected older image with ts: " + ts); + continue; + } Log.e(TAG, "Dropped image with ts: " + ts); Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.get(ts); if (entry.second != null) { |