7#ifndef LCMSRGBP2020PQCOLORSPACETRANSFORMATION_H
8#define LCMSRGBP2020PQCOLORSPACETRANSFORMATION_H
29struct DstTraitsForSource {
39 typedef KoRgbF16Traits result;
44 typedef KoRgbF16Traits result;
48template <
typename src_channel_type,
49 typename dst_channel_type>
50struct RemoveSmpte2048Policy {
60template <
typename src_channel_type,
61 typename dst_channel_type>
62struct ApplySmpte2048Policy {
72template <
typename src_channel_type,
73 typename dst_channel_type>
82template<
typename SrcCSTraits,
84 template<
typename,
typename>
class Policy>
98 void transform(
const quint8 *src, quint8 *dst, qint32 nPixels)
const override {
101 const typename SrcCSTraits::Pixel *srcPixel =
reinterpret_cast<const typename SrcCSTraits::Pixel*
>(src);
102 typename DstCSTraits::Pixel *dstPixel =
reinterpret_cast<typename DstCSTraits::Pixel*
>(dst);
104 typedef typename SrcCSTraits::channels_type src_channel_type;
105 typedef typename DstCSTraits::channels_type dst_channel_type;
106 typedef Policy<src_channel_type, dst_channel_type> ConcretePolicy;
108 for (
int i = 0; i < nPixels; i++) {
109 dstPixel->red = ConcretePolicy::process(srcPixel->red);
110 dstPixel->green = ConcretePolicy::process(srcPixel->green);
111 dstPixel->blue = ConcretePolicy::process(srcPixel->blue);
123template<class ParentColorSpace, class DstColorSpaceTraits = typename DstTraitsForSource<typename ParentColorSpace::ColorSpaceTraits>::result>
130 "High Dynamic Range UHDTV Wide Color Gamut Display (Rec. 2020) - SMPTE ST 2084 PQ EOTF",
133 "Rec2020-elle-V4-g10.icc")
140 KoColorConversionTransformation::ConversionFlags conversionFlags)
const override
143 typename ParentColorSpace::ColorSpaceTraits,
145 RemoveSmpte2048Policy>(srcColorSpace,
152template<class ParentColorSpace, class DstColorSpaceTraits = typename DstTraitsForSource<typename ParentColorSpace::ColorSpaceTraits>::result>
159 "Rec2020-elle-V4-g10.icc",
162 "High Dynamic Range UHDTV Wide Color Gamut Display (Rec. 2020) - SMPTE ST 2084 PQ EOTF")
169 KoColorConversionTransformation::ConversionFlags conversionFlags)
const override
173 typename ParentColorSpace::ColorSpaceTraits,
174 ApplySmpte2048Policy>(srcColorSpace,
181template<
class ParentColorSpace,
class DstColorSpaceTraits>
188 "High Dynamic Range UHDTV Wide Color Gamut Display (Rec. 2020) - SMPTE ST 2084 PQ EOTF",
191 "High Dynamic Range UHDTV Wide Color Gamut Display (Rec. 2020) - SMPTE ST 2084 PQ EOTF")
199 KoColorConversionTransformation::ConversionFlags conversionFlags)
const override
202 typename ParentColorSpace::ColorSpaceTraits,
204 NoopPolicy>(srcColorSpace,
float value(const T *src, size_t ch)
KoID colorDepthIdForChannelType()
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
ALWAYS_INLINE float applySmpte2048Curve(float x) noexcept
ALWAYS_INLINE float removeSmpte2048Curve(float x) noexcept
static _Tdst scaleToA(_T a)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
void transform(const quint8 *src, quint8 *dst, qint32 nPixels) const override
ApplyRgbShaper(const KoColorSpace *srcCs, const KoColorSpace *dstCs, Intent renderingIntent, ConversionFlags conversionFlags)