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=939b0d2bebd7fb10bfd54b7f87b51b483eb87a6a;hpb=fa1dddf081a35fde2479f6a23088b608ee956437;p=libdcp.git diff --git a/src/colour_conversion.h b/src/colour_conversion.h index 939b0d2b..83ba3ad3 100644 --- a/src/colour_conversion.h +++ b/src/colour_conversion.h @@ -1,58 +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) + */ 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; } @@ -79,12 +112,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; } @@ -115,8 +148,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; } @@ -130,9 +163,14 @@ 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: - boost::shared_ptr _in; + /** Input transfer function (probably a gamma function, or something similar) */ + std::shared_ptr _in; + /** Conversion to use from YUV to RGB */ YUVToRGB _yuv_to_rgb; Chromaticity _red; Chromaticity _green; @@ -140,9 +178,12 @@ protected: Chromaticity _white; /** White point that we are adjusting to using a Bradford matrix */ boost::optional _adjusted_white; - boost::shared_ptr _out; + /** Output transfer function (probably an inverse gamma function, or something similar) */ + std::shared_ptr _out; }; + } + #endif