Merge "camera: Fix exception handling from ImageReader#detach" into tm-d1-dev

This commit is contained in:
Avichal Rakesh
2022-07-07 22:14:03 +00:00
committed by Android (Google) Code Review

View File

@@ -1737,6 +1737,20 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
// This is possible in case the client disconnects from the output surface // This is possible in case the client disconnects from the output surface
// abruptly. // abruptly.
Log.w(TAG, "Output surface likely abandoned, dropping buffer!");
img.close();
} catch (RuntimeException e) {
// NOTE: This is intended to catch RuntimeException from ImageReader.detachImage
// ImageReader.detachImage is not supposed to throw RuntimeExceptions but the
// bug went unchecked for a few years and now its behavior cannot be changed
// without breaking backwards compatibility.
if (!e.getClass().equals(RuntimeException.class)) {
// re-throw any exceptions that aren't base RuntimeException since they are
// coming from elsewhere, and we shouldn't silently drop those.
throw e;
}
Log.w(TAG, "Output surface likely abandoned, dropping buffer!"); Log.w(TAG, "Output surface likely abandoned, dropping buffer!");
img.close(); img.close();
} }
@@ -1773,9 +1787,23 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
} }
try { try {
reader.detachImage(img); reader.detachImage(img);
} catch (Exception e) { } catch (IllegalStateException e) {
Log.e(TAG, Log.e(TAG, "Failed to detach image!");
"Failed to detach image!"); img.close();
return;
} catch (RuntimeException e) {
// NOTE: This is intended to catch RuntimeException from ImageReader.detachImage
// ImageReader.detachImage is not supposed to throw RuntimeExceptions but the
// bug went unchecked for a few years and now its behavior cannot be changed
// without breaking backwards compatibility.
if (!e.getClass().equals(RuntimeException.class)) {
// re-throw any exceptions that aren't base RuntimeException since they are
// coming from elsewhere, and we shouldn't silently drop those.
throw e;
}
Log.e(TAG, "Failed to detach image!");
img.close(); img.close();
return; return;
} }