Loading core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java +57 −44 Original line number Diff line number Diff line Loading @@ -98,15 +98,15 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes // Lock to synchronize cross-thread access to device public interface final Object mInterfaceLock = new Object(); // access from this class and Session only! final Object mInterfaceLock; /** * @hide */ @RequiresPermission(android.Manifest.permission.CAMERA) public static CameraAdvancedExtensionSessionImpl createCameraAdvancedExtensionSession( @NonNull CameraDevice cameraDevice, @NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId) @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId) throws CameraAccessException, RemoteException { long clientId = CameraExtensionCharacteristics.registerClient(ctx); if (clientId < 0) { Loading Loading @@ -183,7 +183,8 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes } private CameraAdvancedExtensionSessionImpl(long extensionClientId, @NonNull IAdvancedExtenderImpl extender, @NonNull CameraDevice cameraDevice, @NonNull IAdvancedExtenderImpl extender, @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface, @NonNull CameraExtensionSession.StateCallback callback, @NonNull Executor executor, int sessionId) { Loading @@ -200,6 +201,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes mInitialized = false; mInitializeHandler = new InitializeSessionHandler(); mSessionId = sessionId; mInterfaceLock = cameraDevice.mInterfaceLock; } /** Loading Loading @@ -511,6 +513,8 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes public void onConfigured(@NonNull CameraCaptureSession session) { synchronized (mInterfaceLock) { mCaptureSession = session; } try { CameraExtensionCharacteristics.initializeSession(mInitializeHandler); } catch (RemoteException e) { Loading @@ -520,11 +524,13 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes } } } } private class InitializeSessionHandler extends IInitializeSessionCallback.Stub { @Override public void onSuccess() { mHandler.post(new Runnable() { @Override public void run() { boolean status = true; synchronized (mInterfaceLock) { try { Loading @@ -532,40 +538,47 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes mSessionProcessor.onCaptureSessionStart(mRequestProcessor); mInitialized = true; } else { Log.v(TAG, "Failed to start capture session, session released before " + "extension start!"); Log.v(TAG, "Failed to start capture session, session " + " released before extension start!"); status = false; mCaptureSession.close(); } } catch (RemoteException e) { Log.e(TAG, "Failed to start capture session," + " extension service does not respond!"); status = false; mCaptureSession.close(); mInitialized = false; } } if (status) { final long ident = Binder.clearCallingIdentity(); try { mExecutor.execute( () -> mCallbacks.onConfigured(CameraAdvancedExtensionSessionImpl.this)); mExecutor.execute(() -> mCallbacks.onConfigured( CameraAdvancedExtensionSessionImpl.this)); } finally { Binder.restoreCallingIdentity(ident); } } else { notifyConfigurationFailure(); onFailure(); } } }); } @Override public void onFailure() { mHandler.post(new Runnable() { @Override public void run() { mCaptureSession.close(); Log.e(TAG, "Failed to initialize proxy service session!" + " This can happen when trying to configure multiple " + "concurrent extension sessions!"); notifyConfigurationFailure(); } }); } } private final class RequestCallbackHandler extends ICaptureCallback.Stub { Loading core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +48 −37 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { private boolean mInternalRepeatingRequestEnabled = true; // Lock to synchronize cross-thread access to device public interface final Object mInterfaceLock = new Object(); // access from this class and Session only! final Object mInterfaceLock; private static int nativeGetSurfaceFormat(Surface surface) { return SurfaceUtils.getSurfaceFormat(surface); Loading @@ -125,7 +125,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { */ @RequiresPermission(android.Manifest.permission.CAMERA) public static CameraExtensionSessionImpl createCameraExtensionSession( @NonNull CameraDevice cameraDevice, @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId) Loading Loading @@ -223,7 +223,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { @NonNull IPreviewExtenderImpl previewExtender, @NonNull List<Size> previewSizes, long extensionClientId, @NonNull CameraDevice cameraDevice, @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface, @NonNull StateCallback callback, Loading @@ -249,6 +249,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { mSupportedRequestKeys = requestKeys; mSupportedResultKeys = resultKeys; mCaptureResultsSupported = !resultKeys.isEmpty(); mInterfaceLock = cameraDevice.mInterfaceLock; } private void initializeRepeatingRequestPipeline() throws RemoteException { Loading Loading @@ -856,6 +857,9 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { private class InitializeSessionHandler extends IInitializeSessionCallback.Stub { @Override public void onSuccess() { mHandler.post(new Runnable() { @Override public void run() { boolean status = true; ArrayList<CaptureStageImpl> initialRequestList = compileInitialRequestList(); Loading Loading @@ -888,15 +892,22 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { notifyConfigurationFailure(); } } }); } @Override public void onFailure() { mHandler.post(new Runnable() { @Override public void run() { mCaptureSession.close(); Log.e(TAG, "Failed to initialize proxy service session!" + " This can happen when trying to configure multiple " + "concurrent extension sessions!"); notifyConfigurationFailure(); } }); } } private class BurstRequestHandler extends CameraCaptureSession.CaptureCallback { Loading Loading
core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java +57 −44 Original line number Diff line number Diff line Loading @@ -98,15 +98,15 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes // Lock to synchronize cross-thread access to device public interface final Object mInterfaceLock = new Object(); // access from this class and Session only! final Object mInterfaceLock; /** * @hide */ @RequiresPermission(android.Manifest.permission.CAMERA) public static CameraAdvancedExtensionSessionImpl createCameraAdvancedExtensionSession( @NonNull CameraDevice cameraDevice, @NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId) @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId) throws CameraAccessException, RemoteException { long clientId = CameraExtensionCharacteristics.registerClient(ctx); if (clientId < 0) { Loading Loading @@ -183,7 +183,8 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes } private CameraAdvancedExtensionSessionImpl(long extensionClientId, @NonNull IAdvancedExtenderImpl extender, @NonNull CameraDevice cameraDevice, @NonNull IAdvancedExtenderImpl extender, @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface, @NonNull CameraExtensionSession.StateCallback callback, @NonNull Executor executor, int sessionId) { Loading @@ -200,6 +201,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes mInitialized = false; mInitializeHandler = new InitializeSessionHandler(); mSessionId = sessionId; mInterfaceLock = cameraDevice.mInterfaceLock; } /** Loading Loading @@ -511,6 +513,8 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes public void onConfigured(@NonNull CameraCaptureSession session) { synchronized (mInterfaceLock) { mCaptureSession = session; } try { CameraExtensionCharacteristics.initializeSession(mInitializeHandler); } catch (RemoteException e) { Loading @@ -520,11 +524,13 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes } } } } private class InitializeSessionHandler extends IInitializeSessionCallback.Stub { @Override public void onSuccess() { mHandler.post(new Runnable() { @Override public void run() { boolean status = true; synchronized (mInterfaceLock) { try { Loading @@ -532,40 +538,47 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes mSessionProcessor.onCaptureSessionStart(mRequestProcessor); mInitialized = true; } else { Log.v(TAG, "Failed to start capture session, session released before " + "extension start!"); Log.v(TAG, "Failed to start capture session, session " + " released before extension start!"); status = false; mCaptureSession.close(); } } catch (RemoteException e) { Log.e(TAG, "Failed to start capture session," + " extension service does not respond!"); status = false; mCaptureSession.close(); mInitialized = false; } } if (status) { final long ident = Binder.clearCallingIdentity(); try { mExecutor.execute( () -> mCallbacks.onConfigured(CameraAdvancedExtensionSessionImpl.this)); mExecutor.execute(() -> mCallbacks.onConfigured( CameraAdvancedExtensionSessionImpl.this)); } finally { Binder.restoreCallingIdentity(ident); } } else { notifyConfigurationFailure(); onFailure(); } } }); } @Override public void onFailure() { mHandler.post(new Runnable() { @Override public void run() { mCaptureSession.close(); Log.e(TAG, "Failed to initialize proxy service session!" + " This can happen when trying to configure multiple " + "concurrent extension sessions!"); notifyConfigurationFailure(); } }); } } private final class RequestCallbackHandler extends ICaptureCallback.Stub { Loading
core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +48 −37 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { private boolean mInternalRepeatingRequestEnabled = true; // Lock to synchronize cross-thread access to device public interface final Object mInterfaceLock = new Object(); // access from this class and Session only! final Object mInterfaceLock; private static int nativeGetSurfaceFormat(Surface surface) { return SurfaceUtils.getSurfaceFormat(surface); Loading @@ -125,7 +125,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { */ @RequiresPermission(android.Manifest.permission.CAMERA) public static CameraExtensionSessionImpl createCameraExtensionSession( @NonNull CameraDevice cameraDevice, @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId) Loading Loading @@ -223,7 +223,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { @NonNull IPreviewExtenderImpl previewExtender, @NonNull List<Size> previewSizes, long extensionClientId, @NonNull CameraDevice cameraDevice, @NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice, @Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface, @NonNull StateCallback callback, Loading @@ -249,6 +249,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { mSupportedRequestKeys = requestKeys; mSupportedResultKeys = resultKeys; mCaptureResultsSupported = !resultKeys.isEmpty(); mInterfaceLock = cameraDevice.mInterfaceLock; } private void initializeRepeatingRequestPipeline() throws RemoteException { Loading Loading @@ -856,6 +857,9 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { private class InitializeSessionHandler extends IInitializeSessionCallback.Stub { @Override public void onSuccess() { mHandler.post(new Runnable() { @Override public void run() { boolean status = true; ArrayList<CaptureStageImpl> initialRequestList = compileInitialRequestList(); Loading Loading @@ -888,15 +892,22 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { notifyConfigurationFailure(); } } }); } @Override public void onFailure() { mHandler.post(new Runnable() { @Override public void run() { mCaptureSession.close(); Log.e(TAG, "Failed to initialize proxy service session!" + " This can happen when trying to configure multiple " + "concurrent extension sessions!"); notifyConfigurationFailure(); } }); } } private class BurstRequestHandler extends CameraCaptureSession.CaptureCallback { Loading