mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
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:
parent
e944ce46cd
commit
f8b724f9f9
@ -20,7 +20,7 @@ public:
|
|||||||
/// @param saturationGain The used saturation gain
|
/// @param saturationGain The used saturation gain
|
||||||
/// @param luminanceGain The used luminance gain
|
/// @param luminanceGain The used luminance gain
|
||||||
///
|
///
|
||||||
HslTransform(double saturationGain, double luminanceGain);
|
HslTransform(double saturationGain, double luminanceGain, double luminanceMinimum);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Destructor
|
/// Destructor
|
||||||
@ -55,6 +55,20 @@ public:
|
|||||||
///
|
///
|
||||||
double getLuminanceGain() const;
|
double getLuminanceGain() const;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Updates the luminance minimum
|
||||||
|
///
|
||||||
|
/// @param luminanceMinimum New luminance minimum
|
||||||
|
///
|
||||||
|
void setLuminanceMinimum(double luminanceMinimum);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Returns the luminance minimum
|
||||||
|
///
|
||||||
|
/// @return The current luminance minimum
|
||||||
|
///
|
||||||
|
double getLuminanceMinimum() const;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Apply the transform the the given RGB values.
|
/// Apply the transform the the given RGB values.
|
||||||
///
|
///
|
||||||
@ -97,4 +111,6 @@ private:
|
|||||||
double _saturationGain;
|
double _saturationGain;
|
||||||
/// The luminance gain
|
/// The luminance gain
|
||||||
double _luminanceGain;
|
double _luminanceGain;
|
||||||
|
/// The luminance minimum
|
||||||
|
double _luminanceMinimum
|
||||||
};
|
};
|
||||||
|
@ -452,8 +452,9 @@ HslTransform * Hyperion::createHslTransform(const Json::Value & hslConfig)
|
|||||||
{
|
{
|
||||||
const double saturationGain = hslConfig.get("saturationGain", 1.0).asDouble();
|
const double saturationGain = hslConfig.get("saturationGain", 1.0).asDouble();
|
||||||
const double luminanceGain = hslConfig.get("luminanceGain", 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)
|
RgbChannelTransform* Hyperion::createRgbChannelTransform(const Json::Value& colorConfig)
|
||||||
|
@ -68,6 +68,11 @@
|
|||||||
"type" : "number",
|
"type" : "number",
|
||||||
"required" : false,
|
"required" : false,
|
||||||
"minimum" : 0.0
|
"minimum" : 0.0
|
||||||
|
},
|
||||||
|
"luminanceMinimum" : {
|
||||||
|
"type" : "number",
|
||||||
|
"required" : false,
|
||||||
|
"minimum" : 0.0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties" : false
|
"additionalProperties" : false
|
||||||
|
@ -455,6 +455,7 @@ void JsonClientConnection::handleServerInfoCommand(const Json::Value &)
|
|||||||
transform["valueGain"] = colorTransform->_hsvTransform.getValueGain();
|
transform["valueGain"] = colorTransform->_hsvTransform.getValueGain();
|
||||||
transform["saturationLGain"] = colorTransform->_hslTransform.getSaturationGain();
|
transform["saturationLGain"] = colorTransform->_hslTransform.getSaturationGain();
|
||||||
transform["luminanceGain"] = colorTransform->_hslTransform.getLuminanceGain();
|
transform["luminanceGain"] = colorTransform->_hslTransform.getLuminanceGain();
|
||||||
|
transform["luminanceMinimum"] = colorTransform->_hslTransform.getLuminanceMinimum();
|
||||||
|
|
||||||
Json::Value & threshold = transform["threshold"];
|
Json::Value & threshold = transform["threshold"];
|
||||||
threshold.append(colorTransform->_rgbRedTransform.getThreshold());
|
threshold.append(colorTransform->_rgbRedTransform.getThreshold());
|
||||||
@ -605,6 +606,11 @@ void JsonClientConnection::handleTransformCommand(const Json::Value &message)
|
|||||||
colorTransform->_hslTransform.setLuminanceGain(transform["luminanceGain"].asDouble());
|
colorTransform->_hslTransform.setLuminanceGain(transform["luminanceGain"].asDouble());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (transform.isMember("luminanceMinimum"))
|
||||||
|
{
|
||||||
|
colorTransform->_hslTransform.setLuminanceMinimum(transform["luminanceMinimum"].asDouble());
|
||||||
|
}
|
||||||
|
|
||||||
if (transform.isMember("threshold"))
|
if (transform.isMember("threshold"))
|
||||||
{
|
{
|
||||||
const Json::Value & values = transform["threshold"];
|
const Json::Value & values = transform["threshold"];
|
||||||
|
@ -35,6 +35,11 @@
|
|||||||
"required" : false,
|
"required" : false,
|
||||||
"minimum" : 0.0
|
"minimum" : 0.0
|
||||||
},
|
},
|
||||||
|
"luminanceMinimum" : {
|
||||||
|
"type" : "number",
|
||||||
|
"required" : false,
|
||||||
|
"minimum" : 0.0
|
||||||
|
},
|
||||||
"threshold": {
|
"threshold": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"required": false,
|
"required": false,
|
||||||
|
@ -4,13 +4,15 @@
|
|||||||
|
|
||||||
HslTransform::HslTransform() :
|
HslTransform::HslTransform() :
|
||||||
_saturationGain(1.0),
|
_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),
|
_saturationGain(saturationGain),
|
||||||
_luminanceGain(luminanceGain)
|
_luminanceGain(luminanceGain),
|
||||||
|
_luminanceMinimum(luminanceMinimum)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,9 +40,19 @@ double HslTransform::getLuminanceGain() const
|
|||||||
return _luminanceGain;
|
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
|
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;
|
uint16_t hue;
|
||||||
float saturation, luminance;
|
float saturation, luminance;
|
||||||
@ -53,9 +65,11 @@ void HslTransform::transform(uint8_t & red, uint8_t & green, uint8_t & blue) con
|
|||||||
saturation = s;
|
saturation = s;
|
||||||
|
|
||||||
float l = luminance * _luminanceGain;
|
float l = luminance * _luminanceGain;
|
||||||
|
if (l < _luminanceMinimum)
|
||||||
|
l = _luminanceMinimum;
|
||||||
if (l > 1.0f)
|
if (l > 1.0f)
|
||||||
luminance = 1.0f;
|
luminance = 1.0f;
|
||||||
else
|
else
|
||||||
luminance = l;
|
luminance = l;
|
||||||
|
|
||||||
hsl2rgb(hue, saturation, luminance, red, green, blue);
|
hsl2rgb(hue, saturation, luminance, red, green, blue);
|
||||||
|
@ -192,7 +192,7 @@ void JsonConnection::clearAll()
|
|||||||
parseReply(reply);
|
parseReply(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonConnection::setTransform(std::string * transformId, double * saturation, double * value, double * saturationL, double * luminance, ColorTransformValues *threshold, ColorTransformValues *gamma, ColorTransformValues *blacklevel, ColorTransformValues *whitelevel)
|
void JsonConnection::setTransform(std::string * transformId, double * saturation, double * value, double * saturationL, double * luminance, double * luminanceMin, ColorTransformValues *threshold, ColorTransformValues *gamma, ColorTransformValues *blacklevel, ColorTransformValues *whitelevel)
|
||||||
{
|
{
|
||||||
std::cout << "Set color transforms" << std::endl;
|
std::cout << "Set color transforms" << std::endl;
|
||||||
|
|
||||||
@ -225,6 +225,12 @@ void JsonConnection::setTransform(std::string * transformId, double * saturation
|
|||||||
{
|
{
|
||||||
transform["luminanceGain"] = *luminance;
|
transform["luminanceGain"] = *luminance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (luminanceMin != nullptr)
|
||||||
|
{
|
||||||
|
transform["luminanceMinimum"] = *luminanceMin;
|
||||||
|
}
|
||||||
|
|
||||||
if (threshold != nullptr)
|
if (threshold != nullptr)
|
||||||
{
|
{
|
||||||
Json::Value & v = transform["threshold"];
|
Json::Value & v = transform["threshold"];
|
||||||
|
@ -93,6 +93,7 @@ public:
|
|||||||
/// @param value The HSV value gain
|
/// @param value The HSV value gain
|
||||||
/// @param saturationL The HSL saturation gain
|
/// @param saturationL The HSL saturation gain
|
||||||
/// @param luminance The HSL luminance gain
|
/// @param luminance The HSL luminance gain
|
||||||
|
/// @param luminanceMin The HSL luminance minimum
|
||||||
/// @param threshold The threshold
|
/// @param threshold The threshold
|
||||||
/// @param gamma The gamma value
|
/// @param gamma The gamma value
|
||||||
/// @param blacklevel The blacklevel
|
/// @param blacklevel The blacklevel
|
||||||
@ -104,6 +105,7 @@ public:
|
|||||||
double * value,
|
double * value,
|
||||||
double * saturationL,
|
double * saturationL,
|
||||||
double * luminance,
|
double * luminance,
|
||||||
|
double * luminanceMin,
|
||||||
ColorTransformValues * threshold,
|
ColorTransformValues * threshold,
|
||||||
ColorTransformValues * gamma,
|
ColorTransformValues * gamma,
|
||||||
ColorTransformValues * blacklevel,
|
ColorTransformValues * blacklevel,
|
||||||
|
@ -71,6 +71,7 @@ int main(int argc, char * argv[])
|
|||||||
DoubleParameter & argValue = parameters.add<DoubleParameter> ('v', "value" , "!DEPRECATED! Will be removed soon! Set the HSV value gain of the leds");
|
DoubleParameter & argValue = parameters.add<DoubleParameter> ('v', "value" , "!DEPRECATED! Will be removed soon! Set the HSV value gain of the leds");
|
||||||
DoubleParameter & argSaturationL = parameters.add<DoubleParameter> ('u', "saturationL", "Set the HSL saturation gain of the leds");
|
DoubleParameter & argSaturationL = parameters.add<DoubleParameter> ('u', "saturationL", "Set the HSL saturation gain of the leds");
|
||||||
DoubleParameter & argLuminance = parameters.add<DoubleParameter> ('m', "luminance" , "Set the HSL luminance gain of the leds");
|
DoubleParameter & argLuminance = parameters.add<DoubleParameter> ('m', "luminance" , "Set the HSL luminance gain of the leds");
|
||||||
|
DoubleParameter & argLuminanceMin = parameters.add<DoubleParameter> ('n', "luminanceMin" , "Set the HSL luminance minimum of the leds (backlight)");
|
||||||
TransformParameter & argGamma = parameters.add<TransformParameter>('g', "gamma" , "Set the gamma of the leds (requires 3 space seperated values)");
|
TransformParameter & argGamma = parameters.add<TransformParameter>('g', "gamma" , "Set the gamma of the leds (requires 3 space seperated values)");
|
||||||
TransformParameter & argThreshold = parameters.add<TransformParameter>('t', "threshold" , "Set the threshold of the leds (requires 3 space seperated values between 0.0 and 1.0)");
|
TransformParameter & argThreshold = parameters.add<TransformParameter>('t', "threshold" , "Set the threshold of the leds (requires 3 space seperated values between 0.0 and 1.0)");
|
||||||
TransformParameter & argBlacklevel = parameters.add<TransformParameter>('b', "blacklevel", "!DEPRECATED! Will be removed soon! Set the blacklevel of the leds (requires 3 space seperated values which are normally between 0.0 and 1.0)");
|
TransformParameter & argBlacklevel = parameters.add<TransformParameter>('b', "blacklevel", "!DEPRECATED! Will be removed soon! Set the blacklevel of the leds (requires 3 space seperated values which are normally between 0.0 and 1.0)");
|
||||||
@ -103,7 +104,7 @@ int main(int argc, char * argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if at least one of the available color transforms is set
|
// check if at least one of the available color transforms is set
|
||||||
bool colorTransform = argSaturation.isSet() || argValue.isSet() || argSaturationL.isSet() || argLuminance.isSet() || argThreshold.isSet() || argGamma.isSet() || argBlacklevel.isSet() || argWhitelevel.isSet();
|
bool colorTransform = argSaturation.isSet() || argValue.isSet() || argSaturationL.isSet() || argLuminance.isSet() || argLuminanceMin.isSet() || argThreshold.isSet() || argGamma.isSet() || argBlacklevel.isSet() || argWhitelevel.isSet();
|
||||||
bool colorAdjust = argRAdjust.isSet() || argGAdjust.isSet() || argBAdjust.isSet();
|
bool colorAdjust = argRAdjust.isSet() || argGAdjust.isSet() || argBAdjust.isSet();
|
||||||
bool colorModding = colorTransform || colorAdjust || argCorrection.isSet() || argTemperature.isSet();
|
bool colorModding = colorTransform || colorAdjust || argCorrection.isSet() || argTemperature.isSet();
|
||||||
|
|
||||||
@ -124,6 +125,7 @@ int main(int argc, char * argv[])
|
|||||||
std::cerr << " " << argValue.usageLine() << std::endl;
|
std::cerr << " " << argValue.usageLine() << std::endl;
|
||||||
std::cerr << " " << argSaturationL.usageLine() << std::endl;
|
std::cerr << " " << argSaturationL.usageLine() << std::endl;
|
||||||
std::cerr << " " << argLuminance.usageLine() << std::endl;
|
std::cerr << " " << argLuminance.usageLine() << std::endl;
|
||||||
|
std::cerr << " " << argLuminanceMin.usageLine() << std::endl;
|
||||||
std::cerr << " " << argThreshold.usageLine() << std::endl;
|
std::cerr << " " << argThreshold.usageLine() << std::endl;
|
||||||
std::cerr << " " << argGamma.usageLine() << std::endl;
|
std::cerr << " " << argGamma.usageLine() << std::endl;
|
||||||
std::cerr << " " << argBlacklevel.usageLine() << std::endl;
|
std::cerr << " " << argBlacklevel.usageLine() << std::endl;
|
||||||
@ -216,7 +218,7 @@ int main(int argc, char * argv[])
|
|||||||
if (colorTransform)
|
if (colorTransform)
|
||||||
{
|
{
|
||||||
std::string transId;
|
std::string transId;
|
||||||
double saturation, value, saturationL, luminance;
|
double saturation, value, saturationL, luminance, luminanceMin;
|
||||||
ColorTransformValues threshold, gamma, blacklevel, whitelevel;
|
ColorTransformValues threshold, gamma, blacklevel, whitelevel;
|
||||||
|
|
||||||
if (argId.isSet()) transId = argId.getValue();
|
if (argId.isSet()) transId = argId.getValue();
|
||||||
@ -224,6 +226,7 @@ int main(int argc, char * argv[])
|
|||||||
if (argValue.isSet()) value = argValue.getValue();
|
if (argValue.isSet()) value = argValue.getValue();
|
||||||
if (argSaturationL.isSet()) saturationL = argSaturationL.getValue();
|
if (argSaturationL.isSet()) saturationL = argSaturationL.getValue();
|
||||||
if (argLuminance.isSet()) luminance = argLuminance.getValue();
|
if (argLuminance.isSet()) luminance = argLuminance.getValue();
|
||||||
|
if (argLuminanceMin.isSet()) luminanceMin = argLuminanceMin.getValue();
|
||||||
if (argThreshold.isSet()) threshold = argThreshold.getValue();
|
if (argThreshold.isSet()) threshold = argThreshold.getValue();
|
||||||
if (argGamma.isSet()) gamma = argGamma.getValue();
|
if (argGamma.isSet()) gamma = argGamma.getValue();
|
||||||
if (argBlacklevel.isSet()) blacklevel = argBlacklevel.getValue();
|
if (argBlacklevel.isSet()) blacklevel = argBlacklevel.getValue();
|
||||||
@ -235,6 +238,7 @@ int main(int argc, char * argv[])
|
|||||||
argValue.isSet() ? &value : nullptr,
|
argValue.isSet() ? &value : nullptr,
|
||||||
argSaturationL.isSet() ? &saturationL : nullptr,
|
argSaturationL.isSet() ? &saturationL : nullptr,
|
||||||
argLuminance.isSet() ? &luminance : nullptr,
|
argLuminance.isSet() ? &luminance : nullptr,
|
||||||
|
argLuminanceMin.isSet() ? &luminanceMin : nullptr,
|
||||||
argThreshold.isSet() ? &threshold : nullptr,
|
argThreshold.isSet() ? &threshold : nullptr,
|
||||||
argGamma.isSet() ? &gamma : nullptr,
|
argGamma.isSet() ? &gamma : nullptr,
|
||||||
argBlacklevel.isSet() ? &blacklevel : nullptr,
|
argBlacklevel.isSet() ? &blacklevel : nullptr,
|
||||||
|
Loading…
Reference in New Issue
Block a user