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

Commit e449a0e8 authored by Vadim Caen's avatar Vadim Caen Committed by Android (Google) Code Review
Browse files

Merge "Fix CaptureResultTest#testCameraCaptureResultAllKeys" into main

parents 0880143c 11dfd938
Loading
Loading
Loading
Loading
+38 −12
Original line number Diff line number Diff line
@@ -124,9 +124,9 @@ bool isSupportedOutputFormat(const PixelFormat pixelFormat) {
         kOutputFormats.end();
}

std::vector<MetadataBuilder::FpsRange> fpsRangesForInputConfig(
std::vector<FpsRange> fpsRangesForInputConfig(
    const std::vector<SupportedStreamConfiguration>& configs) {
  std::set<MetadataBuilder::FpsRange> availableRanges;
  std::set<FpsRange> availableRanges;

  for (const SupportedStreamConfiguration& config : configs) {
    availableRanges.insert({.minFps = kMinFps, .maxFps = config.maxFps});
@@ -141,8 +141,7 @@ std::vector<MetadataBuilder::FpsRange> fpsRangesForInputConfig(
    availableRanges.insert({.minFps = 30, .maxFps = 30});
  }

  return std::vector<MetadataBuilder::FpsRange>(availableRanges.begin(),
                                                availableRanges.end());
  return std::vector<FpsRange>(availableRanges.begin(), availableRanges.end());
}

std::optional<Resolution> getMaxResolution(
@@ -301,14 +300,41 @@ std::optional<CameraMetadata> initCameraCharacteristics(
                                    ANDROID_JPEG_THUMBNAIL_QUALITY,
                                    ANDROID_NOISE_REDUCTION_MODE,
                                    ANDROID_STATISTICS_FACE_DETECT_MODE})
          .setAvailableResultKeys(
              {ANDROID_COLOR_CORRECTION_ABERRATION_MODE, ANDROID_CONTROL_AE_MODE,
               ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER, ANDROID_CONTROL_AF_MODE,
               ANDROID_CONTROL_AWB_MODE, ANDROID_CONTROL_EFFECT_MODE,
               ANDROID_CONTROL_MODE, ANDROID_FLASH_MODE, ANDROID_FLASH_STATE,
               ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, ANDROID_JPEG_QUALITY,
               ANDROID_JPEG_THUMBNAIL_QUALITY, ANDROID_LENS_FOCAL_LENGTH,
               ANDROID_SENSOR_TIMESTAMP, ANDROID_NOISE_REDUCTION_MODE})
          .setAvailableResultKeys({
              ANDROID_COLOR_CORRECTION_ABERRATION_MODE,
              ANDROID_CONTROL_AE_ANTIBANDING_MODE,
              ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
              ANDROID_CONTROL_AE_LOCK,
              ANDROID_CONTROL_AE_MODE,
              ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,
              ANDROID_CONTROL_AE_STATE,
              ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
              ANDROID_CONTROL_AF_MODE,
              ANDROID_CONTROL_AF_STATE,
              ANDROID_CONTROL_AF_TRIGGER,
              ANDROID_CONTROL_AWB_LOCK,
              ANDROID_CONTROL_AWB_MODE,
              ANDROID_CONTROL_AWB_STATE,
              ANDROID_CONTROL_CAPTURE_INTENT,
              ANDROID_CONTROL_EFFECT_MODE,
              ANDROID_CONTROL_MODE,
              ANDROID_CONTROL_SCENE_MODE,
              ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,
              ANDROID_STATISTICS_FACE_DETECT_MODE,
              ANDROID_FLASH_MODE,
              ANDROID_FLASH_STATE,
              ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,
              ANDROID_JPEG_QUALITY,
              ANDROID_JPEG_THUMBNAIL_QUALITY,
              ANDROID_LENS_FOCAL_LENGTH,
              ANDROID_LENS_OPTICAL_STABILIZATION_MODE,
              ANDROID_NOISE_REDUCTION_MODE,
              ANDROID_REQUEST_PIPELINE_DEPTH,
              ANDROID_SENSOR_TIMESTAMP,
              ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE,
              ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,
              ANDROID_STATISTICS_SCENE_FLICKER,
          })
          .setAvailableCapabilities(
              {ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE});

+4 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include "aidl/android/companion/virtualcamera/SupportedStreamConfiguration.h"
#include "aidl/android/companion/virtualcamera/VirtualCameraConfiguration.h"
#include "aidl/android/hardware/camera/device/BnCameraDevice.h"
#include "system/camera_metadata.h"
#include "util/Util.h"

namespace android {
@@ -121,6 +122,9 @@ class VirtualCameraDevice
  // Default JPEG compression quality.
  static constexpr uint8_t kDefaultJpegQuality = 80;

  static constexpr camera_metadata_enum_android_control_capture_intent_t
      kDefaultCaptureIntent = ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW;

 private:
  std::shared_ptr<VirtualCameraDevice> sharedFromThis();

+34 −2
Original line number Diff line number Diff line
@@ -92,30 +92,62 @@ CameraMetadata createCaptureResultMetadata(
    const std::chrono::nanoseconds timestamp,
    const RequestSettings& requestSettings,
    const Resolution reportedSensorSize) {
  std::unique_ptr<CameraMetadata> metadata =
  // All of the keys used in the response needs to be referenced in
  // availableResultKeys in CameraCharacteristics (see initCameraCharacteristics
  // in VirtualCameraDevice.cc).
  MetadataBuilder builder =
      MetadataBuilder()
          .setAberrationCorrectionMode(
              ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF)
          .setControlAeAvailableAntibandingModes(
              {ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF})
          .setControlAeAntibandingMode(ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF)
          .setControlAeExposureCompensation(0)
          .setControlAeLockAvailable(false)
          .setControlAeLock(ANDROID_CONTROL_AE_LOCK_OFF)
          .setControlAeMode(ANDROID_CONTROL_AE_MODE_ON)
          .setControlAePrecaptureTrigger(
              ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE)
          .setControlAeState(ANDROID_CONTROL_AE_STATE_INACTIVE)
          .setControlAfMode(ANDROID_CONTROL_AF_MODE_OFF)
          .setControlAfTrigger(ANDROID_CONTROL_AF_TRIGGER_IDLE)
          .setControlAfState(ANDROID_CONTROL_AF_STATE_INACTIVE)
          .setControlAwbMode(ANDROID_CONTROL_AWB_MODE_AUTO)
          .setControlAwbLock(ANDROID_CONTROL_AWB_LOCK_OFF)
          .setControlAwbState(ANDROID_CONTROL_AWB_STATE_INACTIVE)
          .setControlCaptureIntent(requestSettings.captureIntent)
          .setControlEffectMode(ANDROID_CONTROL_EFFECT_MODE_OFF)
          .setControlMode(ANDROID_CONTROL_MODE_AUTO)
          .setControlSceneMode(ANDROID_CONTROL_SCENE_MODE_DISABLED)
          .setControlVideoStabilizationMode(
              ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF)
          .setCropRegion(0, 0, reportedSensorSize.width,
                         reportedSensorSize.height)
          .setFaceDetectMode(ANDROID_STATISTICS_FACE_DETECT_MODE_OFF)
          .setFlashState(ANDROID_FLASH_STATE_UNAVAILABLE)
          .setFlashMode(ANDROID_FLASH_MODE_OFF)
          .setFocalLength(VirtualCameraDevice::kFocalLength)
          .setJpegQuality(requestSettings.jpegQuality)
          .setJpegThumbnailSize(requestSettings.thumbnailResolution.width,
                                requestSettings.thumbnailResolution.height)
          .setJpegThumbnailQuality(requestSettings.thumbnailJpegQuality)
          .setLensOpticalStabilizationMode(
              ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF)
          .setNoiseReductionMode(ANDROID_NOISE_REDUCTION_MODE_OFF)
          .setPipelineDepth(kPipelineDepth)
          .setSensorTimestamp(timestamp)
          .build();
          .setStatisticsHotPixelMapMode(
              ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE_OFF)
          .setStatisticsLensShadingMapMode(
              ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF)
          .setStatisticsSceneFlicker(ANDROID_STATISTICS_SCENE_FLICKER_NONE);

  if (requestSettings.fpsRange.has_value()) {
    builder.setControlAeTargetFpsRange(requestSettings.fpsRange.value());
  }

  std::unique_ptr<CameraMetadata> metadata = builder.build();

  if (metadata == nullptr) {
    ALOGE("%s: Failed to build capture result metadata", __func__);
    return CameraMetadata();
+4 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include "util/EglFramebuffer.h"
#include "util/EglProgram.h"
#include "util/EglSurfaceTexture.h"
#include "util/MetadataUtil.h"
#include "util/Util.h"

namespace android {
@@ -58,6 +59,9 @@ struct RequestSettings {
  int jpegQuality = VirtualCameraDevice::kDefaultJpegQuality;
  Resolution thumbnailResolution = Resolution(0, 0);
  int thumbnailJpegQuality = VirtualCameraDevice::kDefaultJpegQuality;
  std::optional<FpsRange> fpsRange = {};
  camera_metadata_enum_android_control_capture_intent_t captureIntent =
      VirtualCameraDevice::kDefaultCaptureIntent;
};

// Represents single capture request to fill set of buffers.
+5 −2
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ CameraMetadata createDefaultRequestSettings(
          .setControlMode(ANDROID_CONTROL_MODE_AUTO)
          .setControlAeMode(ANDROID_CONTROL_AE_MODE_ON)
          .setControlAeExposureCompensation(0)
          .setControlAeTargetFpsRange(maxFps, maxFps)
          .setControlAeTargetFpsRange(FpsRange{maxFps, maxFps})
          .setControlAeAntibandingMode(ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO)
          .setControlAePrecaptureTrigger(
              ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE)
@@ -260,7 +260,10 @@ RequestSettings createSettingsFromMetadata(const CameraMetadata& metadata) {
      .thumbnailResolution =
          getJpegThumbnailSize(metadata).value_or(Resolution(0, 0)),
      .thumbnailJpegQuality = getJpegThumbnailQuality(metadata).value_or(
          VirtualCameraDevice::kDefaultJpegQuality)};
          VirtualCameraDevice::kDefaultJpegQuality),
      .fpsRange = getFpsRange(metadata),
      .captureIntent = getCaptureIntent(metadata).value_or(
          ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW)};
}

}  // namespace
Loading