Skip to content

Commit acf8923

Browse files
committed
Hack the bt2020 hlg and p3 pq as well
1 parent 1b5a58c commit acf8923

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

SDWebImageAVIFCoder/Classes/ColorSpace.m

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)