Loading core/java/android/hardware/camera2/CameraManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -1081,6 +1081,12 @@ public final class CameraManager { * {@link java.util.concurrent.Executor} as an argument instead of * {@link android.os.Handler}.</p> * * <p>Do note that typically callbacks are expected to be dispatched * by the executor in a single thread. If the executor uses two or * more threads to dispatch callbacks, then clients must ensure correct * synchronization and must also be able to handle potentially different * ordering of the incoming callbacks.</p> * * @param cameraId * The unique identifier of the camera device to open * @param executor Loading core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +56 −2 Original line number Diff line number Diff line Loading @@ -290,6 +290,55 @@ public class CameraDeviceImpl extends CameraDevice } }; private class ClientStateCallback extends StateCallback { private final Executor mClientExecutor; private final StateCallback mClientStateCallback; private ClientStateCallback(@NonNull Executor clientExecutor, @NonNull StateCallback clientStateCallback) { mClientExecutor = clientExecutor; mClientStateCallback = clientStateCallback; } public void onClosed(@NonNull CameraDevice camera) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onClosed(camera); } }); } @Override public void onOpened(@NonNull CameraDevice camera) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onOpened(camera); } }); } @Override public void onDisconnected(@NonNull CameraDevice camera) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onDisconnected(camera); } }); } @Override public void onError(@NonNull CameraDevice camera, int error) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onError(camera, error); } }); } } public CameraDeviceImpl(String cameraId, StateCallback callback, Executor executor, CameraCharacteristics characteristics, Map<String, CameraCharacteristics> physicalIdsToChars, Loading @@ -300,8 +349,13 @@ public class CameraDeviceImpl extends CameraDevice throw new IllegalArgumentException("Null argument given"); } mCameraId = cameraId; if (Flags.singleThreadExecutor()) { mDeviceCallback = new ClientStateCallback(executor, callback); mDeviceExecutor = Executors.newSingleThreadExecutor(); } else { mDeviceCallback = callback; mDeviceExecutor = executor; } mCharacteristics = characteristics; mPhysicalIdsToChars = physicalIdsToChars; mAppTargetSdkVersion = appTargetSdkVersion; Loading Loading
core/java/android/hardware/camera2/CameraManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -1081,6 +1081,12 @@ public final class CameraManager { * {@link java.util.concurrent.Executor} as an argument instead of * {@link android.os.Handler}.</p> * * <p>Do note that typically callbacks are expected to be dispatched * by the executor in a single thread. If the executor uses two or * more threads to dispatch callbacks, then clients must ensure correct * synchronization and must also be able to handle potentially different * ordering of the incoming callbacks.</p> * * @param cameraId * The unique identifier of the camera device to open * @param executor Loading
core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +56 −2 Original line number Diff line number Diff line Loading @@ -290,6 +290,55 @@ public class CameraDeviceImpl extends CameraDevice } }; private class ClientStateCallback extends StateCallback { private final Executor mClientExecutor; private final StateCallback mClientStateCallback; private ClientStateCallback(@NonNull Executor clientExecutor, @NonNull StateCallback clientStateCallback) { mClientExecutor = clientExecutor; mClientStateCallback = clientStateCallback; } public void onClosed(@NonNull CameraDevice camera) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onClosed(camera); } }); } @Override public void onOpened(@NonNull CameraDevice camera) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onOpened(camera); } }); } @Override public void onDisconnected(@NonNull CameraDevice camera) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onDisconnected(camera); } }); } @Override public void onError(@NonNull CameraDevice camera, int error) { mClientExecutor.execute(new Runnable() { @Override public void run() { mClientStateCallback.onError(camera, error); } }); } } public CameraDeviceImpl(String cameraId, StateCallback callback, Executor executor, CameraCharacteristics characteristics, Map<String, CameraCharacteristics> physicalIdsToChars, Loading @@ -300,8 +349,13 @@ public class CameraDeviceImpl extends CameraDevice throw new IllegalArgumentException("Null argument given"); } mCameraId = cameraId; if (Flags.singleThreadExecutor()) { mDeviceCallback = new ClientStateCallback(executor, callback); mDeviceExecutor = Executors.newSingleThreadExecutor(); } else { mDeviceCallback = callback; mDeviceExecutor = executor; } mCharacteristics = characteristics; mPhysicalIdsToChars = physicalIdsToChars; mAppTargetSdkVersion = appTargetSdkVersion; Loading