diff options
Diffstat (limited to 'source/blender/compositor/operations/COM_BrightnessOperation.cpp')
-rw-r--r-- | source/blender/compositor/operations/COM_BrightnessOperation.cpp | 101 |
1 files changed, 52 insertions, 49 deletions
diff --git a/source/blender/compositor/operations/COM_BrightnessOperation.cpp b/source/blender/compositor/operations/COM_BrightnessOperation.cpp index dedea363163..81df85daf28 100644 --- a/source/blender/compositor/operations/COM_BrightnessOperation.cpp +++ b/source/blender/compositor/operations/COM_BrightnessOperation.cpp @@ -20,68 +20,71 @@ BrightnessOperation::BrightnessOperation() : NodeOperation() { - this->addInputSocket(COM_DT_COLOR); - this->addInputSocket(COM_DT_VALUE); - this->addInputSocket(COM_DT_VALUE); - this->addOutputSocket(COM_DT_COLOR); - this->m_inputProgram = NULL; - this->m_use_premultiply = false; + this->addInputSocket(COM_DT_COLOR); + this->addInputSocket(COM_DT_VALUE); + this->addInputSocket(COM_DT_VALUE); + this->addOutputSocket(COM_DT_COLOR); + this->m_inputProgram = NULL; + this->m_use_premultiply = false; } void BrightnessOperation::setUsePremultiply(bool use_premultiply) { - this->m_use_premultiply = use_premultiply; + this->m_use_premultiply = use_premultiply; } void BrightnessOperation::initExecution() { - this->m_inputProgram = this->getInputSocketReader(0); - this->m_inputBrightnessProgram = this->getInputSocketReader(1); - this->m_inputContrastProgram = this->getInputSocketReader(2); + this->m_inputProgram = this->getInputSocketReader(0); + this->m_inputBrightnessProgram = this->getInputSocketReader(1); + this->m_inputContrastProgram = this->getInputSocketReader(2); } -void BrightnessOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) +void BrightnessOperation::executePixelSampled(float output[4], + float x, + float y, + PixelSampler sampler) { - float inputValue[4]; - float a, b; - float inputBrightness[4]; - float inputContrast[4]; - this->m_inputProgram->readSampled(inputValue, x, y, sampler); - this->m_inputBrightnessProgram->readSampled(inputBrightness, x, y, sampler); - this->m_inputContrastProgram->readSampled(inputContrast, x, y, sampler); - float brightness = inputBrightness[0]; - float contrast = inputContrast[0]; - brightness /= 100.0f; - float delta = contrast / 200.0f; - a = 1.0f - delta * 2.0f; - /* - * The algorithm is by Werner D. Streidt - * (http://visca.com/ffactory/archives/5-99/msg00021.html) - * Extracted of OpenCV demhist.c - */ - if (contrast > 0) { - a = 1.0f / a; - b = a * (brightness - delta); - } - else { - delta *= -1; - b = a * (brightness + delta); - } - if (this->m_use_premultiply) { - premul_to_straight_v4(inputValue); - } - output[0] = a * inputValue[0] + b; - output[1] = a * inputValue[1] + b; - output[2] = a * inputValue[2] + b; - output[3] = inputValue[3]; - if (this->m_use_premultiply) { - straight_to_premul_v4(output); - } + float inputValue[4]; + float a, b; + float inputBrightness[4]; + float inputContrast[4]; + this->m_inputProgram->readSampled(inputValue, x, y, sampler); + this->m_inputBrightnessProgram->readSampled(inputBrightness, x, y, sampler); + this->m_inputContrastProgram->readSampled(inputContrast, x, y, sampler); + float brightness = inputBrightness[0]; + float contrast = inputContrast[0]; + brightness /= 100.0f; + float delta = contrast / 200.0f; + a = 1.0f - delta * 2.0f; + /* + * The algorithm is by Werner D. Streidt + * (http://visca.com/ffactory/archives/5-99/msg00021.html) + * Extracted of OpenCV demhist.c + */ + if (contrast > 0) { + a = 1.0f / a; + b = a * (brightness - delta); + } + else { + delta *= -1; + b = a * (brightness + delta); + } + if (this->m_use_premultiply) { + premul_to_straight_v4(inputValue); + } + output[0] = a * inputValue[0] + b; + output[1] = a * inputValue[1] + b; + output[2] = a * inputValue[2] + b; + output[3] = inputValue[3]; + if (this->m_use_premultiply) { + straight_to_premul_v4(output); + } } void BrightnessOperation::deinitExecution() { - this->m_inputProgram = NULL; - this->m_inputBrightnessProgram = NULL; - this->m_inputContrastProgram = NULL; + this->m_inputProgram = NULL; + this->m_inputBrightnessProgram = NULL; + this->m_inputContrastProgram = NULL; } |