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

Commit 363e1113 authored by Fiona Campbell's avatar Fiona Campbell Committed by Automerger Merge Worker
Browse files

Merge "Convert BrightnessUtils to use brightness as float" into rvc-dev am:...

Merge "Convert BrightnessUtils to use brightness as float" into rvc-dev am: 6fd144dd am: 91890f01

Change-Id: I21b0be96153227c31c7615d855e1a2e6412c5679
parents 58a11363 91890f01
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ public class BrightnessUtils {

    /**
     * Version of {@link #convertGammaToLinear} that takes and returns float values.
     * TODO: brightnessfloat Merge with above method later.
     * TODO(flc): refactor Android Auto to use float version
     *
     * @param val The slider value.
     * @param min The minimum acceptable value for the setting.
@@ -83,9 +83,13 @@ public class BrightnessUtils {
            ret = MathUtils.exp((normalizedVal - C) / A) + B;
        }

        // HLG is normalized to the range [0, 12], so we need to re-normalize to the range [0, 1]
        // HLG is normalized to the range [0, 12], ensure that value is within that range,
        // it shouldn't be out of bounds.
        final float normalizedRet = MathUtils.constrain(ret, 0, 12);

        // Re-normalize to the range [0, 1]
        // in order to derive the correct setting value.
        return MathUtils.lerp(min, max, ret / 12);
        return MathUtils.lerp(min, max, normalizedRet / 12);
    }

    /**
@@ -111,16 +115,7 @@ public class BrightnessUtils {
     * @return The corresponding slider value
     */
    public static final int convertLinearToGamma(int val, int min, int max) {
        // For some reason, HLG normalizes to the range [0, 12] rather than [0, 1]
        final float normalizedVal = MathUtils.norm(min, max, val) * 12;
        final float ret;
        if (normalizedVal <= 1f) {
            ret = MathUtils.sqrt(normalizedVal) * R;
        } else {
            ret = A * MathUtils.log(normalizedVal - B) + C;
        }

        return Math.round(MathUtils.lerp(GAMMA_SPACE_MIN, GAMMA_SPACE_MAX, ret));
        return convertLinearToGammaFloat((float) val, (float) min, (float) max);
    }

    /**
+22 −7
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settingslib.display;

import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX;
import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MIN;

import static com.google.common.truth.Truth.assertThat;

@@ -27,26 +28,40 @@ import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class BrightnessUtilsTest {

    private static final int MIN = 1;
    private static final int MAX = 255;
    private static final int MIN_INT = 1;
    private static final int MAX_INT = 255;
    private static final float MIN_FLOAT = 0.0f;
    private static final float MAX_FLOAT = 1.0f;

    @Test
    public void linearToGamma_minValue_shouldReturn0() {
        assertThat(BrightnessUtils.convertLinearToGamma(MIN, MIN, MAX)).isEqualTo(0);
    public void linearToGamma_minValue_shouldReturnMin() {
        assertThat(BrightnessUtils.convertLinearToGamma(MIN_INT, MIN_INT, MAX_INT))
                .isEqualTo(GAMMA_SPACE_MIN);
        assertThat(BrightnessUtils.convertLinearToGammaFloat(MIN_FLOAT, MIN_FLOAT, MAX_FLOAT))
                .isEqualTo(GAMMA_SPACE_MIN);
    }

    @Test
    public void linearToGamma_maxValue_shouldReturnGammaSpaceMax() {
        assertThat(BrightnessUtils.convertLinearToGamma(MAX, MIN, MAX)).isEqualTo(GAMMA_SPACE_MAX);
        assertThat(BrightnessUtils.convertLinearToGamma(MAX_INT, MIN_INT, MAX_INT))
                .isEqualTo(GAMMA_SPACE_MAX);
        assertThat(BrightnessUtils.convertLinearToGammaFloat(MAX_FLOAT, MIN_FLOAT, MAX_FLOAT))
                .isEqualTo(GAMMA_SPACE_MAX);
    }

    @Test
    public void gammaToLinear_minValue_shouldReturnMin() {
        assertThat(BrightnessUtils.convertGammaToLinear(MIN, MIN, MAX)).isEqualTo(MIN);
        assertThat(BrightnessUtils.convertGammaToLinear(GAMMA_SPACE_MIN, MIN_INT, MAX_INT))
                .isEqualTo(MIN_INT);
        assertThat(BrightnessUtils.convertGammaToLinearFloat(GAMMA_SPACE_MIN, MIN_FLOAT, MAX_FLOAT))
                .isEqualTo(MIN_FLOAT);
    }

    @Test
    public void gammaToLinear_gammaSpaceValue_shouldReturnMax() {
        assertThat(BrightnessUtils.convertGammaToLinear(GAMMA_SPACE_MAX, MIN, MAX)).isEqualTo(MAX);
        assertThat(BrightnessUtils.convertGammaToLinear(GAMMA_SPACE_MAX, MIN_INT, MAX_INT))
                .isEqualTo(MAX_INT);
        assertThat(BrightnessUtils.convertGammaToLinearFloat(GAMMA_SPACE_MAX, MIN_FLOAT, MAX_FLOAT))
                .isEqualTo(MAX_FLOAT);
    }
}