X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fcolour_conversion.h;h=83ba3ad32ce9f750a7314318b1eb10f8df2cb020;hb=refs%2Ftags%2Fv1.8.4;hp=1e293f7884d6b03ab8b1b45f965958d7b7dc4b56;hpb=9e523d8a4062ad52330dff6c2ba50e54184c9bb2;p=libdcp.git diff --git a/src/colour_conversion.h b/src/colour_conversion.h index 1e293f78..83ba3ad3 100644 --- a/src/colour_conversion.h +++ b/src/colour_conversion.h @@ -1,66 +1,91 @@ /* - 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, + 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; } @@ -88,11 +113,11 @@ public: 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; } @@ -124,7 +149,7 @@ public: _adjusted_white = boost::optional (); } - void set_out (boost::shared_ptr f) { + void set_out (std::shared_ptr f) { _out = f; } @@ -138,10 +163,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 +179,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