diff options
author | Steve Kondik <steve@cyngn.com> | 2016-07-18 02:36:42 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-07-20 10:07:31 -0700 |
commit | 86cae92291f728d0eca637573ecbe6e0a53ccf1a (patch) | |
tree | 577cc188e1b9fc69b006135fbb480b1848a29e1d /cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java | |
parent | 25d708141814289067587e504a0bb33a76c28a78 (diff) | |
download | vendor_cmsdk-86cae92291f728d0eca637573ecbe6e0a53ccf1a.zip vendor_cmsdk-86cae92291f728d0eca637573ecbe6e0a53ccf1a.tar.gz vendor_cmsdk-86cae92291f728d0eca637573ecbe6e0a53ccf1a.tar.bz2 |
livedisplay: Add support for direct color balance control
* We currently use the DisplayColorCalibration API for setting display
temperature which makes a lot of guesses about what temperature
the display really is. Some devices will support the new ColorBalance
API (via QDCM or other mechanism), which offers a calibrated
alternative. Add support for this, which will supercede DCC if
available.
* Additionally, define the available color temperature range as a
set of overlayable values so this can be specified per-device.
This range will be mapped to balance values using the power curve
calculations in the new MathUtils class.
Change-Id: I99608c09807b747d962680293c7b0cee8d669003
Diffstat (limited to 'cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java')
-rw-r--r-- | cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java b/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java index 7e79de4..6052383 100644 --- a/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java +++ b/cm/lib/main/java/org/cyanogenmod/platform/internal/CMHardwareService.java @@ -36,6 +36,7 @@ import java.util.Arrays; import org.cyanogenmod.hardware.AdaptiveBacklight; import org.cyanogenmod.hardware.AutoContrast; +import org.cyanogenmod.hardware.ColorBalance; import org.cyanogenmod.hardware.ColorEnhancement; import org.cyanogenmod.hardware.DisplayColorCalibration; import org.cyanogenmod.hardware.DisplayGammaCalibration; @@ -96,6 +97,11 @@ public class CMHardwareService extends CMSystemService implements ThermalUpdateC public boolean writePersistentBytes(String key, byte[] value); public byte[] readPersistentBytes(String key); + + public int getColorBalanceMin(); + public int getColorBalanceMax(); + public int getColorBalance(); + public boolean setColorBalance(int value); } private class LegacyCMHardware implements CMHardwareInterface { @@ -137,6 +143,8 @@ public class CMHardwareService extends CMSystemService implements ThermalUpdateC mSupportedFeatures |= CMHardwareManager.FEATURE_THERMAL_MONITOR; if (UniqueDeviceId.isSupported()) mSupportedFeatures |= CMHardwareManager.FEATURE_UNIQUE_DEVICE_ID; + if (ColorBalance.isSupported()) + mSupportedFeatures |= CMHardwareManager.FEATURE_COLOR_BALANCE; } public int getSupportedFeatures() { @@ -334,6 +342,22 @@ public class CMHardwareService extends CMSystemService implements ThermalUpdateC public byte[] readPersistentBytes(String key) { return PersistentStorage.get(key); } + + public int getColorBalanceMin() { + return ColorBalance.getMinValue(); + } + + public int getColorBalanceMax() { + return ColorBalance.getMaxValue(); + } + + public int getColorBalance() { + return ColorBalance.getValue(); + } + + public boolean setColorBalance(int value) { + return ColorBalance.setValue(value); + } } private CMHardwareInterface getImpl(Context context) { @@ -687,5 +711,45 @@ public class CMHardwareService extends CMSystemService implements ThermalUpdateC } return false; } + + @Override + public int getColorBalanceMin() { + mContext.enforceCallingOrSelfPermission( + cyanogenmod.platform.Manifest.permission.HARDWARE_ABSTRACTION_ACCESS, null); + if (isSupported(CMHardwareManager.FEATURE_COLOR_BALANCE)) { + return mCmHwImpl.getColorBalanceMin(); + } + return 0; + } + + @Override + public int getColorBalanceMax() { + mContext.enforceCallingOrSelfPermission( + cyanogenmod.platform.Manifest.permission.HARDWARE_ABSTRACTION_ACCESS, null); + if (isSupported(CMHardwareManager.FEATURE_COLOR_BALANCE)) { + return mCmHwImpl.getColorBalanceMax(); + } + return 0; + } + + @Override + public int getColorBalance() { + mContext.enforceCallingOrSelfPermission( + cyanogenmod.platform.Manifest.permission.HARDWARE_ABSTRACTION_ACCESS, null); + if (isSupported(CMHardwareManager.FEATURE_COLOR_BALANCE)) { + return mCmHwImpl.getColorBalance(); + } + return 0; + } + + @Override + public boolean setColorBalance(int value) { + mContext.enforceCallingOrSelfPermission( + cyanogenmod.platform.Manifest.permission.HARDWARE_ABSTRACTION_ACCESS, null); + if (isSupported(CMHardwareManager.FEATURE_COLOR_BALANCE)) { + return mCmHwImpl.setColorBalance(value); + } + return false; + } }; } |