@@ -418,6 +418,28 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
418418 *shouldRelease = FALSE ;
419419 return ;
420420 }
421+ if (colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
422+ transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_HLG) {
423+ static CGColorSpaceRef bt2020hlg = NULL ;
424+ static dispatch_once_t onceToken;
425+ dispatch_once (&onceToken, ^{
426+ CFStringRef colorSpaceName = NULL ;
427+ if (@available (macOS 11.0 , iOS 14.0 , tvOS 14.0 , watchOS 7.0 , *)) {
428+ colorSpaceName = kCGColorSpaceITUR_2100_HLG ;
429+ } else if (@available (macOS 10.15.6 , iOS 12.6 , tvOS 12.0 , watchOS 5.0 , *)) {
430+ colorSpaceName = kCGColorSpaceITUR_2020_HLG ;
431+ }
432+ if (colorSpaceName) {
433+ bt2020hlg = CGColorSpaceCreateWithName (colorSpaceName);
434+ } else {
435+ bt2020hlg = defaultColorSpace;
436+ }
437+ });
438+
439+ *ref = bt2020hlg;
440+ *shouldRelease = FALSE ;
441+ return ;
442+ }
421443 if (colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
422444 transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_LINEAR) {
423445 static CGColorSpaceRef bt2020linear = NULL ;
@@ -448,6 +470,27 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
448470 *shouldRelease = FALSE ;
449471 return ;
450472 }
473+ if (colorPrimaries == AVIF_COLOR_PRIMARIES_SMPTE432 /* Display P3 */ &&
474+ transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SMPTE2084) {
475+ static CGColorSpaceRef p3pq = NULL ;
476+ static dispatch_once_t onceToken;
477+ dispatch_once (&onceToken, ^{
478+ CFStringRef colorSpaceName = NULL ;
479+ if (@available (macOS 10.15.4 , iOS 13.4 , tvOS 13.4 , watchOS 6.2 , *)) {
480+ colorSpaceName = kCGColorSpaceDisplayP3_PQ ;
481+ } else if (@available (macOS 10.14.6 , iOS 12.6 , tvOS 12.0 , watchOS 5.0 , *)) {
482+ colorSpaceName = kCGColorSpaceDisplayP3_PQ_EOTF ;
483+ }
484+ if (colorSpaceName) {
485+ p3pq = CGColorSpaceCreateWithName (colorSpaceName);
486+ } else {
487+ p3pq = defaultColorSpace;
488+ }
489+ });
490+ *ref = p3pq;
491+ *shouldRelease = FALSE ;
492+ return ;
493+ }
451494 if (colorPrimaries == AVIF_COLOR_PRIMARIES_SMPTE432 /* Display P3 */ &&
452495 transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_HLG) {
453496 static CGColorSpaceRef p3hlg = NULL ;
0 commit comments