Skip to content

Commit 1b5a58c

Browse files
committed
Quick hack to support 10 bit HDR AVIF using PQ transfer function...
https://en.wikipedia.org/wiki/Perceptual_quantizer
1 parent 2cad767 commit 1b5a58c

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

SDWebImageAVIFCoder/Classes/ColorSpace.m

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,29 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
395395
*shouldRelease = FALSE;
396396
return;
397397
}
398+
if(colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
399+
transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SMPTE2084) {
400+
static CGColorSpaceRef bt2020pq = NULL;
401+
static dispatch_once_t onceToken;
402+
dispatch_once(&onceToken, ^{
403+
CFStringRef colorSpaceName = NULL;
404+
if (@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)) {
405+
colorSpaceName = kCGColorSpaceITUR_2100_PQ;
406+
} else if (@available(macOS 10.15.4, iOS 13.4, tvOS 13.4, watchOS 6.2, *)) {
407+
colorSpaceName = kCGColorSpaceITUR_2020_PQ;
408+
} else if (@available(macOS 10.14.6, iOS 12.6, tvOS 12.0, watchOS 5.0, *)) {
409+
colorSpaceName = kCGColorSpaceITUR_2020_PQ_EOTF;
410+
}
411+
if (colorSpaceName) {
412+
bt2020pq = CGColorSpaceCreateWithName(colorSpaceName);
413+
} else {
414+
bt2020pq = defaultColorSpace;
415+
}
416+
});
417+
*ref = bt2020pq;
418+
*shouldRelease = FALSE;
419+
return;
420+
}
398421
if(colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
399422
transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_LINEAR) {
400423
static CGColorSpaceRef bt2020linear = NULL;

0 commit comments

Comments
 (0)