Skip to content

Commit c8263fa

Browse files
larochjdoug-walker
authored andcommitted
Fix Windows CI
Towards clean (cherry picked from commit d298681) Signed-off-by: Doug Walker <[email protected]>
1 parent 2abeb38 commit c8263fa

File tree

7 files changed

+106
-51
lines changed

7 files changed

+106
-51
lines changed

include/OpenColorIO/OpenColorTransforms.h

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -575,18 +575,6 @@ extern OCIOEXPORT bool operator==(const GradingRGBCurve & lhs, const GradingRGBC
575575
extern OCIOEXPORT bool operator!=(const GradingRGBCurve & lhs, const GradingRGBCurve & rhs);
576576
extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingRGBCurve &);
577577

578-
struct OCIOEXPORT GradingHueCurves
579-
{
580-
ConstGradingBSplineCurveRcPtr hueHue;
581-
ConstGradingBSplineCurveRcPtr hueSat;
582-
ConstGradingBSplineCurveRcPtr hueLum;
583-
ConstGradingBSplineCurveRcPtr lumSat;
584-
ConstGradingBSplineCurveRcPtr satSat;
585-
ConstGradingBSplineCurveRcPtr lumLum;
586-
ConstGradingBSplineCurveRcPtr satLum;
587-
ConstGradingBSplineCurveRcPtr hueFx;
588-
};
589-
590578
/**
591579
* A set of HUE/SAT/LUM curves. It is used by GradingHueCurveTransform and can be used as
592580
* a dynamic property (see \ref DynamicPropertyGradingHueCurve).
@@ -596,7 +584,15 @@ class OCIOEXPORT GradingHueCurve
596584
public:
597585
static GradingHueCurveRcPtr Create(GradingStyle style);
598586
static GradingHueCurveRcPtr Create(const ConstGradingHueCurveRcPtr & rhs);
599-
static GradingHueCurveRcPtr Create(const GradingHueCurves & curves);
587+
static GradingHueCurveRcPtr Create(
588+
ConstGradingBSplineCurveRcPtr hueHue,
589+
ConstGradingBSplineCurveRcPtr hueSat,
590+
ConstGradingBSplineCurveRcPtr hueLum,
591+
ConstGradingBSplineCurveRcPtr lumSat,
592+
ConstGradingBSplineCurveRcPtr satSat,
593+
ConstGradingBSplineCurveRcPtr lumLum,
594+
ConstGradingBSplineCurveRcPtr satLum,
595+
ConstGradingBSplineCurveRcPtr hueFx);
600596

601597
virtual GradingHueCurveRcPtr createEditableCopy() const = 0;
602598
virtual void validate() const = 0;

src/OpenColorIO/ops/gradinghuecurve/GradingHueCurve.cpp

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,24 @@ GradingHueCurveImpl::GradingHueCurveImpl(GradingStyle style)
9090
}
9191
}
9292

93-
GradingHueCurveImpl::GradingHueCurveImpl(const GradingHueCurves & curves)
93+
GradingHueCurveImpl::GradingHueCurveImpl(
94+
ConstGradingBSplineCurveRcPtr hueHue,
95+
ConstGradingBSplineCurveRcPtr hueSat,
96+
ConstGradingBSplineCurveRcPtr hueLum,
97+
ConstGradingBSplineCurveRcPtr lumSat,
98+
ConstGradingBSplineCurveRcPtr satSat,
99+
ConstGradingBSplineCurveRcPtr lumLum,
100+
ConstGradingBSplineCurveRcPtr satLum,
101+
ConstGradingBSplineCurveRcPtr hueFx)
94102
{
95-
m_curves[HUE_HUE] = curves.hueHue->createEditableCopy();
96-
m_curves[HUE_SAT] = curves.hueSat->createEditableCopy();
97-
m_curves[HUE_LUM] = curves.hueLum->createEditableCopy();
98-
m_curves[LUM_SAT] = curves.lumSat->createEditableCopy();
99-
m_curves[SAT_SAT] = curves.satSat->createEditableCopy();
100-
m_curves[LUM_LUM] = curves.lumLum->createEditableCopy();
101-
m_curves[SAT_LUM] = curves.satLum->createEditableCopy();
102-
m_curves[HUE_FX] = curves.hueFx->createEditableCopy();
103+
m_curves[HUE_HUE] = hueHue->createEditableCopy();
104+
m_curves[HUE_SAT] = hueSat->createEditableCopy();
105+
m_curves[HUE_LUM] = hueLum->createEditableCopy();
106+
m_curves[LUM_SAT] = lumSat->createEditableCopy();
107+
m_curves[SAT_SAT] = satSat->createEditableCopy();
108+
m_curves[LUM_LUM] = lumLum->createEditableCopy();
109+
m_curves[SAT_LUM] = satLum->createEditableCopy();
110+
m_curves[HUE_FX] = hueFx->createEditableCopy();
103111
}
104112

105113
GradingHueCurveImpl::GradingHueCurveImpl(const ConstGradingHueCurveRcPtr & rhs)
@@ -227,9 +235,25 @@ GradingHueCurveRcPtr GradingHueCurve::Create(const ConstGradingHueCurveRcPtr & r
227235
return res;
228236
}
229237

230-
GradingHueCurveRcPtr GradingHueCurve::Create(const GradingHueCurves & curves)
238+
GradingHueCurveRcPtr GradingHueCurve::Create(
239+
ConstGradingBSplineCurveRcPtr hueHue,
240+
ConstGradingBSplineCurveRcPtr hueSat,
241+
ConstGradingBSplineCurveRcPtr hueLum,
242+
ConstGradingBSplineCurveRcPtr lumSat,
243+
ConstGradingBSplineCurveRcPtr satSat,
244+
ConstGradingBSplineCurveRcPtr lumLum,
245+
ConstGradingBSplineCurveRcPtr satLum,
246+
ConstGradingBSplineCurveRcPtr hueFx)
231247
{
232-
auto newCurve = std::make_shared<GradingHueCurveImpl>(curves);
248+
auto newCurve = std::make_shared<GradingHueCurveImpl>(
249+
hueHue,
250+
hueSat,
251+
hueLum,
252+
lumSat,
253+
satSat,
254+
lumLum,
255+
satLum,
256+
hueFx);
233257
GradingHueCurveRcPtr res = newCurve;
234258
return res;
235259
}

src/OpenColorIO/ops/gradinghuecurve/GradingHueCurve.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,15 @@ class GradingHueCurveImpl : public GradingHueCurve
2121
public:
2222
GradingHueCurveImpl();
2323
GradingHueCurveImpl(GradingStyle style);
24-
GradingHueCurveImpl(const GradingHueCurves & curves );
24+
GradingHueCurveImpl(
25+
ConstGradingBSplineCurveRcPtr hueHue,
26+
ConstGradingBSplineCurveRcPtr hueSat,
27+
ConstGradingBSplineCurveRcPtr hueLum,
28+
ConstGradingBSplineCurveRcPtr lumSat,
29+
ConstGradingBSplineCurveRcPtr satSat,
30+
ConstGradingBSplineCurveRcPtr lumLum,
31+
ConstGradingBSplineCurveRcPtr satLum,
32+
ConstGradingBSplineCurveRcPtr hueFx );
2533
GradingHueCurveImpl(const ConstGradingHueCurveRcPtr & rhs);
2634

2735
GradingHueCurveRcPtr createEditableCopy() const override;

src/OpenColorIO/ops/gradinghuecurve/GradingHueCurveOpData.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include <OpenColorIO/OpenColorIO.h>
77

8+
#include <iostream>
9+
810
#include "ops/gradinghuecurve/GradingHueCurve.h"
911
#include "ops/gradinghuecurve/GradingHueCurveOpData.h"
1012
#include "Platform.h"
@@ -35,12 +37,27 @@ GradingHueCurveOpData::GradingHueCurveOpData(const GradingHueCurveOpData & rhs)
3537
*this = rhs;
3638
}
3739

38-
GradingHueCurveOpData::GradingHueCurveOpData(GradingStyle style,
39-
const GradingHueCurves & curves)
40+
GradingHueCurveOpData::GradingHueCurveOpData(GradingStyle style,
41+
ConstGradingBSplineCurveRcPtr hueHue,
42+
ConstGradingBSplineCurveRcPtr hueSat,
43+
ConstGradingBSplineCurveRcPtr hueLum,
44+
ConstGradingBSplineCurveRcPtr lumSat,
45+
ConstGradingBSplineCurveRcPtr satSat,
46+
ConstGradingBSplineCurveRcPtr lumLum,
47+
ConstGradingBSplineCurveRcPtr satLum,
48+
ConstGradingBSplineCurveRcPtr hueFx)
4049
: OpData()
4150
, m_style(style)
4251
{
43-
ConstGradingHueCurveRcPtr hueCurve = GradingHueCurve::Create(curves);
52+
ConstGradingHueCurveRcPtr hueCurve = GradingHueCurve::Create(
53+
hueHue,
54+
hueSat,
55+
hueLum,
56+
lumSat,
57+
satSat,
58+
lumLum,
59+
satLum,
60+
hueFx);
4461
m_value = std::make_shared<DynamicPropertyGradingHueCurveImpl>(hueCurve, false);
4562
}
4663

src/OpenColorIO/ops/gradinghuecurve/GradingHueCurveOpData.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,14 @@ class GradingHueCurveOpData : public OpData
2626
GradingHueCurveOpData(GradingStyle style);
2727
GradingHueCurveOpData(const GradingHueCurveOpData & rhs);
2828
GradingHueCurveOpData(GradingStyle style,
29-
const GradingHueCurves & curve);
29+
ConstGradingBSplineCurveRcPtr hueHue,
30+
ConstGradingBSplineCurveRcPtr hueSat,
31+
ConstGradingBSplineCurveRcPtr hueLum,
32+
ConstGradingBSplineCurveRcPtr lumSat,
33+
ConstGradingBSplineCurveRcPtr satSat,
34+
ConstGradingBSplineCurveRcPtr lumLum,
35+
ConstGradingBSplineCurveRcPtr satLum,
36+
ConstGradingBSplineCurveRcPtr hueFx);
3037
GradingHueCurveOpData & operator=(const GradingHueCurveOpData & rhs);
3138
virtual ~GradingHueCurveOpData();
3239

src/OpenColorIO/ops/gradingrgbcurve/GradingBSplineCurve.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -170,19 +170,19 @@ float CalcKsi(unsigned i,
170170

171171
//------------------------------------------------------------------------------------------------
172172
//
173-
void FitHueSpline(const std::vector<GradingControlPoint>& outCtrlPnts,
173+
void FitHueSpline(const std::vector<GradingControlPoint>& ctrlPnts,
174174
const std::vector<float>& slopes,
175175
std::vector<float>& knots,
176176
std::vector<float>& coefsA,
177177
std::vector<float>& coefsB,
178178
std::vector<float>& coefsC)
179179
{
180-
knots.push_back( outCtrlPnts[0].m_x );
181-
unsigned numCtrlPnts = outCtrlPnts.size();
180+
knots.push_back( ctrlPnts[0].m_x );
181+
size_t numCtrlPnts = ctrlPnts.size();
182182
for (unsigned i = 0; i < numCtrlPnts - 1; ++i)
183183
{
184-
const GradingControlPoint& p0 = outCtrlPnts[i];
185-
const GradingControlPoint& p1 = outCtrlPnts[i + 1];
184+
const GradingControlPoint& p0 = ctrlPnts[i];
185+
const GradingControlPoint& p1 = ctrlPnts[i + 1];
186186

187187
const float dx = p1.m_x - p0.m_x;
188188
const float secantSlope = (p1.m_y - p0.m_y) / dx;
@@ -196,7 +196,7 @@ void FitHueSpline(const std::vector<GradingControlPoint>& outCtrlPnts,
196196
else
197197
{
198198
// Calculate the middle knot.
199-
const float ksi = CalcKsi(i, outCtrlPnts, slopes);
199+
const float ksi = CalcKsi(i, ctrlPnts, slopes);
200200

201201
// Calculate the coefficients.
202202
const float m_bar = (2.f * secantSlope - slopes[i + 1]) +
@@ -217,19 +217,19 @@ void FitHueSpline(const std::vector<GradingControlPoint>& outCtrlPnts,
217217

218218
//------------------------------------------------------------------------------------------------
219219
//
220-
void EstimateHueSlopes(std::vector<GradingControlPoint>& outCtrlPnts,
220+
void EstimateHueSlopes(const std::vector<GradingControlPoint>& ctrlPnts,
221221
std::vector<float>& slopes,
222222
bool isPeriodic,
223223
bool isHorizontal)
224224
{
225225
slopes.clear();
226-
unsigned numCtrlPnts = outCtrlPnts.size();
226+
size_t numCtrlPnts = ctrlPnts.size();
227227
std::vector<float> secantSlope;
228228
std::vector<float> secantLen;
229229
for (unsigned i = 0; i < numCtrlPnts - 1; ++i)
230230
{
231-
const GradingControlPoint& p0 = outCtrlPnts[i];
232-
const GradingControlPoint& p1 = outCtrlPnts[i + 1];
231+
const GradingControlPoint& p0 = ctrlPnts[i];
232+
const GradingControlPoint& p1 = ctrlPnts[i + 1];
233233

234234
const float del_x = p1.m_x - p0.m_x; // PrepHueCurveData ensures this is > 0
235235
const float del_y = p1.m_y - p0.m_y;
@@ -653,20 +653,20 @@ bool GradingBSplineCurveImpl::isIdentity() const
653653
bool isIdentity = true;
654654
if( m_curveType == DIAGONAL_B_SPLINE || m_curveType == B_SPLINE || m_curveType == HUE_HUE_B_SPLINE )
655655
{
656-
isIdentity = std::all_of(m_controlPoints.begin(),
657-
m_controlPoints.end(),
656+
isIdentity = std::all_of(m_controlPoints.cbegin(),
657+
m_controlPoints.cend(),
658658
[](const GradingControlPoint& cp) { return cp.m_x == cp.m_y; });
659659
}
660660
else if( m_curveType == PERIODIC_0_B_SPLINE )
661661
{
662-
isIdentity = std::all_of(m_controlPoints.begin(),
663-
m_controlPoints.end(),
662+
isIdentity = std::all_of(m_controlPoints.cbegin(),
663+
m_controlPoints.cend(),
664664
[](const GradingControlPoint& cp) { return cp.m_y == 0.f; });
665665
}
666666
else if( m_curveType == HORIZONTAL1_B_SPLINE || m_curveType == PERIODIC_1_B_SPLINE )
667667
{
668-
isIdentity = std::all_of(m_controlPoints.begin(),
669-
m_controlPoints.end(),
668+
isIdentity = std::all_of(m_controlPoints.cbegin(),
669+
m_controlPoints.cend(),
670670
[](const GradingControlPoint& cp) { return cp.m_y == 1.f; });
671671
} else
672672
{
@@ -804,6 +804,12 @@ void GradingBSplineCurveImpl::computeKnotsAndCoefsForHueCurve(KnotsCoefs & knots
804804
{
805805
// If the user-supplied slopes are non-zero, use those.
806806
slopes = m_slopesArray;
807+
808+
// We need to ensure equal number of slopes and control points for the spline fit.
809+
while(slopes.size() < resultCtrlPnts.size())
810+
{
811+
slopes.push_back(0.0f);
812+
}
807813
}
808814
else
809815
{

tests/cpu/ops/gradinghuecurve/GradingHueCurveOpData_tests.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,25 +123,22 @@ OCIO_ADD_TEST(GradingHueCurveOpData, validate)
123123

124124
// Curves with a single control point are not valid.
125125
auto curve = OCIO::GradingBSplineCurve::Create(1);
126-
OCIO::GradingHueCurves curvesStruct{curve, curve, curve, curve, curve, curve, curve, curve};
127-
auto curves = OCIO::GradingHueCurve::Create(curvesStruct);
126+
auto curves = OCIO::GradingHueCurve::Create(curve, curve, curve, curve, curve, curve, curve, curve);
128127
OCIO_CHECK_THROW_WHAT(gc.setValue(curves), OCIO::Exception,
129128
"There must be at least 2 control points.");
130129

131130
// Curve x coordinates have to increase.
132131
curve = OCIO::GradingBSplineCurve::Create({ { 0.f,0.f },{ 0.7f,0.3f },
133132
{ 0.5f,0.7f },{ 1.f,1.f } });
134133

135-
curvesStruct = OCIO::GradingHueCurves{curve, curve, curve, curve, curve, curve, curve, curve};
136-
curves = OCIO::GradingHueCurve::Create(curvesStruct);
134+
curves = OCIO::GradingHueCurve::Create(curve, curve, curve, curve, curve, curve, curve, curve);
137135
OCIO_CHECK_THROW_WHAT(gc.setValue(curves), OCIO::Exception,
138136
"has a x coordinate '0.5' that is less from previous control "
139137
"point x cooordinate '0.7'.");
140138

141139
// Fix the curve x coordinate.
142140
curve->getControlPoint(1).m_x = 0.3f;
143-
curvesStruct = OCIO::GradingHueCurves{curve, curve, curve, curve, curve, curve, curve, curve};
144-
curves = OCIO::GradingHueCurve::Create(curvesStruct);
141+
curves = OCIO::GradingHueCurve::Create(curve, curve, curve, curve, curve, curve, curve, curve);
145142
OCIO_CHECK_NO_THROW(gc.setValue(curves));
146143
OCIO_CHECK_NO_THROW(gc.validate());
147144
}

0 commit comments

Comments
 (0)