Merge "Camera: Quit extension handler thread during release" into udc-dev am: f34e90c038
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23064806 Change-Id: I8d2fda34dea92058da8abeb326239aff5647b748 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -851,7 +851,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
|
|
||||||
synchronized (mInterfaceLock) {
|
synchronized (mInterfaceLock) {
|
||||||
mInternalRepeatingRequestEnabled = false;
|
mInternalRepeatingRequestEnabled = false;
|
||||||
mHandlerThread.quitSafely();
|
mHandlerThread.quit();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mPreviewExtender.onDeInit();
|
mPreviewExtender.onDeInit();
|
||||||
@@ -1393,6 +1393,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
@Override
|
@Override
|
||||||
public void onImageAvailable(ImageReader reader) {
|
public void onImageAvailable(ImageReader reader) {
|
||||||
Image img;
|
Image img;
|
||||||
|
synchronized (mInterfaceLock) {
|
||||||
try {
|
try {
|
||||||
img = reader.acquireNextImage();
|
img = reader.acquireNextImage();
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
@@ -1407,7 +1408,8 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
|
|
||||||
Long timestamp = img.getTimestamp();
|
Long timestamp = img.getTimestamp();
|
||||||
if (mImageListenerMap.containsKey(timestamp)) {
|
if (mImageListenerMap.containsKey(timestamp)) {
|
||||||
Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(timestamp);
|
Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(
|
||||||
|
timestamp);
|
||||||
if (entry.second != null) {
|
if (entry.second != null) {
|
||||||
entry.second.onImageAvailable(reader, img);
|
entry.second.onImageAvailable(reader, img);
|
||||||
} else {
|
} else {
|
||||||
@@ -1415,13 +1417,15 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
img.close();
|
img.close();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mImageListenerMap.put(img.getTimestamp(), new Pair<>(img, null));
|
mImageListenerMap.put(timestamp, new Pair<>(img, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyDroppedImages(timestamp);
|
notifyDroppedImages(timestamp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void notifyDroppedImages(long timestamp) {
|
private void notifyDroppedImages(long timestamp) {
|
||||||
|
synchronized (mInterfaceLock) {
|
||||||
Set<Long> timestamps = mImageListenerMap.keySet();
|
Set<Long> timestamps = mImageListenerMap.keySet();
|
||||||
ArrayList<Long> removedTs = new ArrayList<>();
|
ArrayList<Long> removedTs = new ArrayList<>();
|
||||||
for (long ts : timestamps) {
|
for (long ts : timestamps) {
|
||||||
@@ -1441,10 +1445,13 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
mImageListenerMap.remove(ts);
|
mImageListenerMap.remove(ts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void registerListener(Long timestamp, OnImageAvailableListener listener) {
|
public void registerListener(Long timestamp, OnImageAvailableListener listener) {
|
||||||
|
synchronized (mInterfaceLock) {
|
||||||
if (mImageListenerMap.containsKey(timestamp)) {
|
if (mImageListenerMap.containsKey(timestamp)) {
|
||||||
Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(timestamp);
|
Pair<Image, OnImageAvailableListener> entry = mImageListenerMap.remove(
|
||||||
|
timestamp);
|
||||||
if (entry.first != null) {
|
if (entry.first != null) {
|
||||||
listener.onImageAvailable(mImageReader, entry.first);
|
listener.onImageAvailable(mImageReader, entry.first);
|
||||||
if (mOutOfBuffers) {
|
if (mOutOfBuffers) {
|
||||||
@@ -1460,9 +1467,11 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
mImageListenerMap.put(timestamp, new Pair<>(null, listener));
|
mImageListenerMap.put(timestamp, new Pair<>(null, listener));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
|
synchronized (mInterfaceLock) {
|
||||||
for (Pair<Image, OnImageAvailableListener> entry : mImageListenerMap.values()) {
|
for (Pair<Image, OnImageAvailableListener> entry : mImageListenerMap.values()) {
|
||||||
if (entry.first != null) {
|
if (entry.first != null) {
|
||||||
entry.first.close();
|
entry.first.close();
|
||||||
@@ -1477,6 +1486,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
mImageListenerMap.clear();
|
mImageListenerMap.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class CloseRequestHandler extends CameraCaptureSession.CaptureCallback {
|
private class CloseRequestHandler extends CameraCaptureSession.CaptureCallback {
|
||||||
private final CameraOutputImageCallback mImageCallback;
|
private final CameraOutputImageCallback mImageCallback;
|
||||||
|
|||||||
Reference in New Issue
Block a user