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 2a95ec27a1)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user