Compensate for DWB changes in brightness
Pass DWBController to brightness mapping strategy in order to adjust the brightness before we pass it to ABC. Bug: 215349117 Test: atest com.android.server.display Change-Id: I053c323b310021505d330127648fc110e7b18f77
This commit is contained in:
@@ -32,6 +32,7 @@ import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.display.BrightnessSynchronizer;
|
||||
import com.android.internal.util.Preconditions;
|
||||
import com.android.server.display.utils.Plog;
|
||||
import com.android.server.display.whitebalance.DisplayWhiteBalanceController;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Arrays;
|
||||
@@ -69,7 +70,7 @@ public abstract class BrightnessMappingStrategy {
|
||||
@Nullable
|
||||
public static BrightnessMappingStrategy create(Resources resources,
|
||||
DisplayDeviceConfig displayDeviceConfig) {
|
||||
return create(resources, displayDeviceConfig, /* isForIdleMode= */ false);
|
||||
return create(resources, displayDeviceConfig, /* isForIdleMode= */ false, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -80,8 +81,10 @@ public abstract class BrightnessMappingStrategy {
|
||||
*/
|
||||
@Nullable
|
||||
public static BrightnessMappingStrategy createForIdleMode(Resources resources,
|
||||
DisplayDeviceConfig displayDeviceConfig) {
|
||||
return create(resources, displayDeviceConfig, /* isForIdleMode= */ true);
|
||||
DisplayDeviceConfig displayDeviceConfig, DisplayWhiteBalanceController
|
||||
displayWhiteBalanceController) {
|
||||
return create(resources, displayDeviceConfig, /* isForIdleMode= */ true,
|
||||
displayWhiteBalanceController);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,7 +99,8 @@ public abstract class BrightnessMappingStrategy {
|
||||
*/
|
||||
@Nullable
|
||||
private static BrightnessMappingStrategy create(Resources resources,
|
||||
DisplayDeviceConfig displayDeviceConfig, boolean isForIdleMode) {
|
||||
DisplayDeviceConfig displayDeviceConfig, boolean isForIdleMode,
|
||||
DisplayWhiteBalanceController displayWhiteBalanceController) {
|
||||
|
||||
// Display independent, mode dependent values
|
||||
float[] brightnessLevelsNits;
|
||||
@@ -135,7 +139,7 @@ public abstract class BrightnessMappingStrategy {
|
||||
builder.setShortTermModelLowerLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO);
|
||||
builder.setShortTermModelUpperLuxMultiplier(SHORT_TERM_MODEL_THRESHOLD_RATIO);
|
||||
return new PhysicalMappingStrategy(builder.build(), nitsRange, brightnessRange,
|
||||
autoBrightnessAdjustmentMaxGamma, isForIdleMode);
|
||||
autoBrightnessAdjustmentMaxGamma, isForIdleMode, displayWhiteBalanceController);
|
||||
} else if (isValidMapping(luxLevels, brightnessLevelsBacklight) && !isForIdleMode) {
|
||||
return new SimpleMappingStrategy(luxLevels, brightnessLevelsBacklight,
|
||||
autoBrightnessAdjustmentMaxGamma, shortTermModelTimeout);
|
||||
@@ -770,9 +774,11 @@ public abstract class BrightnessMappingStrategy {
|
||||
private float mUserLux;
|
||||
private float mUserBrightness;
|
||||
private final boolean mIsForIdleMode;
|
||||
private final DisplayWhiteBalanceController mDisplayWhiteBalanceController;
|
||||
|
||||
public PhysicalMappingStrategy(BrightnessConfiguration config, float[] nits,
|
||||
float[] brightness, float maxGamma, boolean isForIdleMode) {
|
||||
float[] brightness, float maxGamma, boolean isForIdleMode,
|
||||
DisplayWhiteBalanceController displayWhiteBalanceController) {
|
||||
|
||||
Preconditions.checkArgument(nits.length != 0 && brightness.length != 0,
|
||||
"Nits and brightness arrays must not be empty!");
|
||||
@@ -789,6 +795,7 @@ public abstract class BrightnessMappingStrategy {
|
||||
mAutoBrightnessAdjustment = 0;
|
||||
mUserLux = -1;
|
||||
mUserBrightness = -1;
|
||||
mDisplayWhiteBalanceController = displayWhiteBalanceController;
|
||||
|
||||
mNits = nits;
|
||||
mBrightness = brightness;
|
||||
@@ -836,6 +843,12 @@ public abstract class BrightnessMappingStrategy {
|
||||
public float getBrightness(float lux, String packageName,
|
||||
@ApplicationInfo.Category int category) {
|
||||
float nits = mBrightnessSpline.interpolate(lux);
|
||||
|
||||
// Adjust nits to compensate for display white balance colour strength.
|
||||
if (mDisplayWhiteBalanceController != null && isForIdleMode()) {
|
||||
nits = mDisplayWhiteBalanceController.calculateAdjustedBrightnessNits(nits);
|
||||
}
|
||||
|
||||
float brightness = mNitsToBrightnessSpline.interpolate(nits);
|
||||
// Correct the brightness according to the current application and its category, but
|
||||
// only if no user data point is set (as this will override the user setting).
|
||||
|
||||
@@ -897,7 +897,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
||||
mDisplayDeviceConfig);
|
||||
if (isIdleScreenBrightnessEnabled) {
|
||||
mIdleModeBrightnessMapper = BrightnessMappingStrategy.createForIdleMode(resources,
|
||||
mDisplayDeviceConfig);
|
||||
mDisplayDeviceConfig, mDisplayWhiteBalanceController);
|
||||
}
|
||||
|
||||
if (mInteractiveModeBrightnessMapper != null) {
|
||||
|
||||
@@ -393,7 +393,8 @@ public class BrightnessMappingStrategyTest {
|
||||
|
||||
// Create an idle mode bms
|
||||
// This will fail if it tries to fetch the wrong configuration.
|
||||
BrightnessMappingStrategy bms = BrightnessMappingStrategy.createForIdleMode(res, ddc);
|
||||
BrightnessMappingStrategy bms = BrightnessMappingStrategy.createForIdleMode(res, ddc,
|
||||
null);
|
||||
assertNotNull("BrightnessMappingStrategy should not be null", bms);
|
||||
|
||||
// Ensure that the config is the one we set
|
||||
|
||||
Reference in New Issue
Block a user