X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fcolour_conversion.h;h=8501699a4af67ff5ffb1f91d148a13ddaa99de85;hb=a8d2013b99626ed08e7c80e6e58cf234b53b0c4d;hp=1f824c81329f22e4e72fa95edd627f2f129d520d;hpb=91563c058a8d2207437a482d4cc63c5a166a26f4;p=libdcp.git diff --git a/src/colour_conversion.h b/src/colour_conversion.h index 1f824c81..8501699a 100644 --- a/src/colour_conversion.h +++ b/src/colour_conversion.h @@ -1,66 +1,92 @@ /* - Copyright (C) 2014-2015 Carl Hetherington + Copyright (C) 2014-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of libdcp. + + libdcp is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + libdcp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - + along with libdcp. If not, see . + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. */ + /** @file src/colour_conversion.h * @brief ColourConversion class. */ + #ifndef DCP_COLOUR_CONVERSION_H #define DCP_COLOUR_CONVERSION_H + #include "chromaticity.h" -#include +#include +#if BOOST_VERSION >= 106400 +#include +#endif #include #include + namespace dcp { + class TransferFunction; -enum YUVToRGB { - YUV_TO_RGB_REC601, - YUV_TO_RGB_REC709, - YUV_TO_RGB_COUNT + +enum class YUVToRGB { + REC601, + REC709, + REC2020, + COUNT }; + /** @class ColourConversion * @brief A representation of all the parameters involved the colourspace conversion - * of a YUV image to XYZ (via RGB). + * of a YUV image to XYZ (via RGB) */ class ColourConversion { public: ColourConversion () + : _yuv_to_rgb (YUVToRGB::REC601) {} - + ColourConversion ( - boost::shared_ptr in, + std::shared_ptr in, YUVToRGB yuv_to_rgb, Chromaticity red, Chromaticity green, Chromaticity blue, Chromaticity white, boost::optional adjusted_white, - boost::shared_ptr out + std::shared_ptr out ); - boost::shared_ptr in () const { + std::shared_ptr in () const { return _in; } @@ -87,12 +113,12 @@ public: boost::optional adjusted_white () const { return _adjusted_white; } - - boost::shared_ptr out () const { + + std::shared_ptr out () const { return _out; } - void set_in (boost::shared_ptr f) { + void set_in (std::shared_ptr f) { _in = f; } @@ -123,8 +149,8 @@ public: void unset_adjusted_white () { _adjusted_white = boost::optional (); } - - void set_out (boost::shared_ptr f) { + + void set_out (std::shared_ptr f) { _out = f; } @@ -138,10 +164,13 @@ public: static ColourConversion const & rec601_to_xyz (); static ColourConversion const & rec709_to_xyz (); static ColourConversion const & p3_to_xyz (); + static ColourConversion const & rec1886_to_xyz (); + static ColourConversion const & rec2020_to_xyz (); + static ColourConversion const & s_gamut3_to_xyz (); protected: /** Input transfer function (probably a gamma function, or something similar) */ - boost::shared_ptr _in; + std::shared_ptr _in; /** Conversion to use from YUV to RGB */ YUVToRGB _yuv_to_rgb; Chromaticity _red; @@ -151,9 +180,11 @@ protected: /** White point that we are adjusting to using a Bradford matrix */ boost::optional _adjusted_white; /** Output transfer function (probably an inverse gamma function, or something similar) */ - boost::shared_ptr _out; + std::shared_ptr _out; }; + } + #endif