@@ -55,6 +55,12 @@ namespace coder::HWY_NAMESPACE {
5555
5656 static const float sdrReferencePoint = 203 .0f ;
5757
58+ float half_to_float (const uint16_t x) {
59+ half f;
60+ f.data_ = x;
61+ return f;
62+ }
63+
5864 HWY_FAST_MATH_INLINE void
5965 TransferROWU16HFloats (uint16_t *data,
6066 const GamutTransferFunction function,
@@ -63,9 +69,9 @@ namespace coder::HWY_NAMESPACE {
6369 Eigen::Matrix3f *conversion,
6470 const float gamma,
6571 const bool useChromaticAdaptation) {
66- auto r = (float ) half (data[0 ]);
67- auto g = (float ) half (data[1 ]);
68- auto b = (float ) half (data[2 ]);
72+ auto r = (float ) half_to_float (data[0 ]);
73+ auto g = (float ) half_to_float (data[1 ]);
74+ auto b = (float ) half_to_float (data[2 ]);
6975
7076 const auto adopt = getBradfordAdaptation ();
7177
@@ -85,12 +91,8 @@ namespace coder::HWY_NAMESPACE {
8591 g = SMPTE428Eotf (g);
8692 b = SMPTE428Eotf (b);
8793 break ;
88- case Gamma2p2:
89- case Gamma2p8: {
90- float gammaValue = 2 .2f ;
91- if (function == Gamma2p8) {
92- gammaValue = 2 .8f ;
93- }
94+ case EOTF_GAMMA: {
95+ float gammaValue = gamma;
9496 r = gammaOtf (r, gammaValue);
9597 g = gammaOtf (g, gammaValue);
9698 b = gammaOtf (b, gammaValue);
@@ -213,15 +215,10 @@ namespace coder::HWY_NAMESPACE {
213215 g = SMPTE428Eotf (g);
214216 b = SMPTE428Eotf (b);
215217 break ;
216- case Gamma2p2:
217- case Gamma2p8: {
218- float gammaValue = 2 .2f ;
219- if (function == Gamma2p8) {
220- gammaValue = 2 .8f ;
221- }
222- r = gammaOtf (r, gammaValue);
223- g = gammaOtf (g, gammaValue);
224- b = gammaOtf (b, gammaValue);
218+ case EOTF_GAMMA: {
219+ r = gammaOtf (r, gamma);
220+ g = gammaOtf (g, gamma);
221+ b = gammaOtf (b, gamma);
225222 }
226223 break ;
227224 case EOTF_BT601: {
@@ -284,40 +281,40 @@ namespace coder::HWY_NAMESPACE {
284281 }
285282
286283 if (gammaCorrection == Rec2020) {
287- data[0 ] = (uint8_t ) clamp ((float ) bt2020GammaCorrection (r * maxColors) , 0 .0f ,
284+ data[0 ] = (uint8_t ) clamp ((float ) bt2020GammaCorrection (r) * maxColors, 0 .0f ,
288285 maxColors);
289- data[1 ] = (uint8_t ) clamp ((float ) bt2020GammaCorrection (g * maxColors) , 0 .0f ,
286+ data[1 ] = (uint8_t ) clamp ((float ) bt2020GammaCorrection (g) * maxColors, 0 .0f ,
290287 maxColors);
291- data[2 ] = (uint8_t ) clamp ((float ) bt2020GammaCorrection (b * maxColors) , 0 .0f ,
288+ data[2 ] = (uint8_t ) clamp ((float ) bt2020GammaCorrection (b) * maxColors, 0 .0f ,
292289 maxColors);
293290 } else if (gammaCorrection == DCIP3) {
294- data[0 ] = (uint8_t ) clamp ((float ) dciP3PQGammaCorrection (r * maxColors) , 0 .0f ,
291+ data[0 ] = (uint8_t ) clamp ((float ) dciP3PQGammaCorrection (r) * maxColors, 0 .0f ,
295292 maxColors);
296- data[1 ] = (uint8_t ) clamp ((float ) dciP3PQGammaCorrection (g * maxColors) , 0 .0f ,
293+ data[1 ] = (uint8_t ) clamp ((float ) dciP3PQGammaCorrection (g) * maxColors, 0 .0f ,
297294 maxColors);
298- data[2 ] = (uint8_t ) clamp ((float ) dciP3PQGammaCorrection (b * maxColors) , 0 .0f ,
295+ data[2 ] = (uint8_t ) clamp ((float ) dciP3PQGammaCorrection (b) * maxColors, 0 .0f ,
299296 maxColors);
300297 } else if (gammaCorrection == GAMMA) {
301298 const float gammaEval = 1 .f / gamma;
302- data[0 ] = (uint8_t ) clamp ((float ) gammaOtf (r * maxColors , gammaEval), 0 .0f ,
299+ data[0 ] = (uint8_t ) clamp ((float ) gammaOtf (r, gammaEval) * maxColors , 0 .0f ,
303300 maxColors);
304- data[1 ] = (uint8_t ) clamp ((float ) gammaOtf (g * maxColors , gammaEval), 0 .0f ,
301+ data[1 ] = (uint8_t ) clamp ((float ) gammaOtf (g, gammaEval) * maxColors , 0 .0f ,
305302 maxColors);
306- data[2 ] = (uint8_t ) clamp ((float ) gammaOtf (b * maxColors , gammaEval), 0 .0f ,
303+ data[2 ] = (uint8_t ) clamp ((float ) gammaOtf (b, gammaEval) * maxColors , 0 .0f ,
307304 maxColors);
308305 } else if (gammaCorrection == Rec709) {
309- data[0 ] = (uint8_t ) clamp ((float ) LinearITUR709ToITUR709 (r * maxColors) , 0 .0f ,
306+ data[0 ] = (uint8_t ) clamp ((float ) LinearITUR709ToITUR709 (r) * maxColors, 0 .0f ,
310307 maxColors);
311- data[1 ] = (uint8_t ) clamp ((float ) LinearITUR709ToITUR709 (g * maxColors) , 0 .0f ,
308+ data[1 ] = (uint8_t ) clamp ((float ) LinearITUR709ToITUR709 (g) * maxColors, 0 .0f ,
312309 maxColors);
313- data[2 ] = (uint8_t ) clamp ((float ) LinearITUR709ToITUR709 (b * maxColors) , 0 .0f ,
310+ data[2 ] = (uint8_t ) clamp ((float ) LinearITUR709ToITUR709 (b) * maxColors, 0 .0f ,
314311 maxColors);
315312 } else if (gammaCorrection == sRGB ) {
316- data[0 ] = (uint8_t ) clamp ((float ) LinearSRGBTosRGB (r * maxColors) , 0 .0f ,
313+ data[0 ] = (uint8_t ) clamp ((float ) LinearSRGBTosRGB (r) * maxColors, 0 .0f ,
317314 maxColors);
318- data[1 ] = (uint8_t ) clamp ((float ) LinearSRGBTosRGB (g * maxColors) , 0 .0f ,
315+ data[1 ] = (uint8_t ) clamp ((float ) LinearSRGBTosRGB (g) * maxColors, 0 .0f ,
319316 maxColors);
320- data[2 ] = (uint8_t ) clamp ((float ) LinearSRGBTosRGB (b * maxColors) , 0 .0f ,
317+ data[2 ] = (uint8_t ) clamp ((float ) LinearSRGBTosRGB (b) * maxColors, 0 .0f ,
321318 maxColors);
322319 } else {
323320 data[0 ] = (uint8_t ) clamp ((float ) r * maxColors, 0 .0f , maxColors);
@@ -410,12 +407,8 @@ namespace coder::HWY_NAMESPACE {
410407 pqHighG = SMPTE428Eotf (df32, gHigh32 );
411408 pqHighB = SMPTE428Eotf (df32, bHigh32);
412409 break ;
413- case Gamma2p2:
414- case Gamma2p8: {
415- float gammaValue = 2 .2f ;
416- if (function == Gamma2p8) {
417- gammaValue = 2 .8f ;
418- }
410+ case EOTF_GAMMA: {
411+ const float gammaValue = gamma;
419412 pqLowR = gammaOtf (df32, rLow32, gammaValue);
420413 pqLowG = gammaOtf (df32, gLow32 , gammaValue);
421414 pqLowB = gammaOtf (df32, bLow32, gammaValue);
@@ -610,12 +603,8 @@ namespace coder::HWY_NAMESPACE {
610603 pqG = SMPTE428Eotf (df32, G);
611604 pqB = SMPTE428Eotf (df32, B);
612605 break ;
613- case Gamma2p2:
614- case Gamma2p8: {
615- float gammaValue = 2 .2f ;
616- if (function == Gamma2p8) {
617- gammaValue = 2 .8f ;
618- }
606+ case EOTF_GAMMA: {
607+ const float gammaValue = gamma;
619608 pqR = gammaOtf (df32, R, gammaValue);
620609 pqG = gammaOtf (df32, G, gammaValue);
621610 pqB = gammaOtf (df32, B, gammaValue);
0 commit comments