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

Commit 4425a734 authored by Jan Sebechlebsky's avatar Jan Sebechlebsky
Browse files

Expose missing camera characteristics.

These keys are documented as present for every camera and are causing
camera CTS failures.

Bug: 301023410
Bug: 322965201
Test: adb shell cmd virtual_camera enable_test_camera && atest BustCaptureTest
Test: atest virtual_camera_tests
Test: atest CtsVirtualCameraTestCases
Change-Id: I6d67f94b69eb9c1af2bf288156891b8a952092af
parent 58ab2bcd
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -156,6 +156,8 @@ std::optional<CameraMetadata> initCameraCharacteristics(
          .setAvailableMaxDigitalZoom(1.0)
          .setControlAvailableModes({ANDROID_CONTROL_MODE_AUTO})
          .setControlAfAvailableModes({ANDROID_CONTROL_AF_MODE_OFF})
          .setControlAvailableSceneModes({ANDROID_CONTROL_SCENE_MODE_DISABLED})
          .setControlAvailableEffects({ANDROID_CONTROL_EFFECT_MODE_OFF})
          .setControlAeAvailableFpsRange(10, 30)
          .setControlMaxRegions(0, 0, 0)
          .setControlAfRegions({kDefaultEmptyControlRegion})
@@ -163,8 +165,13 @@ std::optional<CameraMetadata> initCameraCharacteristics(
          .setControlAwbRegions({kDefaultEmptyControlRegion})
          .setControlAeCompensationRange(0, 1)
          .setControlAeCompensationStep(camera_metadata_rational_t{0, 1})
          .setControlAwbLockAvailable(false)
          .setControlAeLockAvailable(false)
          .setControlAvailableAwbModes({ANDROID_CONTROL_AWB_MODE_AUTO})
          .setControlZoomRatioRange(/*min=*/1.0, /*max=*/1.0)
          .setMaxJpegSize(kMaxJpegSize)
          .setSyncMaxLatency(ANDROID_SYNC_MAX_LATENCY_UNKNOWN)
          .setAvailableRequestKeys({})
          .setAvailableRequestKeys({ANDROID_CONTROL_AF_MODE})
          .setAvailableResultKeys({ANDROID_CONTROL_AF_MODE})
          .setAvailableCapabilities(
+58 −1
Original line number Diff line number Diff line
@@ -103,6 +103,22 @@ MetadataBuilder& MetadataBuilder::setControlAvailableModes(
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAvailableSceneModes(
    const std::vector<camera_metadata_enum_android_control_scene_mode>&
        availableSceneModes) {
  mEntryMap[ANDROID_CONTROL_AVAILABLE_SCENE_MODES] =
      convertTo<uint8_t>(availableSceneModes);
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAvailableEffects(
    const std::vector<camera_metadata_enum_android_control_effect_mode>&
        availableEffects) {
  mEntryMap[ANDROID_CONTROL_AVAILABLE_EFFECTS] =
      convertTo<uint8_t>(availableEffects);
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAfAvailableModes(
    const std::vector<camera_metadata_enum_android_control_af_mode_t>&
        availableModes) {
@@ -133,6 +149,32 @@ MetadataBuilder& MetadataBuilder::setControlMaxRegions(int32_t maxAeRegions,
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAvailableAwbModes(
    const std::vector<camera_metadata_enum_android_control_awb_mode>& awbModes) {
  mEntryMap[ANDROID_CONTROL_AWB_AVAILABLE_MODES] = convertTo<uint8_t>(awbModes);
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAwbLockAvailable(
    const bool awbLockAvailable) {
  const uint8_t lockAvailable = awbLockAvailable
                                    ? ANDROID_CONTROL_AWB_LOCK_AVAILABLE_TRUE
                                    : ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE;
  mEntryMap[ANDROID_CONTROL_AWB_LOCK_AVAILABLE] =
      std::vector<uint8_t>({lockAvailable});
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAeLockAvailable(
    const bool aeLockAvailable) {
  const uint8_t lockAvailable = aeLockAvailable
                                    ? ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE
                                    : ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE;
  mEntryMap[ANDROID_CONTROL_AE_LOCK_AVAILABLE] =
      std::vector<uint8_t>({lockAvailable});
  return *this;
}

MetadataBuilder& MetadataBuilder::setControlAeRegions(
    const std::vector<ControlRegion>& aeRegions) {
  std::vector<int32_t> regions;
@@ -190,6 +232,21 @@ MetadataBuilder& MetadataBuilder::setMaxJpegSize(const int32_t size) {
  return *this;
}

MetadataBuilder& MetadataBuilder::setSyncMaxLatency(
    camera_metadata_enum_android_sync_max_latency latency) {
  mEntryMap[ANDROID_SYNC_MAX_LATENCY] =
      std::vector<int32_t>({static_cast<int32_t>(latency)});
  return *this;
}

MetadataBuilder& MetadataBuilder::setAvailableRequestCapabilities(
    const std::vector<camera_metadata_enum_android_request_available_capabilities_t>&
        requestCapabilities) {
  mEntryMap[ANDROID_REQUEST_AVAILABLE_CAPABILITIES] =
      convertTo<uint8_t>(requestCapabilities);
  return *this;
}

MetadataBuilder& MetadataBuilder::setAvailableOutputStreamConfigurations(
    const std::vector<StreamConfiguration>& streamConfigurations) {
  std::vector<int32_t> metadataStreamConfigs;
@@ -228,7 +285,7 @@ MetadataBuilder& MetadataBuilder::setAvailableOutputStreamConfigurations(

MetadataBuilder& MetadataBuilder::setAvailableMaxDigitalZoom(const float maxZoom) {
  mEntryMap[ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM] =
      std::vector<float>(maxZoom);
      std::vector<float>({maxZoom});
  return *this;
}

+30 −0
Original line number Diff line number Diff line
@@ -104,6 +104,16 @@ class MetadataBuilder {
      const std::vector<camera_metadata_enum_android_control_mode_t>&
          availableModes);

  // See ANDROID_CONTROL_AVAILABLE_SCENE_MODES in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAvailableSceneModes(
      const std::vector<camera_metadata_enum_android_control_scene_mode>&
          availableSceneModes);

  // See ANDROID_CONTROL_AVAILABLE_EFFECTS in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAvailableEffects(
      const std::vector<camera_metadata_enum_android_control_effect_mode>&
          availableEffects);

  // See ANDROID_CONTROL_AE_COMPENSATION_RANGE in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAeCompensationRange(int32_t min, int32_t max);

@@ -131,6 +141,16 @@ class MetadataBuilder {
                                        int32_t maxAwbRegions,
                                        int32_t maxAfRegions);

  // See ANDROID_CONTROL_AWB_AVAILABLE_MODES in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAvailableAwbModes(
      const std::vector<camera_metadata_enum_android_control_awb_mode>& awbModes);

  // See CONTROL_AWB_LOCK_AVAILABLE in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAwbLockAvailable(bool awbLockAvailable);

  // See CONTROL_AE_LOCK_AVAILABLE in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAeLockAvailable(bool aeLockAvailable);

  // See ANDROID_CONTROL_AE_REGIONS in CameraMetadataTag.aidl.
  MetadataBuilder& setControlAeRegions(
      const std::vector<ControlRegion>& aeRegions);
@@ -148,12 +168,22 @@ class MetadataBuilder {
  // See ANDROID_JPEG_SIZE in CameraMetadataTag.aidl.
  MetadataBuilder& setMaxJpegSize(int32_t size);

  // See ANDROID_SYNC_MAX_LATENCY in CameraMetadataTag.aidl.
  MetadataBuilder& setSyncMaxLatency(
      camera_metadata_enum_android_sync_max_latency setSyncMaxLatency);

  // See ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM in CameraMetadataTag.aidl.
  MetadataBuilder& setAvailableMaxDigitalZoom(const float maxZoom);

  // See ANDROID_CONTROL_ZOOM_RATIO_RANGE in CameraMetadataTag.aidl.
  MetadataBuilder& setControlZoomRatioRange(float min, float max);

  // See ANDROID_REQUEST_AVAILABLE_CAPABILITIES in CameraMetadataTag.aidl.
  MetadataBuilder& setAvailableRequestCapabilities(
      const std::vector<
          camera_metadata_enum_android_request_available_capabilities_t>&
          requestCapabilities);

  // A list of all keys that the camera device has available to use with
  // CaptureRequest.
  //