diff --git a/SDWebImageAVIFCoder/Classes/ColorSpace.m b/SDWebImageAVIFCoder/Classes/ColorSpace.m index fb3ead8..10d7746 100644 --- a/SDWebImageAVIFCoder/Classes/ColorSpace.m +++ b/SDWebImageAVIFCoder/Classes/ColorSpace.m @@ -395,6 +395,29 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul *shouldRelease = FALSE; return; } + if(colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 && + transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SMPTE2084) { + static CGColorSpaceRef pq2020 = NULL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + CFStringRef colorSpaceName = NULL; + if (@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)) { + colorSpaceName = kCGColorSpaceITUR_2100_PQ; + } else if (@available(macOS 10.15.4, iOS 13.4, tvOS 13.4, watchOS 6.2, *)) { + colorSpaceName = kCGColorSpaceITUR_2020_PQ; + } else if (@available(macOS 10.14.6, iOS 12.6, tvOS 12.0, watchOS 5.0, *)) { + colorSpaceName = kCGColorSpaceITUR_2020_PQ_EOTF; + } + if (colorSpaceName) { + pq2020 = CGColorSpaceCreateWithName(colorSpaceName); + } else { + pq2020 = defaultColorSpace; + } + }); + *ref = pq2020; + *shouldRelease = FALSE; + return; + } if(colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 && transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_LINEAR) { static CGColorSpaceRef bt2020linear = NULL;