Loading core/res/res/values/config.xml +58 −0 Original line number Diff line number Diff line Loading @@ -5040,6 +5040,21 @@ <item>10.0</item> </array> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient brightnesses, in Lux. This array, together with config_displayWhiteBalanceLowLightAmbientBiasesStrong, is used to generate a lookup table used in DisplayWhiteBalanceController. This lookup table is used to map ambient brightness readings to a bias, where the bias is used to linearly interpolate between ambient color temperature and config_displayWhiteBalanceLowLightAmbientColorTemperatureIdle. This table is optional. If used, this array must, 1) Contain at least two entries 2) Be the same length as config_displayWhiteBalanceLowLightAmbientBiasesStrong. --> <array name ="config_displayWhiteBalanceLowLightAmbientBrightnessesStrong"> <item>10.0</item> <item>10.0</item> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceLowLightAmbientBrightnesses for additional details. Loading @@ -5049,12 +5064,28 @@ <item>1.0</item> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceLowLightAmbientBrightnessesStrong for additional details. This array must be in the range of [0.0, 1.0]. --> <array name ="config_displayWhiteBalanceLowLightAmbientBiasesStrong"> <item>0.0</item> <item>1.0</item> </array> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceLowLightAmbientBrightnesses and config_displayWhiteBalanceLowLightAmbientBiases. --> <item name="config_displayWhiteBalanceLowLightAmbientColorTemperature" format="float" type="dimen">6500.0</item> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceLowLightAmbientBrightnessesStrong and config_displayWhiteBalanceLowLightAmbientBiasesStrong. Used when device is in Idle Screen Brightness mode. --> <item name="config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong" format="float" type="dimen">6500.0</item> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient brightnesses, in Lux. This array, together with config_displayWhiteBalanceHighLightAmbientBiases, is used to generate a Loading @@ -5068,6 +5099,19 @@ <array name ="config_displayWhiteBalanceHighLightAmbientBrightnesses"> </array> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient brightnesses, in Lux. This array, together with config_displayWhiteBalanceHighLightAmbientBiasesStrong, is used to generate a lookup table used in DisplayWhiteBalanceController. This lookup table is used to map ambient brightness readings to a bias, where the bias is used to linearly interpolate between ambient color temperature and config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong. This table is optional. If used, this array must, 1) Contain at least two entries 2) Be the same length as config_displayWhiteBalanceHighLightAmbientBiasesStrong. --> <array name ="config_displayWhiteBalanceHighLightAmbientBrightnessesStrong"> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceHighLightAmbientBrightnesses for additional details. Loading @@ -5075,12 +5119,26 @@ <array name ="config_displayWhiteBalanceHighLightAmbientBiases"> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceHighLightAmbientBrightnessesStrong for additional details. This array must be in the range of [0.0, 1.0]. --> <array name ="config_displayWhiteBalanceHighLightAmbientBiasesStrong"> </array> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceHighLightAmbientBrightnesses and config_displayWhiteBalanceHighLightAmbientBiases. --> <item name="config_displayWhiteBalanceHighLightAmbientColorTemperature" format="float" type="dimen">8000.0</item> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceHighLightAmbientBrightnessesStrong and config_displayWhiteBalanceHighLightAmbientBiasesStrong. Used when device is in Idle Screen Brightness mode. --> <item name="config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong" format="float" type="dimen">8000.0</item> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient color temperatures, in Kelvin. This array, together with config_displayWhiteBalanceDisplayColorTemperatures, is used to generate a Loading core/res/res/values/symbols.xml +6 −0 Original line number Diff line number Diff line Loading @@ -4173,11 +4173,17 @@ <java-symbol type="array" name="config_displayWhiteBalanceIncreaseThresholds" /> <java-symbol type="array" name="config_displayWhiteBalanceDecreaseThresholds" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBrightnesses" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBrightnessesStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBiases" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBiasesStrong" /> <java-symbol type="dimen" name="config_displayWhiteBalanceLowLightAmbientColorTemperature" /> <java-symbol type="dimen" name="config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBrightnesses" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBrightnessesStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBiases" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBiasesStrong" /> <java-symbol type="dimen" name="config_displayWhiteBalanceHighLightAmbientColorTemperature" /> <java-symbol type="dimen" name="config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceAmbientColorTemperatures" /> <java-symbol type="array" name="config_displayWhiteBalanceDisplayColorTemperatures" /> <java-symbol type="array" name="config_displayWhiteBalanceStrongAmbientColorTemperatures" /> Loading services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java +98 −6 Original line number Diff line number Diff line Loading @@ -63,10 +63,15 @@ public class DisplayWhiteBalanceController implements // high errors. This default is introduced to provide a fixed display color // temperature when sensor readings become unreliable. private final float mLowLightAmbientColorTemperature; // As above, but used when in strong mode (idle screen brightness mode). private final float mLowLightAmbientColorTemperatureStrong; // In high brightness conditions certain color temperatures can cause peak display // brightness to drop. This fixed color temperature can be used to compensate for // this effect. private final float mHighLightAmbientColorTemperature; // As above, but used when in strong mode (idle screen brightness mode). private final float mHighLightAmbientColorTemperatureStrong; private final boolean mLightModeAllowed; Loading Loading @@ -97,9 +102,11 @@ public class DisplayWhiteBalanceController implements // ambient color temperature to the defaults. A piecewise linear relationship // between low light brightness and low light bias. private Spline.LinearSpline mLowLightAmbientBrightnessToBiasSpline; private Spline.LinearSpline mLowLightAmbientBrightnessToBiasSplineStrong; // A piecewise linear relationship between high light brightness and high light bias. private Spline.LinearSpline mHighLightAmbientBrightnessToBiasSpline; private Spline.LinearSpline mHighLightAmbientBrightnessToBiasSplineStrong; private float mLatestAmbientColorTemperature; private float mLatestAmbientBrightness; Loading Loading @@ -134,17 +141,29 @@ public class DisplayWhiteBalanceController implements * @param lowLightAmbientBrightnesses * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to lowLightAmbientColorTemperature. * @param lowLightAmbientBrightnessesStrong * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to lowLightAmbientColorTemperature. * @param lowLightAmbientBiases * The biases used to map the ambient brightnesses to the biases used to interpolate to * lowLightAmbientColorTemperature. * @param lowLightAmbientBiasesStrong * The biases used to map the ambient brightnesses to the biases used to interpolate to * lowLightAmbientColorTemperature. * @param lowLightAmbientColorTemperature * The ambient color temperature to which we interpolate to based on the low light curve. * @param highLightAmbientBrightnesses * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to highLightAmbientColorTemperature. * @param highLightAmbientBrightnessesStrong * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to highLightAmbientColorTemperature. * @param highLightAmbientBiases * The biases used to map the ambient brightnesses to the biases used to interpolate to * highLightAmbientColorTemperature. * @param highLightAmbientBiasesStrong * The biases used to map the ambient brightnesses to the biases used to interpolate to * highLightAmbientColorTemperature. * @param highLightAmbientColorTemperature * The ambient color temperature to which we interpolate to based on the high light curve. * @param ambientColorTemperatures Loading @@ -170,11 +189,17 @@ public class DisplayWhiteBalanceController implements @NonNull AmbientFilter colorTemperatureFilter, @NonNull DisplayWhiteBalanceThrottler throttler, float[] lowLightAmbientBrightnesses, float[] lowLightAmbientBrightnessesStrong, float[] lowLightAmbientBiases, float[] lowLightAmbientBiasesStrong, float lowLightAmbientColorTemperature, float lowLightAmbientColorTemperatureStrong, float[] highLightAmbientBrightnesses, float[] highLightAmbientBrightnessesStrong, float[] highLightAmbientBiases, float[] highLightAmbientBiasesStrong, float highLightAmbientColorTemperature, float highLightAmbientColorTemperatureStrong, float[] ambientColorTemperatures, float[] displayColorTemperatures, float[] strongAmbientColorTemperatures, Loading @@ -188,7 +213,9 @@ public class DisplayWhiteBalanceController implements mColorTemperatureFilter = colorTemperatureFilter; mThrottler = throttler; mLowLightAmbientColorTemperature = lowLightAmbientColorTemperature; mLowLightAmbientColorTemperatureStrong = lowLightAmbientColorTemperatureStrong; mHighLightAmbientColorTemperature = highLightAmbientColorTemperature; mHighLightAmbientColorTemperatureStrong = highLightAmbientColorTemperatureStrong; mAmbientColorTemperature = -1.0f; mPendingAmbientColorTemperature = -1.0f; mLastAmbientColorTemperature = -1.0f; Loading @@ -213,6 +240,23 @@ public class DisplayWhiteBalanceController implements } } try { mLowLightAmbientBrightnessToBiasSplineStrong = new Spline.LinearSpline( lowLightAmbientBrightnessesStrong, lowLightAmbientBiasesStrong); } catch (Exception e) { Slog.e(TAG, "failed to create strong low light ambient brightness to bias spline.", e); mLowLightAmbientBrightnessToBiasSplineStrong = null; } if (mLowLightAmbientBrightnessToBiasSplineStrong != null) { if (mLowLightAmbientBrightnessToBiasSplineStrong.interpolate(0.0f) != 0.0f || mLowLightAmbientBrightnessToBiasSplineStrong.interpolate( Float.POSITIVE_INFINITY) != 1.0f) { Slog.d(TAG, "invalid strong low light ambient brightness to bias spline, " + "bias must begin at 0.0 and end at 1.0."); mLowLightAmbientBrightnessToBiasSplineStrong = null; } } try { mHighLightAmbientBrightnessToBiasSpline = new Spline.LinearSpline( highLightAmbientBrightnesses, highLightAmbientBiases); Loading @@ -230,6 +274,23 @@ public class DisplayWhiteBalanceController implements } } try { mHighLightAmbientBrightnessToBiasSplineStrong = new Spline.LinearSpline( highLightAmbientBrightnessesStrong, highLightAmbientBiasesStrong); } catch (Exception e) { Slog.e(TAG, "failed to create strong high light ambient brightness to bias spline.", e); mHighLightAmbientBrightnessToBiasSplineStrong = null; } if (mHighLightAmbientBrightnessToBiasSplineStrong != null) { if (mHighLightAmbientBrightnessToBiasSplineStrong.interpolate(0.0f) != 0.0f || mHighLightAmbientBrightnessToBiasSplineStrong.interpolate( Float.POSITIVE_INFINITY) != 1.0f) { Slog.d(TAG, "invalid strong high light ambient brightness to bias spline, " + "bias must begin at 0.0 and end at 1.0."); mHighLightAmbientBrightnessToBiasSplineStrong = null; } } if (mLowLightAmbientBrightnessToBiasSpline != null && mHighLightAmbientBrightnessToBiasSpline != null) { if (lowLightAmbientBrightnesses[lowLightAmbientBrightnesses.length - 1] > Loading @@ -241,6 +302,18 @@ public class DisplayWhiteBalanceController implements } } if (mLowLightAmbientBrightnessToBiasSplineStrong != null && mHighLightAmbientBrightnessToBiasSplineStrong != null) { if (lowLightAmbientBrightnessesStrong[lowLightAmbientBrightnessesStrong.length - 1] > highLightAmbientBrightnessesStrong[0]) { Slog.d(TAG, "invalid strong low light and high light ambient brightness to bias " + "spline combination, defined domains must not intersect."); mLowLightAmbientBrightnessToBiasSplineStrong = null; mHighLightAmbientBrightnessToBiasSplineStrong = null; } } try { mAmbientToDisplayColorTemperatureSpline = new Spline.LinearSpline( ambientColorTemperatures, displayColorTemperatures); Loading Loading @@ -365,7 +438,11 @@ public class DisplayWhiteBalanceController implements mColorTemperatureFilter.dump(writer); mThrottler.dump(writer); writer.println(" mLowLightAmbientColorTemperature=" + mLowLightAmbientColorTemperature); writer.println(" mLowLightAmbientColorTemperatureStrong=" + mLowLightAmbientColorTemperatureStrong); writer.println(" mHighLightAmbientColorTemperature=" + mHighLightAmbientColorTemperature); writer.println(" mHighLightAmbientColorTemperatureStrong=" + mHighLightAmbientColorTemperatureStrong); writer.println(" mAmbientColorTemperature=" + mAmbientColorTemperature); writer.println(" mPendingAmbientColorTemperature=" + mPendingAmbientColorTemperature); writer.println(" mLastAmbientColorTemperature=" + mLastAmbientColorTemperature); Loading @@ -377,8 +454,12 @@ public class DisplayWhiteBalanceController implements + mStrongAmbientToDisplayColorTemperatureSpline); writer.println(" mLowLightAmbientBrightnessToBiasSpline=" + mLowLightAmbientBrightnessToBiasSpline); writer.println(" mLowLightAmbientBrightnessToBiasSplineStrong=" + mLowLightAmbientBrightnessToBiasSplineStrong); writer.println(" mHighLightAmbientBrightnessToBiasSpline=" + mHighLightAmbientBrightnessToBiasSpline); writer.println(" mHighLightAmbientBrightnessToBiasSplineStrong=" + mHighLightAmbientBrightnessToBiasSplineStrong); } @Override // AmbientSensor.AmbientBrightnessSensor.Callbacks Loading @@ -400,6 +481,17 @@ public class DisplayWhiteBalanceController implements */ public void updateAmbientColorTemperature() { final long time = System.currentTimeMillis(); final float lowLightAmbientColorTemperature = mStrongModeEnabled ? mLowLightAmbientColorTemperatureStrong : mLowLightAmbientColorTemperature; final float highLightAmbientColorTemperature = mStrongModeEnabled ? mHighLightAmbientColorTemperatureStrong : mHighLightAmbientColorTemperature; final Spline.LinearSpline lowLightAmbientBrightnessToBiasSpline = mStrongModeEnabled ? mLowLightAmbientBrightnessToBiasSplineStrong : mLowLightAmbientBrightnessToBiasSpline; final Spline.LinearSpline highLightAmbientBrightnessToBiasSpline = mStrongModeEnabled ? mHighLightAmbientBrightnessToBiasSplineStrong : mHighLightAmbientBrightnessToBiasSpline; float ambientColorTemperature = mColorTemperatureFilter.getEstimate(time); mLatestAmbientColorTemperature = ambientColorTemperature; Loading @@ -423,19 +515,19 @@ public class DisplayWhiteBalanceController implements mLatestAmbientBrightness = ambientBrightness; if (ambientColorTemperature != -1.0f && ambientBrightness != -1.0f && mLowLightAmbientBrightnessToBiasSpline != null) { float bias = mLowLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); && lowLightAmbientBrightnessToBiasSpline != null) { float bias = lowLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); ambientColorTemperature = bias * ambientColorTemperature + (1.0f - bias) * mLowLightAmbientColorTemperature; * lowLightAmbientColorTemperature; mLatestLowLightBias = bias; } if (ambientColorTemperature != -1.0f && ambientBrightness != -1.0f && mHighLightAmbientBrightnessToBiasSpline != null) { float bias = mHighLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); && highLightAmbientBrightnessToBiasSpline != null) { float bias = highLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); ambientColorTemperature = (1.0f - bias) * ambientColorTemperature + bias * mHighLightAmbientColorTemperature; * highLightAmbientColorTemperature; mLatestHighLightBias = bias; } Loading services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java +26 −2 Original line number Diff line number Diff line Loading @@ -70,21 +70,39 @@ public class DisplayWhiteBalanceFactory { final float[] displayWhiteBalanceLowLightAmbientBrightnesses = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBrightnesses); final float[] displayWhiteBalanceLowLightAmbientBrightnessesStrong = getFloatArray( resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBrightnessesStrong); final float[] displayWhiteBalanceLowLightAmbientBiases = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBiases); final float[] displayWhiteBalanceLowLightAmbientBiasesStrong = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBiasesStrong); final float lowLightAmbientColorTemperature = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceLowLightAmbientColorTemperature); final float lowLightAmbientColorTemperatureStrong = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong); final float[] displayWhiteBalanceHighLightAmbientBrightnesses = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBrightnesses); final float[] displayWhiteBalanceHighLightAmbientBrightnessesStrong = getFloatArray( resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBrightnessesStrong); final float[] displayWhiteBalanceHighLightAmbientBiases = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBiases); final float[] displayWhiteBalanceHighLightAmbientBiasesStrong = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBiasesStrong); final float highLightAmbientColorTemperature = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceHighLightAmbientColorTemperature); final float highLightAmbientColorTemperatureStrong = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong); final float[] ambientColorTemperatures = getFloatArray(resources, com.android.internal.R.array.config_displayWhiteBalanceAmbientColorTemperatures); final float[] displayColorTemperatures = getFloatArray(resources, Loading @@ -100,9 +118,15 @@ public class DisplayWhiteBalanceFactory { final DisplayWhiteBalanceController controller = new DisplayWhiteBalanceController( brightnessSensor, brightnessFilter, colorTemperatureSensor, colorTemperatureFilter, throttler, displayWhiteBalanceLowLightAmbientBrightnesses, displayWhiteBalanceLowLightAmbientBiases, lowLightAmbientColorTemperature, displayWhiteBalanceLowLightAmbientBrightnessesStrong, displayWhiteBalanceLowLightAmbientBiases, displayWhiteBalanceLowLightAmbientBiasesStrong, lowLightAmbientColorTemperature, lowLightAmbientColorTemperatureStrong, displayWhiteBalanceHighLightAmbientBrightnesses, displayWhiteBalanceHighLightAmbientBiases, highLightAmbientColorTemperature, displayWhiteBalanceHighLightAmbientBrightnessesStrong, displayWhiteBalanceHighLightAmbientBiases, displayWhiteBalanceHighLightAmbientBiasesStrong, highLightAmbientColorTemperature, highLightAmbientColorTemperatureStrong, ambientColorTemperatures, displayColorTemperatures, strongAmbientColorTemperatures, strongDisplayColorTemperatures, lightModeAllowed); brightnessSensor.setCallbacks(controller); Loading services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java +34 −4 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/res/res/values/config.xml +58 −0 Original line number Diff line number Diff line Loading @@ -5040,6 +5040,21 @@ <item>10.0</item> </array> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient brightnesses, in Lux. This array, together with config_displayWhiteBalanceLowLightAmbientBiasesStrong, is used to generate a lookup table used in DisplayWhiteBalanceController. This lookup table is used to map ambient brightness readings to a bias, where the bias is used to linearly interpolate between ambient color temperature and config_displayWhiteBalanceLowLightAmbientColorTemperatureIdle. This table is optional. If used, this array must, 1) Contain at least two entries 2) Be the same length as config_displayWhiteBalanceLowLightAmbientBiasesStrong. --> <array name ="config_displayWhiteBalanceLowLightAmbientBrightnessesStrong"> <item>10.0</item> <item>10.0</item> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceLowLightAmbientBrightnesses for additional details. Loading @@ -5049,12 +5064,28 @@ <item>1.0</item> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceLowLightAmbientBrightnessesStrong for additional details. This array must be in the range of [0.0, 1.0]. --> <array name ="config_displayWhiteBalanceLowLightAmbientBiasesStrong"> <item>0.0</item> <item>1.0</item> </array> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceLowLightAmbientBrightnesses and config_displayWhiteBalanceLowLightAmbientBiases. --> <item name="config_displayWhiteBalanceLowLightAmbientColorTemperature" format="float" type="dimen">6500.0</item> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceLowLightAmbientBrightnessesStrong and config_displayWhiteBalanceLowLightAmbientBiasesStrong. Used when device is in Idle Screen Brightness mode. --> <item name="config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong" format="float" type="dimen">6500.0</item> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient brightnesses, in Lux. This array, together with config_displayWhiteBalanceHighLightAmbientBiases, is used to generate a Loading @@ -5068,6 +5099,19 @@ <array name ="config_displayWhiteBalanceHighLightAmbientBrightnesses"> </array> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient brightnesses, in Lux. This array, together with config_displayWhiteBalanceHighLightAmbientBiasesStrong, is used to generate a lookup table used in DisplayWhiteBalanceController. This lookup table is used to map ambient brightness readings to a bias, where the bias is used to linearly interpolate between ambient color temperature and config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong. This table is optional. If used, this array must, 1) Contain at least two entries 2) Be the same length as config_displayWhiteBalanceHighLightAmbientBiasesStrong. --> <array name ="config_displayWhiteBalanceHighLightAmbientBrightnessesStrong"> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceHighLightAmbientBrightnesses for additional details. Loading @@ -5075,12 +5119,26 @@ <array name ="config_displayWhiteBalanceHighLightAmbientBiases"> </array> <!-- See DisplayWhiteBalanceController. An array containing a list of biases. See config_displayWhiteBalanceHighLightAmbientBrightnessesStrong for additional details. This array must be in the range of [0.0, 1.0]. --> <array name ="config_displayWhiteBalanceHighLightAmbientBiasesStrong"> </array> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceHighLightAmbientBrightnesses and config_displayWhiteBalanceHighLightAmbientBiases. --> <item name="config_displayWhiteBalanceHighLightAmbientColorTemperature" format="float" type="dimen">8000.0</item> <!-- See DisplayWhiteBalanceController. The ambient color temperature (in cct) to which we interpolate towards using the the look up table generated by config_displayWhiteBalanceHighLightAmbientBrightnessesStrong and config_displayWhiteBalanceHighLightAmbientBiasesStrong. Used when device is in Idle Screen Brightness mode. --> <item name="config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong" format="float" type="dimen">8000.0</item> <!-- See DisplayWhiteBalanceController. A float array containing a list of ambient color temperatures, in Kelvin. This array, together with config_displayWhiteBalanceDisplayColorTemperatures, is used to generate a Loading
core/res/res/values/symbols.xml +6 −0 Original line number Diff line number Diff line Loading @@ -4173,11 +4173,17 @@ <java-symbol type="array" name="config_displayWhiteBalanceIncreaseThresholds" /> <java-symbol type="array" name="config_displayWhiteBalanceDecreaseThresholds" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBrightnesses" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBrightnessesStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBiases" /> <java-symbol type="array" name="config_displayWhiteBalanceLowLightAmbientBiasesStrong" /> <java-symbol type="dimen" name="config_displayWhiteBalanceLowLightAmbientColorTemperature" /> <java-symbol type="dimen" name="config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBrightnesses" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBrightnessesStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBiases" /> <java-symbol type="array" name="config_displayWhiteBalanceHighLightAmbientBiasesStrong" /> <java-symbol type="dimen" name="config_displayWhiteBalanceHighLightAmbientColorTemperature" /> <java-symbol type="dimen" name="config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong" /> <java-symbol type="array" name="config_displayWhiteBalanceAmbientColorTemperatures" /> <java-symbol type="array" name="config_displayWhiteBalanceDisplayColorTemperatures" /> <java-symbol type="array" name="config_displayWhiteBalanceStrongAmbientColorTemperatures" /> Loading
services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java +98 −6 Original line number Diff line number Diff line Loading @@ -63,10 +63,15 @@ public class DisplayWhiteBalanceController implements // high errors. This default is introduced to provide a fixed display color // temperature when sensor readings become unreliable. private final float mLowLightAmbientColorTemperature; // As above, but used when in strong mode (idle screen brightness mode). private final float mLowLightAmbientColorTemperatureStrong; // In high brightness conditions certain color temperatures can cause peak display // brightness to drop. This fixed color temperature can be used to compensate for // this effect. private final float mHighLightAmbientColorTemperature; // As above, but used when in strong mode (idle screen brightness mode). private final float mHighLightAmbientColorTemperatureStrong; private final boolean mLightModeAllowed; Loading Loading @@ -97,9 +102,11 @@ public class DisplayWhiteBalanceController implements // ambient color temperature to the defaults. A piecewise linear relationship // between low light brightness and low light bias. private Spline.LinearSpline mLowLightAmbientBrightnessToBiasSpline; private Spline.LinearSpline mLowLightAmbientBrightnessToBiasSplineStrong; // A piecewise linear relationship between high light brightness and high light bias. private Spline.LinearSpline mHighLightAmbientBrightnessToBiasSpline; private Spline.LinearSpline mHighLightAmbientBrightnessToBiasSplineStrong; private float mLatestAmbientColorTemperature; private float mLatestAmbientBrightness; Loading Loading @@ -134,17 +141,29 @@ public class DisplayWhiteBalanceController implements * @param lowLightAmbientBrightnesses * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to lowLightAmbientColorTemperature. * @param lowLightAmbientBrightnessesStrong * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to lowLightAmbientColorTemperature. * @param lowLightAmbientBiases * The biases used to map the ambient brightnesses to the biases used to interpolate to * lowLightAmbientColorTemperature. * @param lowLightAmbientBiasesStrong * The biases used to map the ambient brightnesses to the biases used to interpolate to * lowLightAmbientColorTemperature. * @param lowLightAmbientColorTemperature * The ambient color temperature to which we interpolate to based on the low light curve. * @param highLightAmbientBrightnesses * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to highLightAmbientColorTemperature. * @param highLightAmbientBrightnessesStrong * The ambient brightness used to map the ambient brightnesses to the biases used to * interpolate to highLightAmbientColorTemperature. * @param highLightAmbientBiases * The biases used to map the ambient brightnesses to the biases used to interpolate to * highLightAmbientColorTemperature. * @param highLightAmbientBiasesStrong * The biases used to map the ambient brightnesses to the biases used to interpolate to * highLightAmbientColorTemperature. * @param highLightAmbientColorTemperature * The ambient color temperature to which we interpolate to based on the high light curve. * @param ambientColorTemperatures Loading @@ -170,11 +189,17 @@ public class DisplayWhiteBalanceController implements @NonNull AmbientFilter colorTemperatureFilter, @NonNull DisplayWhiteBalanceThrottler throttler, float[] lowLightAmbientBrightnesses, float[] lowLightAmbientBrightnessesStrong, float[] lowLightAmbientBiases, float[] lowLightAmbientBiasesStrong, float lowLightAmbientColorTemperature, float lowLightAmbientColorTemperatureStrong, float[] highLightAmbientBrightnesses, float[] highLightAmbientBrightnessesStrong, float[] highLightAmbientBiases, float[] highLightAmbientBiasesStrong, float highLightAmbientColorTemperature, float highLightAmbientColorTemperatureStrong, float[] ambientColorTemperatures, float[] displayColorTemperatures, float[] strongAmbientColorTemperatures, Loading @@ -188,7 +213,9 @@ public class DisplayWhiteBalanceController implements mColorTemperatureFilter = colorTemperatureFilter; mThrottler = throttler; mLowLightAmbientColorTemperature = lowLightAmbientColorTemperature; mLowLightAmbientColorTemperatureStrong = lowLightAmbientColorTemperatureStrong; mHighLightAmbientColorTemperature = highLightAmbientColorTemperature; mHighLightAmbientColorTemperatureStrong = highLightAmbientColorTemperatureStrong; mAmbientColorTemperature = -1.0f; mPendingAmbientColorTemperature = -1.0f; mLastAmbientColorTemperature = -1.0f; Loading @@ -213,6 +240,23 @@ public class DisplayWhiteBalanceController implements } } try { mLowLightAmbientBrightnessToBiasSplineStrong = new Spline.LinearSpline( lowLightAmbientBrightnessesStrong, lowLightAmbientBiasesStrong); } catch (Exception e) { Slog.e(TAG, "failed to create strong low light ambient brightness to bias spline.", e); mLowLightAmbientBrightnessToBiasSplineStrong = null; } if (mLowLightAmbientBrightnessToBiasSplineStrong != null) { if (mLowLightAmbientBrightnessToBiasSplineStrong.interpolate(0.0f) != 0.0f || mLowLightAmbientBrightnessToBiasSplineStrong.interpolate( Float.POSITIVE_INFINITY) != 1.0f) { Slog.d(TAG, "invalid strong low light ambient brightness to bias spline, " + "bias must begin at 0.0 and end at 1.0."); mLowLightAmbientBrightnessToBiasSplineStrong = null; } } try { mHighLightAmbientBrightnessToBiasSpline = new Spline.LinearSpline( highLightAmbientBrightnesses, highLightAmbientBiases); Loading @@ -230,6 +274,23 @@ public class DisplayWhiteBalanceController implements } } try { mHighLightAmbientBrightnessToBiasSplineStrong = new Spline.LinearSpline( highLightAmbientBrightnessesStrong, highLightAmbientBiasesStrong); } catch (Exception e) { Slog.e(TAG, "failed to create strong high light ambient brightness to bias spline.", e); mHighLightAmbientBrightnessToBiasSplineStrong = null; } if (mHighLightAmbientBrightnessToBiasSplineStrong != null) { if (mHighLightAmbientBrightnessToBiasSplineStrong.interpolate(0.0f) != 0.0f || mHighLightAmbientBrightnessToBiasSplineStrong.interpolate( Float.POSITIVE_INFINITY) != 1.0f) { Slog.d(TAG, "invalid strong high light ambient brightness to bias spline, " + "bias must begin at 0.0 and end at 1.0."); mHighLightAmbientBrightnessToBiasSplineStrong = null; } } if (mLowLightAmbientBrightnessToBiasSpline != null && mHighLightAmbientBrightnessToBiasSpline != null) { if (lowLightAmbientBrightnesses[lowLightAmbientBrightnesses.length - 1] > Loading @@ -241,6 +302,18 @@ public class DisplayWhiteBalanceController implements } } if (mLowLightAmbientBrightnessToBiasSplineStrong != null && mHighLightAmbientBrightnessToBiasSplineStrong != null) { if (lowLightAmbientBrightnessesStrong[lowLightAmbientBrightnessesStrong.length - 1] > highLightAmbientBrightnessesStrong[0]) { Slog.d(TAG, "invalid strong low light and high light ambient brightness to bias " + "spline combination, defined domains must not intersect."); mLowLightAmbientBrightnessToBiasSplineStrong = null; mHighLightAmbientBrightnessToBiasSplineStrong = null; } } try { mAmbientToDisplayColorTemperatureSpline = new Spline.LinearSpline( ambientColorTemperatures, displayColorTemperatures); Loading Loading @@ -365,7 +438,11 @@ public class DisplayWhiteBalanceController implements mColorTemperatureFilter.dump(writer); mThrottler.dump(writer); writer.println(" mLowLightAmbientColorTemperature=" + mLowLightAmbientColorTemperature); writer.println(" mLowLightAmbientColorTemperatureStrong=" + mLowLightAmbientColorTemperatureStrong); writer.println(" mHighLightAmbientColorTemperature=" + mHighLightAmbientColorTemperature); writer.println(" mHighLightAmbientColorTemperatureStrong=" + mHighLightAmbientColorTemperatureStrong); writer.println(" mAmbientColorTemperature=" + mAmbientColorTemperature); writer.println(" mPendingAmbientColorTemperature=" + mPendingAmbientColorTemperature); writer.println(" mLastAmbientColorTemperature=" + mLastAmbientColorTemperature); Loading @@ -377,8 +454,12 @@ public class DisplayWhiteBalanceController implements + mStrongAmbientToDisplayColorTemperatureSpline); writer.println(" mLowLightAmbientBrightnessToBiasSpline=" + mLowLightAmbientBrightnessToBiasSpline); writer.println(" mLowLightAmbientBrightnessToBiasSplineStrong=" + mLowLightAmbientBrightnessToBiasSplineStrong); writer.println(" mHighLightAmbientBrightnessToBiasSpline=" + mHighLightAmbientBrightnessToBiasSpline); writer.println(" mHighLightAmbientBrightnessToBiasSplineStrong=" + mHighLightAmbientBrightnessToBiasSplineStrong); } @Override // AmbientSensor.AmbientBrightnessSensor.Callbacks Loading @@ -400,6 +481,17 @@ public class DisplayWhiteBalanceController implements */ public void updateAmbientColorTemperature() { final long time = System.currentTimeMillis(); final float lowLightAmbientColorTemperature = mStrongModeEnabled ? mLowLightAmbientColorTemperatureStrong : mLowLightAmbientColorTemperature; final float highLightAmbientColorTemperature = mStrongModeEnabled ? mHighLightAmbientColorTemperatureStrong : mHighLightAmbientColorTemperature; final Spline.LinearSpline lowLightAmbientBrightnessToBiasSpline = mStrongModeEnabled ? mLowLightAmbientBrightnessToBiasSplineStrong : mLowLightAmbientBrightnessToBiasSpline; final Spline.LinearSpline highLightAmbientBrightnessToBiasSpline = mStrongModeEnabled ? mHighLightAmbientBrightnessToBiasSplineStrong : mHighLightAmbientBrightnessToBiasSpline; float ambientColorTemperature = mColorTemperatureFilter.getEstimate(time); mLatestAmbientColorTemperature = ambientColorTemperature; Loading @@ -423,19 +515,19 @@ public class DisplayWhiteBalanceController implements mLatestAmbientBrightness = ambientBrightness; if (ambientColorTemperature != -1.0f && ambientBrightness != -1.0f && mLowLightAmbientBrightnessToBiasSpline != null) { float bias = mLowLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); && lowLightAmbientBrightnessToBiasSpline != null) { float bias = lowLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); ambientColorTemperature = bias * ambientColorTemperature + (1.0f - bias) * mLowLightAmbientColorTemperature; * lowLightAmbientColorTemperature; mLatestLowLightBias = bias; } if (ambientColorTemperature != -1.0f && ambientBrightness != -1.0f && mHighLightAmbientBrightnessToBiasSpline != null) { float bias = mHighLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); && highLightAmbientBrightnessToBiasSpline != null) { float bias = highLightAmbientBrightnessToBiasSpline.interpolate(ambientBrightness); ambientColorTemperature = (1.0f - bias) * ambientColorTemperature + bias * mHighLightAmbientColorTemperature; * highLightAmbientColorTemperature; mLatestHighLightBias = bias; } Loading
services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceFactory.java +26 −2 Original line number Diff line number Diff line Loading @@ -70,21 +70,39 @@ public class DisplayWhiteBalanceFactory { final float[] displayWhiteBalanceLowLightAmbientBrightnesses = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBrightnesses); final float[] displayWhiteBalanceLowLightAmbientBrightnessesStrong = getFloatArray( resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBrightnessesStrong); final float[] displayWhiteBalanceLowLightAmbientBiases = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBiases); final float[] displayWhiteBalanceLowLightAmbientBiasesStrong = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceLowLightAmbientBiasesStrong); final float lowLightAmbientColorTemperature = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceLowLightAmbientColorTemperature); final float lowLightAmbientColorTemperatureStrong = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceLowLightAmbientColorTemperatureStrong); final float[] displayWhiteBalanceHighLightAmbientBrightnesses = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBrightnesses); final float[] displayWhiteBalanceHighLightAmbientBrightnessesStrong = getFloatArray( resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBrightnessesStrong); final float[] displayWhiteBalanceHighLightAmbientBiases = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBiases); final float[] displayWhiteBalanceHighLightAmbientBiasesStrong = getFloatArray(resources, com.android.internal.R.array .config_displayWhiteBalanceHighLightAmbientBiasesStrong); final float highLightAmbientColorTemperature = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceHighLightAmbientColorTemperature); final float highLightAmbientColorTemperatureStrong = getFloat(resources, com.android.internal.R.dimen .config_displayWhiteBalanceHighLightAmbientColorTemperatureStrong); final float[] ambientColorTemperatures = getFloatArray(resources, com.android.internal.R.array.config_displayWhiteBalanceAmbientColorTemperatures); final float[] displayColorTemperatures = getFloatArray(resources, Loading @@ -100,9 +118,15 @@ public class DisplayWhiteBalanceFactory { final DisplayWhiteBalanceController controller = new DisplayWhiteBalanceController( brightnessSensor, brightnessFilter, colorTemperatureSensor, colorTemperatureFilter, throttler, displayWhiteBalanceLowLightAmbientBrightnesses, displayWhiteBalanceLowLightAmbientBiases, lowLightAmbientColorTemperature, displayWhiteBalanceLowLightAmbientBrightnessesStrong, displayWhiteBalanceLowLightAmbientBiases, displayWhiteBalanceLowLightAmbientBiasesStrong, lowLightAmbientColorTemperature, lowLightAmbientColorTemperatureStrong, displayWhiteBalanceHighLightAmbientBrightnesses, displayWhiteBalanceHighLightAmbientBiases, highLightAmbientColorTemperature, displayWhiteBalanceHighLightAmbientBrightnessesStrong, displayWhiteBalanceHighLightAmbientBiases, displayWhiteBalanceHighLightAmbientBiasesStrong, highLightAmbientColorTemperature, highLightAmbientColorTemperatureStrong, ambientColorTemperatures, displayColorTemperatures, strongAmbientColorTemperatures, strongDisplayColorTemperatures, lightModeAllowed); brightnessSensor.setCallbacks(controller); Loading
services/tests/displayservicetests/src/com/android/server/display/whitebalance/AmbientLuxTest.java +34 −4 File changed.Preview size limit exceeded, changes collapsed. Show changes