Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aca5839b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Disable buffer timestamp pruning during burst capture" into main

parents a894e1d8 d4759b73
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -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,8 +1107,10 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
                }

                for (Pair<Image, TotalCaptureResult> captureStage : mCaptureStageMap.values()) {
                    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) {