diff options
Diffstat (limited to 'source/blender/compositor/operations/COM_ColorCorrectionOperation.cc')
-rw-r--r-- | source/blender/compositor/operations/COM_ColorCorrectionOperation.cc | 126 |
1 files changed, 60 insertions, 66 deletions
diff --git a/source/blender/compositor/operations/COM_ColorCorrectionOperation.cc b/source/blender/compositor/operations/COM_ColorCorrectionOperation.cc index 2b2baa15037..9cbe9a16ade 100644 --- a/source/blender/compositor/operations/COM_ColorCorrectionOperation.cc +++ b/source/blender/compositor/operations/COM_ColorCorrectionOperation.cc @@ -27,17 +27,17 @@ ColorCorrectionOperation::ColorCorrectionOperation() this->addInputSocket(DataType::Color); this->addInputSocket(DataType::Value); this->addOutputSocket(DataType::Color); - this->m_inputImage = nullptr; - this->m_inputMask = nullptr; - this->m_redChannelEnabled = true; - this->m_greenChannelEnabled = true; - this->m_blueChannelEnabled = true; + m_inputImage = nullptr; + m_inputMask = nullptr; + m_redChannelEnabled = true; + m_greenChannelEnabled = true; + m_blueChannelEnabled = true; flags.can_be_constant = true; } void ColorCorrectionOperation::initExecution() { - this->m_inputImage = this->getInputSocketReader(0); - this->m_inputMask = this->getInputSocketReader(1); + m_inputImage = this->getInputSocketReader(0); + m_inputMask = this->getInputSocketReader(1); } /* Calculate x^y if the function is defined. Otherwise return the given fallback value. */ @@ -56,15 +56,15 @@ void ColorCorrectionOperation::executePixelSampled(float output[4], { float inputImageColor[4]; float inputMask[4]; - this->m_inputImage->readSampled(inputImageColor, x, y, sampler); - this->m_inputMask->readSampled(inputMask, x, y, sampler); + m_inputImage->readSampled(inputImageColor, x, y, sampler); + m_inputMask->readSampled(inputMask, x, y, sampler); float level = (inputImageColor[0] + inputImageColor[1] + inputImageColor[2]) / 3.0f; - float contrast = this->m_data->master.contrast; - float saturation = this->m_data->master.saturation; - float gamma = this->m_data->master.gamma; - float gain = this->m_data->master.gain; - float lift = this->m_data->master.lift; + float contrast = m_data->master.contrast; + float saturation = m_data->master.saturation; + float gamma = m_data->master.gamma; + float gain = m_data->master.gain; + float lift = m_data->master.lift; float r, g, b; float value = inputMask[0]; @@ -76,18 +76,18 @@ void ColorCorrectionOperation::executePixelSampled(float output[4], float levelHighlights = 0.0; #define MARGIN 0.10f #define MARGIN_DIV (0.5f / MARGIN) - if (level < this->m_data->startmidtones - MARGIN) { + if (level < m_data->startmidtones - MARGIN) { levelShadows = 1.0f; } - else if (level < this->m_data->startmidtones + MARGIN) { - levelMidtones = ((level - this->m_data->startmidtones) * MARGIN_DIV) + 0.5f; + else if (level < m_data->startmidtones + MARGIN) { + levelMidtones = ((level - m_data->startmidtones) * MARGIN_DIV) + 0.5f; levelShadows = 1.0f - levelMidtones; } - else if (level < this->m_data->endmidtones - MARGIN) { + else if (level < m_data->endmidtones - MARGIN) { levelMidtones = 1.0f; } - else if (level < this->m_data->endmidtones + MARGIN) { - levelHighlights = ((level - this->m_data->endmidtones) * MARGIN_DIV) + 0.5f; + else if (level < m_data->endmidtones + MARGIN) { + levelHighlights = ((level - m_data->endmidtones) * MARGIN_DIV) + 0.5f; levelMidtones = 1.0f - levelHighlights; } else { @@ -95,21 +95,18 @@ void ColorCorrectionOperation::executePixelSampled(float output[4], } #undef MARGIN #undef MARGIN_DIV - contrast *= (levelShadows * this->m_data->shadows.contrast) + - (levelMidtones * this->m_data->midtones.contrast) + - (levelHighlights * this->m_data->highlights.contrast); - saturation *= (levelShadows * this->m_data->shadows.saturation) + - (levelMidtones * this->m_data->midtones.saturation) + - (levelHighlights * this->m_data->highlights.saturation); - gamma *= (levelShadows * this->m_data->shadows.gamma) + - (levelMidtones * this->m_data->midtones.gamma) + - (levelHighlights * this->m_data->highlights.gamma); - gain *= (levelShadows * this->m_data->shadows.gain) + - (levelMidtones * this->m_data->midtones.gain) + - (levelHighlights * this->m_data->highlights.gain); - lift += (levelShadows * this->m_data->shadows.lift) + - (levelMidtones * this->m_data->midtones.lift) + - (levelHighlights * this->m_data->highlights.lift); + contrast *= (levelShadows * m_data->shadows.contrast) + + (levelMidtones * m_data->midtones.contrast) + + (levelHighlights * m_data->highlights.contrast); + saturation *= (levelShadows * m_data->shadows.saturation) + + (levelMidtones * m_data->midtones.saturation) + + (levelHighlights * m_data->highlights.saturation); + gamma *= (levelShadows * m_data->shadows.gamma) + (levelMidtones * m_data->midtones.gamma) + + (levelHighlights * m_data->highlights.gamma); + gain *= (levelShadows * m_data->shadows.gain) + (levelMidtones * m_data->midtones.gain) + + (levelHighlights * m_data->highlights.gain); + lift += (levelShadows * m_data->shadows.lift) + (levelMidtones * m_data->midtones.lift) + + (levelHighlights * m_data->highlights.lift); float invgamma = 1.0f / gamma; float luma = IMB_colormanagement_get_luminance(inputImageColor); @@ -136,19 +133,19 @@ void ColorCorrectionOperation::executePixelSampled(float output[4], g = mvalue * inputImageColor[1] + value * g; b = mvalue * inputImageColor[2] + value * b; - if (this->m_redChannelEnabled) { + if (m_redChannelEnabled) { output[0] = r; } else { output[0] = inputImageColor[0]; } - if (this->m_greenChannelEnabled) { + if (m_greenChannelEnabled) { output[1] = g; } else { output[1] = inputImageColor[1]; } - if (this->m_blueChannelEnabled) { + if (m_blueChannelEnabled) { output[2] = b; } else { @@ -169,43 +166,40 @@ void ColorCorrectionOperation::update_memory_buffer_row(PixelCursor &p) float level_highlights = 0.0f; constexpr float MARGIN = 0.10f; constexpr float MARGIN_DIV = 0.5f / MARGIN; - if (level < this->m_data->startmidtones - MARGIN) { + if (level < m_data->startmidtones - MARGIN) { level_shadows = 1.0f; } - else if (level < this->m_data->startmidtones + MARGIN) { - level_midtones = ((level - this->m_data->startmidtones) * MARGIN_DIV) + 0.5f; + else if (level < m_data->startmidtones + MARGIN) { + level_midtones = ((level - m_data->startmidtones) * MARGIN_DIV) + 0.5f; level_shadows = 1.0f - level_midtones; } - else if (level < this->m_data->endmidtones - MARGIN) { + else if (level < m_data->endmidtones - MARGIN) { level_midtones = 1.0f; } - else if (level < this->m_data->endmidtones + MARGIN) { - level_highlights = ((level - this->m_data->endmidtones) * MARGIN_DIV) + 0.5f; + else if (level < m_data->endmidtones + MARGIN) { + level_highlights = ((level - m_data->endmidtones) * MARGIN_DIV) + 0.5f; level_midtones = 1.0f - level_highlights; } else { level_highlights = 1.0f; } - float contrast = this->m_data->master.contrast; - float saturation = this->m_data->master.saturation; - float gamma = this->m_data->master.gamma; - float gain = this->m_data->master.gain; - float lift = this->m_data->master.lift; - contrast *= level_shadows * this->m_data->shadows.contrast + - level_midtones * this->m_data->midtones.contrast + - level_highlights * this->m_data->highlights.contrast; - saturation *= level_shadows * this->m_data->shadows.saturation + - level_midtones * this->m_data->midtones.saturation + - level_highlights * this->m_data->highlights.saturation; - gamma *= level_shadows * this->m_data->shadows.gamma + - level_midtones * this->m_data->midtones.gamma + - level_highlights * this->m_data->highlights.gamma; - gain *= level_shadows * this->m_data->shadows.gain + - level_midtones * this->m_data->midtones.gain + - level_highlights * this->m_data->highlights.gain; - lift += level_shadows * this->m_data->shadows.lift + - level_midtones * this->m_data->midtones.lift + - level_highlights * this->m_data->highlights.lift; + float contrast = m_data->master.contrast; + float saturation = m_data->master.saturation; + float gamma = m_data->master.gamma; + float gain = m_data->master.gain; + float lift = m_data->master.lift; + contrast *= level_shadows * m_data->shadows.contrast + + level_midtones * m_data->midtones.contrast + + level_highlights * m_data->highlights.contrast; + saturation *= level_shadows * m_data->shadows.saturation + + level_midtones * m_data->midtones.saturation + + level_highlights * m_data->highlights.saturation; + gamma *= level_shadows * m_data->shadows.gamma + level_midtones * m_data->midtones.gamma + + level_highlights * m_data->highlights.gamma; + gain *= level_shadows * m_data->shadows.gain + level_midtones * m_data->midtones.gain + + level_highlights * m_data->highlights.gain; + lift += level_shadows * m_data->shadows.lift + level_midtones * m_data->midtones.lift + + level_highlights * m_data->highlights.lift; const float inv_gamma = 1.0f / gamma; const float luma = IMB_colormanagement_get_luminance(in_color); @@ -239,8 +233,8 @@ void ColorCorrectionOperation::update_memory_buffer_row(PixelCursor &p) void ColorCorrectionOperation::deinitExecution() { - this->m_inputImage = nullptr; - this->m_inputMask = nullptr; + m_inputImage = nullptr; + m_inputMask = nullptr; } } // namespace blender::compositor |