Режим автоматической экспозиции при слабом освещении, режим автоматической экспозиции при слабом освещении

В Android 15 представлен режим автоматической экспозиции (AE) при слабом освещении — новый режим автоматической экспозиции, доступный как для камеры 2 , так и для расширения камеры для ночного режима . Режим Low Light Boost AE автоматически регулирует яркость потока предварительного просмотра в условиях низкой освещенности. Это отличается от того, как расширение камеры для ночного режима создает неподвижные изображения, поскольку ночной режим объединяет серию фотографий для создания единого улучшенного изображения. Хотя ночной режим очень хорошо работает для создания неподвижного изображения, он не может создавать непрерывный поток кадров, а режим усиления автоэкспозиции при слабом освещении может. Таким образом, режим Low Light Boost AE открывает новые возможности камеры, например:

  • Обеспечивает улучшенный предварительный просмотр изображения, чтобы пользователи могли лучше кадрировать свои снимки при слабом освещении.
  • Сканирование QR-кодов при слабом освещении.

Если вы включите режим Low Light Boost AE, он автоматически включается при низком уровне освещенности и выключается при большем освещении.

Приложения могут записывать поток предварительного просмотра в условиях низкой освещенности, чтобы сохранить более яркое видео.

Вы можете использовать режим Low Light Boost AE либо в Camera2 , либо с помощью расширений камеры . В этом документе описано, как использовать режим усиления автоэкспозиции при слабом освещении с камерой Camera2. Вы также можете использовать режим Low Light Boost AE с расширением камеры для ночного режима, если оно поддерживается устройством.

Проверить наличие

Прежде чем использовать режим Low Light Boost AE, убедитесь, что он поддерживается устройством. Если он доступен, режим усиления AE при слабом освещении является одним из режимов экспозиции, перечисленных в camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES . (Усиление при слабом освещении — это собственная настройка автоматической экспозиции, поскольку другие настройки автоматической экспозиции несовместимы с увеличением яркости при предварительном просмотре, выполняемым в режиме усиления автоэкспозиции при слабом освещении.)

Итак, чтобы проверить, доступен ли режим Low Light Boost AE, вызовите CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) и проверьте, включают ли возвращаемые режимы ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY :

Котлин

val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val autoExposureModes =
    characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!!
val lowLightBoostSupported = autoExposureModes.contains(
        CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY)

if (lowLightBoostSupported) {
  // Enable Low Light Boost AE Mode (next section)
} else {
  // Proceed without Low Light Boost AE Mode
}

Ява

CameraCharacteristics characteristics =
    mCameraManager.getCameraCharacteristics(cameraId);
int[] autoExposureModes =
    characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES);
boolean lowLightBoostSupported = autoExposureModes.contains(
        CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY);

if (lowLightBoostSupported) {
  // Enable Low Light Boost AE Mode (next section)
} else {
  // Proceed without Low Light Boost AE Mode
}

Включить режим усиления AE при слабом освещении

Чтобы включить режим усиления AE при слабом освещении в сеансе Camera2, установите для CaptureRequest.CONTROL_AE_MODE значение ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY . После этого вам необходимо будет подтвердить, что режим усиления автоэкспозиции при слабом освещении включен; вы можете сделать это, проверив поле CaptureResult.CONTROL_AE_MODE . Вам необходимо проверить, потому что Low Light Boost совместим не со всеми конфигурациями камер. Например, высокоскоростная запись не поддерживает режим Low Light Boost AE из соображений FPS. Если режим усиления автоэкспозиции при слабом освещении не включен, возможно, вам придется изменить конфигурацию камеры и повторить попытку.

Котлин

val captureRequestBuilder = camera.createCaptureRequest(
  CameraDevice.TEMPLATE_PREVIEW)
if (isLowLightBoostAvailable(cameraId)) {
  captureRequestBuilder.set(
    CaptureRequest.CONTROL_AE_MODE,
    CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
  )
}
// other capture request params

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // verify Low Light Boost AE Mode AE mode set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
    }
  },
  cameraHandler
)

Ява

CaptureRequest.Builder captureRequestBuilder =
  mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
if (isLowLightBoostAvailable(cameraId)) {
  captureRequestBuilder.set(
    CaptureRequest.CONTROL_AE_MODE,
    CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY);
}
// other capture request params

mSession.setRepeatingRequest(
  captureRequestBuilder.build(),
  new CaptureCallback() {
    @Override
    public void onCaptureCompleted(CameraCaptureSession session,
        CaptureRequest request, TotalCaptureResult result) {
      // verify Low Light Boost AE Mode AE mode set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY;
    }
  },
  mCameraHandler
);

Монитор Режим усиления автоэкспозиции при слабом освещении

Режим Low Light Boost AE делает поток предварительного просмотра ярче в условиях низкой освещенности и не оказывает никакого эффекта, если окружающая среда уже достаточно яркая для нормальной съемки. Вы можете проверить, активен ли в данный момент режим усиления экспозиции при слабом освещении, проверив поле CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE . Если вы включили режим Low Light Boost AE и он в данный момент активен, для поля установлено значение CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE . Затем вы можете отобразить значок луны или какой-либо другой признак того, что предварительный просмотр стал ярче.

Котлин

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // check if Low Light Boost AE Mode is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost AE Mode state is active
        // Show Moon Icon
      } else {
        // Low Light Boost AE Mode state is inactive or AE mode is not set
        // to Low Light Boost AE Mode
        // Hide Moon Icon
      }
    }
  },
  cameraHandler
)

Ява

mSession.setRepeatingRequest(
  captureRequestBuilder.build(),
  new CaptureCallback() {
    @Override
    public void onCaptureCompleted(CameraCaptureSession session,
        CaptureRequest request, TotalCaptureResult result) {
      // check if Low Light Boost AE Mode is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost AE Mode state is active
        // Show Moon Icon
      } else {
        // Low Light Boost AE Mode state is inactive or AE mode is not set
        // to Low Light Boost AE Mode
        // Hide Moon Icon
      }
    }
  },
  mCameraHandler
);
,

В Android 15 представлен режим автоматической экспозиции (AE) при слабом освещении — новый режим автоматической экспозиции, доступный как для камеры 2 , так и для расширения камеры для ночного режима . Режим Low Light Boost AE автоматически регулирует яркость потока предварительного просмотра в условиях низкой освещенности. Это отличается от того, как расширение камеры для ночного режима создает неподвижные изображения, поскольку ночной режим объединяет серию фотографий для создания единого улучшенного изображения. Хотя ночной режим очень хорошо работает для создания неподвижного изображения, он не может создавать непрерывный поток кадров, а режим Low Light Boost AE — может. Таким образом, режим Low Light Boost AE открывает новые возможности камеры, например:

  • Обеспечивает улучшенный предварительный просмотр изображения, чтобы пользователи могли лучше кадрировать свои снимки при слабом освещении.
  • Сканирование QR-кодов при слабом освещении.

Если вы включите режим Low Light Boost AE, он автоматически включается при низком уровне освещенности и выключается при большем освещении.

Приложения могут записывать поток предварительного просмотра в условиях низкой освещенности, чтобы сохранить более яркое видео.

Вы можете использовать режим Low Light Boost AE либо в Camera2 , либо с помощью расширений камеры . В этом документе описано, как использовать режим усиления автоэкспозиции при слабом освещении с камерой 2. Вы также можете использовать режим Low Light Boost AE с расширением камеры для ночного режима, если оно поддерживается устройством.

Проверить наличие

Прежде чем использовать режим Low Light Boost AE, убедитесь, что он поддерживается устройством. Если он доступен, режим усиления AE при слабом освещении является одним из режимов экспозиции, перечисленных в camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES . (Усиление при слабом освещении — это собственная настройка автоматической экспозиции, поскольку другие настройки автоматической экспозиции несовместимы с увеличением яркости при предварительном просмотре, выполняемым в режиме усиления автоэкспозиции при слабом освещении.)

Итак, чтобы проверить, доступен ли режим Low Light Boost AE, вызовите CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) и проверьте, включают ли возвращаемые режимы ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY :

Котлин

val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val autoExposureModes =
    characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!!
val lowLightBoostSupported = autoExposureModes.contains(
        CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY)

if (lowLightBoostSupported) {
  // Enable Low Light Boost AE Mode (next section)
} else {
  // Proceed without Low Light Boost AE Mode
}

Ява

CameraCharacteristics characteristics =
    mCameraManager.getCameraCharacteristics(cameraId);
int[] autoExposureModes =
    characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES);
boolean lowLightBoostSupported = autoExposureModes.contains(
        CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY);

if (lowLightBoostSupported) {
  // Enable Low Light Boost AE Mode (next section)
} else {
  // Proceed without Low Light Boost AE Mode
}

Включить режим усиления AE при слабом освещении

Чтобы включить режим усиления AE при слабом освещении в сеансе Camera2, установите для CaptureRequest.CONTROL_AE_MODE значение ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY . После этого вам необходимо будет подтвердить, что режим усиления автоэкспозиции при слабом освещении включен; вы можете сделать это, проверив поле CaptureResult.CONTROL_AE_MODE . Вам необходимо проверить, потому что Low Light Boost совместим не со всеми конфигурациями камер. Например, высокоскоростная запись не поддерживает режим Low Light Boost AE из соображений FPS. Если режим усиления автоэкспозиции при слабом освещении не включен, возможно, вам придется изменить конфигурацию камеры и повторить попытку.

Котлин

val captureRequestBuilder = camera.createCaptureRequest(
  CameraDevice.TEMPLATE_PREVIEW)
if (isLowLightBoostAvailable(cameraId)) {
  captureRequestBuilder.set(
    CaptureRequest.CONTROL_AE_MODE,
    CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
  )
}
// other capture request params

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // verify Low Light Boost AE Mode AE mode set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
    }
  },
  cameraHandler
)

Ява

CaptureRequest.Builder captureRequestBuilder =
  mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
if (isLowLightBoostAvailable(cameraId)) {
  captureRequestBuilder.set(
    CaptureRequest.CONTROL_AE_MODE,
    CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY);
}
// other capture request params

mSession.setRepeatingRequest(
  captureRequestBuilder.build(),
  new CaptureCallback() {
    @Override
    public void onCaptureCompleted(CameraCaptureSession session,
        CaptureRequest request, TotalCaptureResult result) {
      // verify Low Light Boost AE Mode AE mode set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY;
    }
  },
  mCameraHandler
);

Монитор Режим усиления автоэкспозиции при слабом освещении

Режим Low Light Boost AE делает поток предварительного просмотра ярче в условиях низкой освещенности и не оказывает никакого эффекта, если окружающая среда уже достаточно яркая для нормальной съемки. Вы можете проверить, активен ли в данный момент режим усиления экспозиции при слабом освещении, проверив поле CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE . Если вы включили режим Low Light Boost AE и он в данный момент активен, для поля установлено значение CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE . Затем вы можете отобразить значок луны или какой-либо другой признак того, что предварительный просмотр стал ярче.

Котлин

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // check if Low Light Boost AE Mode is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost AE Mode state is active
        // Show Moon Icon
      } else {
        // Low Light Boost AE Mode state is inactive or AE mode is not set
        // to Low Light Boost AE Mode
        // Hide Moon Icon
      }
    }
  },
  cameraHandler
)

Ява

mSession.setRepeatingRequest(
  captureRequestBuilder.build(),
  new CaptureCallback() {
    @Override
    public void onCaptureCompleted(CameraCaptureSession session,
        CaptureRequest request, TotalCaptureResult result) {
      // check if Low Light Boost AE Mode is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost AE Mode state is active
        // Show Moon Icon
      } else {
        // Low Light Boost AE Mode state is inactive or AE mode is not set
        // to Low Light Boost AE Mode
        // Hide Moon Icon
      }
    }
  },
  mCameraHandler
);