From 52c79d4b4f00cc1adbb29949ebe7ac978fce6002 Mon Sep 17 00:00:00 2001 From: Austin Borger Date: Sun, 8 Jan 2023 14:29:44 -0800 Subject: CameraDeviceImpl: Follow through reporting device errors even if the remote device was never initialized. It's possible for setRemoteDevice to be called *after* libcameraservice calls onDeviceError. It would be risky to implement changes to ensure setRemoteDevice gets called first , so use a simple boolean flag to track whether the remote device was initialized. If it wasn't, then we can't assume the user isn't interested in device errors - that is only true if the device was closed. Bug: 263429133 Test: Ran CtsCameraTestCases on cuttlefish Test: StreamedAppBehaviorTest#appsInVirtualDevice_shouldNotHaveAccessToCamera Change-Id: Id1990dcb17e5ec2afc562bf76e410b58a49dcf77 Merged-In: Id1990dcb17e5ec2afc562bf76e410b58a49dcf77 (cherry picked from commit 2a95ec27a18eb3526a4c279bcc283e6d7e17c593) --- core/java/android/hardware/camera2/impl/CameraDeviceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index a6c79b3a289f..0c2468e65577 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -87,6 +87,7 @@ public class CameraDeviceImpl extends CameraDevice // TODO: guard every function with if (!mRemoteDevice) check (if it was closed) private ICameraDeviceUserWrapper mRemoteDevice; + private boolean mRemoteDeviceInit = false; // Lock to synchronize cross-thread access to device public interface final Object mInterfaceLock = new Object(); // access from this class and Session only! @@ -338,6 +339,8 @@ public class CameraDeviceImpl extends CameraDevice mDeviceExecutor.execute(mCallOnOpened); mDeviceExecutor.execute(mCallOnUnconfigured); + + mRemoteDeviceInit = true; } } @@ -1754,8 +1757,8 @@ public class CameraDeviceImpl extends CameraDevice } synchronized(mInterfaceLock) { - if (mRemoteDevice == null) { - return; // Camera already closed + if (mRemoteDevice == null && mRemoteDeviceInit) { + return; // Camera already closed, user is not interested in errors anymore. } // Redirect device callback to the offline session in case we are in the middle -- cgit v1.2.3-59-g8ed1b