@@ -81,7 +81,6 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
81
81
uint32_t scaledHeight,
82
82
PreferredColorConfig javaColorSpace,
83
83
ScaleMode javaScaleMode,
84
- CurveToneMapper toneMapper,
85
84
int scalingQuality) {
86
85
std::lock_guard guard (this ->mutex );
87
86
if (!this ->isBufferAttached ) {
@@ -318,7 +317,7 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
318
317
if (!iccProfile.empty ()) {
319
318
convertUseICC (imageStore, stride, imageWidth, imageHeight, iccProfile.data (),
320
319
iccProfile.size (),
321
- isImageRequires64Bit);
320
+ isImageRequires64Bit, bitDepth );
322
321
} else if (transferCharacteristics != AVIF_TRANSFER_CHARACTERISTICS_UNSPECIFIED
323
322
|| colorPrimaries != AVIF_COLOR_PRIMARIES_UNSPECIFIED) {
324
323
Eigen::Matrix<float , 3 , 2 > primaries;
@@ -341,82 +340,80 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
341
340
342
341
Eigen::Matrix3f conversion = destinationProfile.inverse () * sourceProfile;
343
342
343
+ ToneMapping toneMapping = ToneMapping::Rec2408;
344
+
344
345
if (transferCharacteristics !=
345
346
AVIF_TRANSFER_CHARACTERISTICS_HLG &&
346
347
transferCharacteristics != AVIF_TRANSFER_CHARACTERISTICS_PQ) {
347
- toneMapper = TONE_SKIP ;
348
+ toneMapping = ToneMapping::Skip ;
348
349
}
349
350
350
- TransferFunction forwardTrc = TransferFunction ::Srgb;
351
+ FfiTrc transferFfi = FfiTrc ::Srgb;
351
352
352
353
if (transferCharacteristics ==
353
354
AVIF_TRANSFER_CHARACTERISTICS_HLG) {
354
- forwardTrc = TransferFunction ::Hlg;
355
+ transferFfi = FfiTrc ::Hlg;
355
356
} else if (transferCharacteristics ==
356
357
AVIF_TRANSFER_CHARACTERISTICS_SMPTE428) {
357
- forwardTrc = TransferFunction ::Smpte428;
358
+ transferFfi = FfiTrc ::Smpte428;
358
359
} else if (transferCharacteristics ==
359
360
AVIF_TRANSFER_CHARACTERISTICS_PQ) {
360
- forwardTrc = TransferFunction::Pq ;
361
+ transferFfi = FfiTrc::Smpte2084 ;
361
362
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_LINEAR) {
362
- forwardTrc = TransferFunction ::Linear;
363
+ transferFfi = FfiTrc ::Linear;
363
364
} else if (transferCharacteristics ==
364
365
AVIF_TRANSFER_CHARACTERISTICS_BT470M) {
365
- forwardTrc = TransferFunction::Gamma2p2 ;
366
+ transferFfi = FfiTrc::Bt470M ;
366
367
} else if (transferCharacteristics ==
367
368
AVIF_TRANSFER_CHARACTERISTICS_BT470BG) {
368
- forwardTrc = TransferFunction::Gamma2p8 ;
369
+ transferFfi = FfiTrc::Bt470Bg ;
369
370
} else if (transferCharacteristics ==
370
371
AVIF_TRANSFER_CHARACTERISTICS_BT601) {
371
- forwardTrc = TransferFunction::Itur709 ;
372
+ transferFfi = FfiTrc::Bt709 ;
372
373
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_BT709) {
373
- forwardTrc = TransferFunction::Itur709 ;
374
+ transferFfi = FfiTrc::Bt709 ;
374
375
} else if (transferCharacteristics ==
375
376
AVIF_TRANSFER_CHARACTERISTICS_BT2020_10BIT ||
376
377
transferCharacteristics ==
377
378
AVIF_TRANSFER_CHARACTERISTICS_BT2020_12BIT) {
378
- forwardTrc = TransferFunction::Itur709 ;
379
+ transferFfi = FfiTrc::Bt709 ;
379
380
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SMPTE240) {
380
- forwardTrc = TransferFunction ::Smpte240;
381
+ transferFfi = FfiTrc ::Smpte240;
381
382
} else if (transferCharacteristics ==
382
383
AVIF_TRANSFER_CHARACTERISTICS_LOG100) {
383
- forwardTrc = TransferFunction ::Log100;
384
+ transferFfi = FfiTrc ::Log100;
384
385
} else if (transferCharacteristics ==
385
386
AVIF_TRANSFER_CHARACTERISTICS_LOG100_SQRT10) {
386
- forwardTrc = TransferFunction::Log100Sqrt10 ;
387
+ transferFfi = FfiTrc::Log100sqrt10 ;
387
388
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SRGB) {
388
- forwardTrc = TransferFunction ::Srgb;
389
+ transferFfi = FfiTrc ::Srgb;
389
390
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_IEC61966) {
390
- forwardTrc = TransferFunction ::Iec61966;
391
+ transferFfi = FfiTrc ::Iec61966;
391
392
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_BT1361) {
392
- forwardTrc = TransferFunction ::Bt1361;
393
+ transferFfi = FfiTrc ::Bt1361;
393
394
} else if (transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_UNSPECIFIED) {
394
- forwardTrc = TransferFunction ::Srgb;
395
+ transferFfi = FfiTrc ::Srgb;
395
396
}
396
397
397
- ITURColorCoefficients coeffs = colorPrimariesComputeYCoeffs (primaries, whitePoint);
398
-
399
- const float matrix[9 ] = {
400
- conversion (0 , 0 ), conversion (0 , 1 ), conversion (0 , 2 ),
401
- conversion (1 , 0 ), conversion (1 , 1 ), conversion (1 , 2 ),
402
- conversion (2 , 0 ), conversion (2 , 1 ), conversion (2 , 2 ),
398
+ const float cPrimaries[6 ] = {
399
+ imagePrimaries[0 ], imagePrimaries[1 ],
400
+ imagePrimaries[2 ], imagePrimaries[3 ],
401
+ imagePrimaries[4 ], imagePrimaries[5 ]
402
+ };
403
+ const float wp[2 ] = {
404
+ whitePoint (0 ), whitePoint (1 )
403
405
};
404
406
405
407
if (isImageRequires64Bit) {
406
- applyColorMatrix16Bit (reinterpret_cast <uint16_t *>(imageStore.data ()),
407
- stride,
408
- imageWidth,
409
- imageHeight,
410
- bitDepth,
411
- matrix,
412
- forwardTrc,
413
- TransferFunction::Srgb,
414
- toneMapper,
415
- coeffs, intensityTarget);
408
+ apply_tone_mapping_rgba16 (
409
+ reinterpret_cast <uint16_t *>(imageStore.data ()), stride, bitDepth,
410
+ imageWidth, imageHeight, cPrimaries, wp, transferFfi, toneMapping, intensityTarget
411
+ );
416
412
} else {
417
- applyColorMatrix (reinterpret_cast <uint8_t *>(imageStore.data ()), stride, imageWidth,
418
- imageHeight, matrix, forwardTrc, TransferFunction::Srgb, toneMapper,
419
- coeffs, intensityTarget);
413
+ apply_tone_mapping_rgba8 (
414
+ reinterpret_cast <uint8_t *>(imageStore.data ()), stride,
415
+ imageWidth, imageHeight, cPrimaries, wp, transferFfi, toneMapping, intensityTarget
416
+ );
420
417
}
421
418
422
419
}
0 commit comments