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

Commit ab329bfc authored by Hendrik Wagenaar's avatar Hendrik Wagenaar Committed by android-build-merger
Browse files

Merge "Fix default optics" into oc-dev

am: 87c83b1d

Change-Id: I313cd0190cf3c38bfce6b94f3ee86824220f6770
parents d32c27c2 87c83b1d
Loading
Loading
Loading
Loading
+10 −19
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@

namespace {

static constexpr char kRGBPolynomialOffset[] = "persist.dvr.rgb_poly_offset";
static constexpr char kRPolynomial[] = "persist.dvr.r_poly";
static constexpr char kGPolynomial[] = "persist.dvr.g_poly";
static constexpr char kBPolynomial[] = "persist.dvr.b_poly";
@@ -67,7 +66,9 @@ float GetInterLensDistance() { return GetProperty(kLensDistance, 0.064f); }

float GetDisplayGap() { return GetProperty(kDisplayGap, 0.0f); }

float GetVEyeToDisplay() { return GetProperty(kVEyeToDisplay, 0.035f); }
float GetTrayToLensDistance() { return 0.035f; }

float GetVEyeToDisplay() { return GetProperty(kVEyeToDisplay, 0.042f); }

android::dvr::vec2 GetDisplaySize() {
  static const std::vector<float> default_size = {0.0742177f, 0.131943f};
@@ -109,33 +110,23 @@ namespace dvr {
HeadMountMetrics CreateHeadMountMetrics(const FieldOfView& l_fov,
                                        const FieldOfView& r_fov) {
  static const std::vector<float> default_r = {
      -4.08519004f,  34.70282075f, -67.37781249f, 56.97304235f,
      -23.35768685f, 4.7199597f,   0.63198082f};
      0.00103f, 2.63917f, -7.14427f, 8.98036f, -4.10586f, 0.83705f, 0.00130f};
  static const std::vector<float> default_g = {
      4.43078318f, 3.47806617f, -20.58017398f, 20.85880414f,
      -8.4046504f, 1.61284685f, 0.8881761f};
      0.08944f, 2.26005f, -6.30924f, 7.94561f, -3.22788f, 0.45577f, 0.07300f};
  static const std::vector<float> default_b = {
      12.04141265f, -21.98112491f, 14.06758389f, -3.15245629f,
      0.36549102f,  0.05252705f,   0.99844279f};
  static const std::vector<float> default_offsets = {
      0.20971645238f, 0.15189450000f, 1.00096958278f};

  std::vector<float> poly_offsets =
      GetProperty(kRGBPolynomialOffset, default_offsets);
      0.16364f, 1.94083f, -5.55033f, 6.89578f, -2.19053f, -0.04050f, 0.17380f};
  std::vector<float> poly_r = GetProperty(kRPolynomial, default_r);
  std::vector<float> poly_g = GetProperty(kGPolynomial, default_g);
  std::vector<float> poly_b = GetProperty(kBPolynomial, default_b);
  if (poly_offsets.size() != 3)
    poly_offsets = default_offsets;

  std::shared_ptr<ColorChannelDistortion> distortion_r(
      new PolynomialRadialDistortion(poly_offsets[0], poly_r));
      new PolynomialRadialDistortion(poly_r));
  std::shared_ptr<ColorChannelDistortion> distortion_g(
      new PolynomialRadialDistortion(poly_offsets[1], poly_g));
      new PolynomialRadialDistortion(poly_g));
  std::shared_ptr<ColorChannelDistortion> distortion_b(
      new PolynomialRadialDistortion(poly_offsets[2], poly_b));
      new PolynomialRadialDistortion(poly_b));

  return HeadMountMetrics(GetInterLensDistance(), GetVEyeToDisplay(),
  return HeadMountMetrics(GetInterLensDistance(), GetTrayToLensDistance(),
                          GetVEyeToDisplay(), kDefaultVerticalAlignment, l_fov,
                          r_fov, distortion_r, distortion_g, distortion_b,
                          HeadMountMetrics::EyeOrientation::kCCW0Degrees,
+1 −6
Original line number Diff line number Diff line
@@ -28,8 +28,7 @@ class PolynomialRadialDistortion : public ColorChannelDistortion {
  // in the distortion equation: coefficients[0] is K1, coefficients[1] is K2,
  // etc.  Thus the polynomial used for distortion has degree
  // (2 * coefficients.size()).
  explicit PolynomialRadialDistortion(float polynomial_offset,
                                      const std::vector<float>& coefficients);
  explicit PolynomialRadialDistortion(const std::vector<float>& coefficients);

  // Given a radius (measuring distance from the optical axis of the lens),
  // returns the distortion factor for that radius.
@@ -52,10 +51,6 @@ class PolynomialRadialDistortion : public ColorChannelDistortion {
  const std::vector<float>& GetCoefficients() const;

 private:
  // This is makes the polynomial work nicer with a specific lens that doesn't
  // fit nicely to a lower order polynomial.  It's basically piecewise
  // line->poly.
  float polynomial_offset_;
  std::vector<float> coefficients_;
};

+2 −5
Original line number Diff line number Diff line
@@ -4,13 +4,10 @@ namespace android {
namespace dvr {

PolynomialRadialDistortion::PolynomialRadialDistortion(
    float polynomial_offset, const std::vector<float>& coefficients)
    : polynomial_offset_(polynomial_offset), coefficients_(coefficients) {}
    const std::vector<float>& coefficients)
    : coefficients_(coefficients) {}

float PolynomialRadialDistortion::DistortionFactor(float r_squared) const {
  if (r_squared < polynomial_offset_)
    return 1.0f;

  float r_factor = 1.0f;
  float distortion_factor = 1.0f;

+3 −3
Original line number Diff line number Diff line
@@ -209,16 +209,16 @@ void DisplayService::OnSetViewerParams(pdx::Message& message,
  // We should always have a red distortion.
  LOG_FATAL_IF(view_params.distortion_coefficients_r.empty());
  red_distortion = std::make_shared<PolynomialRadialDistortion>(
      0.0f, view_params.distortion_coefficients_r);
      view_params.distortion_coefficients_r);

  if (!view_params.distortion_coefficients_g.empty()) {
    green_distortion = std::make_shared<PolynomialRadialDistortion>(
        0.0f, view_params.distortion_coefficients_g);
        view_params.distortion_coefficients_g);
  }

  if (!view_params.distortion_coefficients_b.empty()) {
    blue_distortion = std::make_shared<PolynomialRadialDistortion>(
        0.0f, view_params.distortion_coefficients_b);
        view_params.distortion_coefficients_b);
  }

  HeadMountMetrics::EyeOrientation left_orientation =