Minimum luminance for backlight in dark scenes (#646)

* Include miminum luminance

* Add luminance minimum

* Add luminance minimum

* fixed missing ;

* Add luminance minimum

* Add luminance minimum check

Check if luminance mimimum is other than default

* Add luminance minimum

* Add luminance minimum

* Add luminance minimum

* Add luminance minimum

* Add luminance minimum

* Safe luminance calculation


Former-commit-id: 35a762b18b473a333155acba7a00894204400076
This commit is contained in:
Funatiq
2016-05-23 00:00:48 +02:00
committed by brindosch
parent e944ce46cd
commit f8b724f9f9
9 changed files with 69 additions and 10 deletions

View File

@@ -452,8 +452,9 @@ HslTransform * Hyperion::createHslTransform(const Json::Value & hslConfig)
{
const double saturationGain = hslConfig.get("saturationGain", 1.0).asDouble();
const double luminanceGain = hslConfig.get("luminanceGain", 1.0).asDouble();
const double luminanceMinimum = hslConfig.get("luminanceMinimum", 0.0).asDouble();
return new HslTransform(saturationGain, luminanceGain);
return new HslTransform(saturationGain, luminanceGain, luminanceMinimum);
}
RgbChannelTransform* Hyperion::createRgbChannelTransform(const Json::Value& colorConfig)

View File

@@ -68,6 +68,11 @@
"type" : "number",
"required" : false,
"minimum" : 0.0
},
"luminanceMinimum" : {
"type" : "number",
"required" : false,
"minimum" : 0.0
}
},
"additionalProperties" : false

View File

@@ -455,6 +455,7 @@ void JsonClientConnection::handleServerInfoCommand(const Json::Value &)
transform["valueGain"] = colorTransform->_hsvTransform.getValueGain();
transform["saturationLGain"] = colorTransform->_hslTransform.getSaturationGain();
transform["luminanceGain"] = colorTransform->_hslTransform.getLuminanceGain();
transform["luminanceMinimum"] = colorTransform->_hslTransform.getLuminanceMinimum();
Json::Value & threshold = transform["threshold"];
threshold.append(colorTransform->_rgbRedTransform.getThreshold());
@@ -605,6 +606,11 @@ void JsonClientConnection::handleTransformCommand(const Json::Value &message)
colorTransform->_hslTransform.setLuminanceGain(transform["luminanceGain"].asDouble());
}
if (transform.isMember("luminanceMinimum"))
{
colorTransform->_hslTransform.setLuminanceMinimum(transform["luminanceMinimum"].asDouble());
}
if (transform.isMember("threshold"))
{
const Json::Value & values = transform["threshold"];

View File

@@ -35,6 +35,11 @@
"required" : false,
"minimum" : 0.0
},
"luminanceMinimum" : {
"type" : "number",
"required" : false,
"minimum" : 0.0
},
"threshold": {
"type": "array",
"required": false,

View File

@@ -4,13 +4,15 @@
HslTransform::HslTransform() :
_saturationGain(1.0),
_luminanceGain(1.0)
_luminanceGain(1.0),
_luminanceMinimum(0.0)
{
}
HslTransform::HslTransform(double saturationGain, double luminanceGain) :
HslTransform::HslTransform(double saturationGain, double luminanceGain, double luminanceMinimum) :
_saturationGain(saturationGain),
_luminanceGain(luminanceGain)
_luminanceGain(luminanceGain),
_luminanceMinimum(luminanceMinimum)
{
}
@@ -38,9 +40,19 @@ double HslTransform::getLuminanceGain() const
return _luminanceGain;
}
void HslTransform::setLuminanceMinimum(double luminanceMinimum)
{
_luminanceMinimum = luminanceMinimum;
}
double HslTransform::getLuminanceMinimum() const
{
return _luminanceMinimum;
}
void HslTransform::transform(uint8_t & red, uint8_t & green, uint8_t & blue) const
{
if (_saturationGain != 1.0 || _luminanceGain != 1.0)
if (_saturationGain != 1.0 || _luminanceGain != 1.0 || _luminanceMinimum != 0.0)
{
uint16_t hue;
float saturation, luminance;
@@ -53,9 +65,11 @@ void HslTransform::transform(uint8_t & red, uint8_t & green, uint8_t & blue) con
saturation = s;
float l = luminance * _luminanceGain;
if (l < _luminanceMinimum)
l = _luminanceMinimum;
if (l > 1.0f)
luminance = 1.0f;
else
else
luminance = l;
hsl2rgb(hue, saturation, luminance, red, green, blue);