From d08c46aaab23c095dc17a01fe13f285688f7f68a Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Sat, 7 May 2022 19:33:47 +0100 Subject: [PATCH] Add disable options for black and white clamp Also sets sensible pivot default and add a config check around GenerateProcessor app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h --- .../ociogradingtransformlinear.cpp | 61 +++++++++++++------ .../ociogradingtransformlinear.h | 2 + 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp index e721a1d0e..548e405ff 100644 --- a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp +++ b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.cpp @@ -33,7 +33,9 @@ const QString OCIOGradingTransformLinearNode::kOffsetInput = QStringLiteral("off const QString OCIOGradingTransformLinearNode::kExposureInput = QStringLiteral("exposure_in"); const QString OCIOGradingTransformLinearNode::kSaturationInput = QStringLiteral("saturation_in"); const QString OCIOGradingTransformLinearNode::kPivotInput = QStringLiteral("pivot_in"); +const QString OCIOGradingTransformLinearNode::kClampBlackDisableInput = QStringLiteral("clamp_black_disable"); const QString OCIOGradingTransformLinearNode::kClampBlackInput = QStringLiteral("clamp_black_in"); +const QString OCIOGradingTransformLinearNode::kClampWhiteDisableInput = QStringLiteral("clamp_white_disable"); const QString OCIOGradingTransformLinearNode::kClampWhiteInput = QStringLiteral("clamp_white_in"); #define super OCIOBaseNode @@ -53,11 +55,17 @@ OCIOGradingTransformLinearNode::OCIOGradingTransformLinearNode() AddInput(kSaturationInput, NodeValue::kFloat, 1.0); SetInputProperty(kSaturationInput, QStringLiteral("min"), 0.0); - AddInput(kPivotInput, NodeValue::kFloat, 0.203919098); + AddInput(kPivotInput, NodeValue::kFloat, 0.18); + + AddInput(kClampBlackDisableInput, NodeValue::kBoolean, true); AddInput(kClampBlackInput, NodeValue::kFloat, 0.0); + SetInputProperty(kClampBlackInput, QStringLiteral("disable"), GetStandardValue(kClampBlackDisableInput).toBool()); - AddInput(kClampWhiteInput, NodeValue::kFloat, 200.0); + AddInput(kClampWhiteDisableInput, NodeValue::kBoolean, true); + + AddInput(kClampWhiteInput, NodeValue::kFloat, 1.0); + SetInputProperty(kClampWhiteInput, QStringLiteral("disable"), GetStandardValue(kClampWhiteDisableInput).toBool()); } QString OCIOGradingTransformLinearNode::Name() const @@ -90,35 +98,54 @@ void OCIOGradingTransformLinearNode::Retranslate() SetInputName(kExposureInput, tr("Exposure")); SetInputName(kSaturationInput, tr("Saturation")); SetInputName(kPivotInput, tr("Pivot")); + SetInputName(kClampBlackDisableInput, tr("Disable Black Clamp")); SetInputName(kClampBlackInput, tr("Black Clamp")); + SetInputName(kClampWhiteDisableInput, tr("Disable White Clamp")); SetInputName(kClampWhiteInput, tr("White Clamp")); } void OCIOGradingTransformLinearNode::InputValueChangedEvent(const QString &input, int element) { Q_UNUSED(element); + if (input == kClampWhiteDisableInput) { + SetInputProperty(kClampWhiteInput, QStringLiteral("disable"), GetStandardValue(kClampWhiteDisableInput).toBool()); + } + if (input == kClampBlackDisableInput) { + SetInputProperty(kClampBlackInput, QStringLiteral("disable"), GetStandardValue(kClampBlackDisableInput).toBool()); + } + GenerateProcessor(); } void OCIOGradingTransformLinearNode::GenerateProcessor() { - OCIO::GradingPrimaryTransformRcPtr gp = OCIO::GradingPrimaryTransform::Create(OCIO::GRADING_LIN); - gp->setDirection(OCIO::TransformDirection::TRANSFORM_DIR_FORWARD); + if (manager()) { + OCIO::GradingPrimaryTransformRcPtr gp = OCIO::GradingPrimaryTransform::Create(OCIO::GRADING_LIN); + gp->setDirection(OCIO::TransformDirection::TRANSFORM_DIR_FORWARD); - OCIO::GradingPrimary gpdata{OCIO::GRADING_LIN}; - gpdata.m_contrast = OCIOUtils::QVec4ToRGBM(GetStandardValue(kContrastInput).value()); - gpdata.m_exposure = OCIOUtils::QVec4ToRGBM(GetStandardValue(kExposureInput).value()); - gpdata.m_offset = OCIOUtils::QVec4ToRGBM(GetStandardValue(kOffsetInput).value()); - gpdata.m_saturation = GetStandardValue(kSaturationInput).value(); - gpdata.m_pivot = GetStandardValue(kPivotInput).value(); - gpdata.m_clampBlack = GetStandardValue(kClampBlackInput).value(); - gpdata.m_clampWhite = GetStandardValue(kClampWhiteInput).value(); - try { - gp->setValue(gpdata); + OCIO::GradingPrimary gpdata{OCIO::GRADING_LIN}; + gpdata.m_contrast = OCIOUtils::QVec4ToRGBM(GetStandardValue(kContrastInput).value()); + gpdata.m_exposure = OCIOUtils::QVec4ToRGBM(GetStandardValue(kExposureInput).value()); + gpdata.m_offset = OCIOUtils::QVec4ToRGBM(GetStandardValue(kOffsetInput).value()); + gpdata.m_saturation = GetStandardValue(kSaturationInput).value(); + gpdata.m_pivot = GetStandardValue(kPivotInput).value(); + if (GetStandardValue(kClampBlackDisableInput).toBool()) { + gpdata.NoClampBlack(); + } else { + gpdata.m_clampBlack = GetStandardValue(kClampBlackInput).value(); + } + if (GetStandardValue(kClampWhiteDisableInput).toBool()) { + gpdata.NoClampWhite(); + } else { + gpdata.m_clampWhite = GetStandardValue(kClampWhiteInput).value(); + } + try { + gp->setValue(gpdata); - set_processor(ColorProcessor::Create(manager()->GetConfig()->getProcessor(gp))); - } catch (const OCIO::Exception &e) { - std::cerr << std::endl << e.what() << std::endl; + set_processor(ColorProcessor::Create(manager()->GetConfig()->getProcessor(gp))); + } catch (const OCIO::Exception &e) { + std::cerr << std::endl << e.what() << std::endl; + } } } diff --git a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h index 11e65ed85..507b502f1 100644 --- a/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h +++ b/app/node/color/ociogradingtransformlinear/ociogradingtransformlinear.h @@ -49,7 +49,9 @@ class OCIOGradingTransformLinearNode : public OCIOBaseNode static const QString kExposureInput; static const QString kSaturationInput; static const QString kPivotInput; + static const QString kClampBlackDisableInput; static const QString kClampBlackInput; + static const QString kClampWhiteDisableInput; static const QString kClampWhiteInput; protected slots: