Merge "Camera: Quit extension handler thread during release"
This commit is contained in:
@@ -716,7 +716,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();
|
||||||
@@ -1252,6 +1252,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) {
|
||||||
@@ -1266,7 +1267,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 {
|
||||||
@@ -1274,13 +1276,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) {
|
||||||
@@ -1300,10 +1304,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) {
|
||||||
@@ -1319,9 +1326,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();
|
||||||
@@ -1336,6 +1345,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