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

Commit 0521e677 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Camera: Quit extension handler thread during release" am: 8aacfdb2

parents ee70bf48 8aacfdb2
Loading
Loading
Loading
Loading
+69 −59
Original line number Diff line number Diff line
@@ -716,7 +716,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {

        synchronized (mInterfaceLock) {
            mInternalRepeatingRequestEnabled = false;
            mHandlerThread.quitSafely();
            mHandlerThread.quit();

            try {
                mPreviewExtender.onDeInit();
@@ -1252,6 +1252,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
        @Override
        public void onImageAvailable(ImageReader reader) {
            Image img;
            synchronized (mInterfaceLock) {
                try {
                    img = reader.acquireNextImage();
                } catch (IllegalStateException e) {
@@ -1266,7 +1267,8 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {

                Long timestamp = img.getTimestamp();
                if (mImageListenerMap.containsKey(timestamp)) {
                Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(timestamp);
                    Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(
                            timestamp);
                    if (entry.second != null) {
                        entry.second.onImageAvailable(reader, img);
                    } else {
@@ -1274,13 +1276,15 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
                        img.close();
                    }
                } else {
                mImageListenerMap.put(img.getTimestamp(), new Pair<>(img, null));
                    mImageListenerMap.put(timestamp, new Pair<>(img, null));
                }

                notifyDroppedImages(timestamp);
            }
        }

        private void notifyDroppedImages(long timestamp) {
            synchronized (mInterfaceLock) {
                Set<Long> timestamps = mImageListenerMap.keySet();
                ArrayList<Long> removedTs = new ArrayList<>();
                for (long ts : timestamps) {
@@ -1300,10 +1304,13 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
                    mImageListenerMap.remove(ts);
                }
            }
        }

        public void registerListener(Long timestamp, OnImageAvailableListener listener) {
            synchronized (mInterfaceLock) {
                if (mImageListenerMap.containsKey(timestamp)) {
                Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(timestamp);
                    Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(
                            timestamp);
                    if (entry.first != null) {
                        listener.onImageAvailable(mImageReader, entry.first);
                        if (mOutOfBuffers) {
@@ -1319,9 +1326,11 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
                    mImageListenerMap.put(timestamp, new Pair<>(null, listener));
                }
            }
        }

        @Override
        public void close() {
            synchronized (mInterfaceLock) {
                for (Pair<Image, OnImageAvailableListener> entry : mImageListenerMap.values()) {
                    if (entry.first != null) {
                        entry.first.close();
@@ -1336,6 +1345,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
                mImageListenerMap.clear();
            }
        }
    }

    private class CloseRequestHandler extends CameraCaptureSession.CaptureCallback {
        private final CameraOutputImageCallback mImageCallback;