// Signature format: 3.0
package androidx.camera.camera2 {

  public final class Camera2Config {
    method public static androidx.camera.core.CameraXConfig defaultConfig();
  }

}

package androidx.camera.camera2.interop {

  @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
    method public static String extractCameraId(androidx.camera.core.CameraInfo);
  }

  @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
  }

  public static final class Camera2Interop.Extender<T> {
    ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
    method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
  }

  @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
  }

}

