ResizeDecision calculateResizeDecisionWithSampling()

in cpp/spectrum/core/ResizeUtil.cpp [217:253]


ResizeDecision calculateResizeDecisionWithSampling(
    const image::Size& inputSize,
    const folly::Optional<image::Ratio>& samplingRatio,
    const folly::Optional<requirements::Crop>& cropRequirement,
    const folly::Optional<requirements::Resize>& resizeRequirement,
    const float thresholdForSkippingScaling) {
  if (!samplingRatio.has_value()) {
    // if we don't sample, go ahead for cropping
    auto result = calculateResizeDecisionWithCropping(
        inputSize,
        inputSize,
        resizeRequirement,
        cropRequirement,
        thresholdForSkippingScaling);
    return result.noSampling();
  }

  // otherwise we'll have to update the input size and the cropping
  // values
  auto sizeAfterSampling = image::sizeZero;
  try {
    sizeAfterSampling =
        inputSize.scaled(*samplingRatio, numeric::RoundingMode::Up);
  } catch (const SpectrumException&) {
    return ResizeDecision(inputSize).rate(RESIZE_RATING::INVALID);
  }
  const auto cropRequirementAfterSampling =
      maybeSampleCropRequirement(*samplingRatio, cropRequirement);

  auto result = calculateResizeDecisionWithCropping(
      inputSize,
      sizeAfterSampling,
      resizeRequirement,
      cropRequirementAfterSampling,
      thresholdForSkippingScaling);
  return result.sampling(samplingRatio.value(), sizeAfterSampling);
}