summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-05-04 22:29:50 +0200
committerCarl Hetherington <cth@carlh.net>2025-10-14 20:50:53 +0200
commit6ee5579ba47f120f731c11f47417d690d6ce1325 (patch)
treed57eeaec70a95c8a3287aa32e227c38c38474363 /src
parent27fb2ff0c187b3f514c291cb75ea5a193128cf45 (diff)
Add output gamma for going to MPEG2 DCP (2.4).
Diffstat (limited to 'src')
-rw-r--r--src/colour_conversion.cc30
-rw-r--r--src/colour_conversion.h14
2 files changed, 34 insertions, 10 deletions
diff --git a/src/colour_conversion.cc b/src/colour_conversion.cc
index ef2f374a..3b98ccd0 100644
--- a/src/colour_conversion.cc
+++ b/src/colour_conversion.cc
@@ -65,7 +65,8 @@ ColourConversion::srgb_to_dcp()
Chromaticity(0.15, 0.06),
Chromaticity::D65(),
optional<Chromaticity>(),
- make_shared<GammaTransferFunction>(2.6)
+ make_shared<GammaTransferFunction>(2.6),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -81,7 +82,8 @@ ColourConversion::rec601_to_dcp()
Chromaticity(0.15, 0.06),
Chromaticity::D65(),
optional<Chromaticity>(),
- make_shared<GammaTransferFunction>(2.6)
+ make_shared<GammaTransferFunction>(2.6),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -97,7 +99,8 @@ ColourConversion::rec709_to_dcp()
Chromaticity(0.15, 0.06),
Chromaticity::D65(),
optional<Chromaticity>(),
- make_shared<GammaTransferFunction>(2.6)
+ make_shared<GammaTransferFunction>(2.6),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -113,7 +116,8 @@ ColourConversion::p3_to_dcp()
Chromaticity(0.15, 0.06),
Chromaticity(0.314, 0.351),
optional<Chromaticity>(),
- make_shared<GammaTransferFunction>(2.6)
+ make_shared<GammaTransferFunction>(2.6),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -132,7 +136,8 @@ ColourConversion::rec1886_to_dcp()
Chromaticity(0.15, 0.06),
Chromaticity::D65(),
optional<Chromaticity>(),
- make_shared<GammaTransferFunction>(2.6)
+ make_shared<GammaTransferFunction>(2.6),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -148,7 +153,8 @@ ColourConversion::rec2020_to_dcp()
Chromaticity(0.131, 0.046),
Chromaticity::D65(),
optional<Chromaticity>(),
- make_shared<GammaTransferFunction>(2.6)
+ make_shared<GammaTransferFunction>(2.6),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -165,7 +171,8 @@ ColourConversion::s_gamut3_to_dcp()
Chromaticity(0.100, -0.050),
Chromaticity::D65(),
optional<Chromaticity>(),
- make_shared<IdentityTransferFunction>()
+ make_shared<IdentityTransferFunction>(),
+ make_shared<GammaTransferFunction>(2.4)
);
return *c;
}
@@ -180,7 +187,8 @@ ColourConversion::ColourConversion(
Chromaticity blue,
Chromaticity white,
optional<Chromaticity> adjusted_white,
- shared_ptr<const TransferFunction> out_j2k
+ shared_ptr<const TransferFunction> out_j2k,
+ shared_ptr<const TransferFunction> out_mpeg2
)
: _in(in)
, _yuv_to_rgb(yuv_to_rgb)
@@ -190,6 +198,7 @@ ColourConversion::ColourConversion(
, _white(white)
, _adjusted_white(adjusted_white)
, _out_j2k(out_j2k)
+ , _out_mpeg2(out_mpeg2)
{
}
@@ -206,7 +215,10 @@ ColourConversion::about_equal(ColourConversion const & other, float epsilon) con
!_white.about_equal(other._white, epsilon) ||
(!_out_j2k && other._out_j2k) ||
(_out_j2k && !other._out_j2k) ||
- (_out_j2k && !_out_j2k->about_equal(other._out_j2k, epsilon))) {
+ (_out_j2k && !_out_j2k->about_equal(other._out_j2k, epsilon)) ||
+ (!_out_mpeg2 && other._out_mpeg2) ||
+ (_out_mpeg2 && !other._out_mpeg2) ||
+ (_out_mpeg2 && !_out_mpeg2->about_equal(other._out_mpeg2, epsilon))) {
return false;
}
diff --git a/src/colour_conversion.h b/src/colour_conversion.h
index 77163f8a..d96a66b9 100644
--- a/src/colour_conversion.h
+++ b/src/colour_conversion.h
@@ -83,7 +83,8 @@ public:
Chromaticity blue,
Chromaticity white,
boost::optional<Chromaticity> adjusted_white,
- std::shared_ptr<const TransferFunction> out_j2k
+ std::shared_ptr<const TransferFunction> out_j2k,
+ std::shared_ptr<const TransferFunction> out_mpeg2
);
std::shared_ptr<const TransferFunction> in() const {
@@ -119,6 +120,11 @@ public:
return _out_j2k;
}
+ /** Output transfer function when going to MPEG2 */
+ std::shared_ptr<const TransferFunction> out_mpeg2() const {
+ return _out_mpeg2;
+ }
+
void set_in(std::shared_ptr<const TransferFunction> f) {
_in = f;
}
@@ -155,6 +161,10 @@ public:
_out_j2k = f;
}
+ void set_out_mpeg2(std::shared_ptr<const TransferFunction> f) {
+ _out_mpeg2 = f;
+ }
+
bool about_equal(ColourConversion const & other, float epsilon) const;
boost::numeric::ublas::matrix<double> rgb_to_xyz() const;
@@ -184,6 +194,8 @@ protected:
* Probably an inverse gamma function, or something similar.
*/
std::shared_ptr<const TransferFunction> _out_j2k;
+ /** Output transfer function to be used when going to MPEG2 */
+ std::shared_ptr<const TransferFunction> _out_mpeg2;
};