Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a43bebe authored by Vadim Caen's avatar Vadim Caen
Browse files

Fake ae precapture cancellation when requested

Limited devices are expected to have precapture ae enabled and
respond to cancellation request. Since we don't actuall support
AE at all, let's just respect the cancellation expecation in
case it's requested

Fixes: 333865684
Test: StillCaptureTest#testAePrecaptureTriggerCancelJpegCapture
Change-Id: I863219bc8740307ebf93d43c9b2f9b71eb683c9a
parent 3015aeb5
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -109,7 +109,14 @@ CameraMetadata createCaptureResultMetadata(
          .setControlAeLock(ANDROID_CONTROL_AE_LOCK_OFF)
          .setControlAeMode(ANDROID_CONTROL_AE_MODE_ON)
          .setControlAePrecaptureTrigger(
              ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE)
              // Limited devices are expected to have precapture ae enabled and
              // respond to cancellation request. Since we don't actuall support
              // AE at all, let's just respect the cancellation expectation in
              // case it's requested
              requestSettings.aePrecaptureTrigger ==
                      ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
                  ? ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
                  : ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE)
          .setControlAeState(ANDROID_CONTROL_AE_STATE_INACTIVE)
          .setControlAfMode(ANDROID_CONTROL_AF_MODE_OFF)
          .setControlAfTrigger(ANDROID_CONTROL_AF_TRIGGER_IDLE)
+2 −0
Original line number Diff line number Diff line
@@ -64,6 +64,8 @@ struct RequestSettings {
  camera_metadata_enum_android_control_capture_intent_t captureIntent =
      VirtualCameraDevice::kDefaultCaptureIntent;
  std::optional<GpsCoordinates> gpsCoordinates;
  std::optional<camera_metadata_enum_android_control_ae_precapture_trigger>
      aePrecaptureTrigger;
};

// Represents single capture request to fill set of buffers.
+2 −1
Original line number Diff line number Diff line
@@ -265,7 +265,8 @@ RequestSettings createSettingsFromMetadata(const CameraMetadata& metadata) {
      .fpsRange = getFpsRange(metadata),
      .captureIntent = getCaptureIntent(metadata).value_or(
          ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW),
      .gpsCoordinates = getGpsCoordinates(metadata)};
      .gpsCoordinates = getGpsCoordinates(metadata),
      .aePrecaptureTrigger = getPrecaptureTrigger(metadata)};
}

}  // namespace
+16 −0
Original line number Diff line number Diff line
@@ -922,6 +922,22 @@ std::optional<camera_metadata_enum_android_lens_facing> getLensFacing(
  return static_cast<camera_metadata_enum_android_lens_facing>(entry.data.u8[0]);
}

std::optional<camera_metadata_enum_android_control_ae_precapture_trigger>
getPrecaptureTrigger(
    const aidl::android::hardware::camera::device::CameraMetadata& cameraMetadata) {
  auto metadata =
      reinterpret_cast<const camera_metadata_t*>(cameraMetadata.metadata.data());

  camera_metadata_ro_entry_t entry;
  if (find_camera_metadata_ro_entry(
          metadata, ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, &entry) != OK) {
    return std::nullopt;
  }

  return static_cast<camera_metadata_enum_android_control_ae_precapture_trigger>(
      entry.data.u8[0]);
}

}  // namespace virtualcamera
}  // namespace companion
}  // namespace android
+4 −0
Original line number Diff line number Diff line
@@ -475,6 +475,10 @@ std::optional<GpsCoordinates> getGpsCoordinates(
std::optional<camera_metadata_enum_android_lens_facing> getLensFacing(
    const aidl::android::hardware::camera::device::CameraMetadata& metadata);

std::optional<camera_metadata_enum_android_control_ae_precapture_trigger>
getPrecaptureTrigger(
    const aidl::android::hardware::camera::device::CameraMetadata& cameraMetadata);

}  // namespace virtualcamera
}  // namespace companion
}  // namespace android