@@ -164,45 +164,37 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
164
164
}
165
165
}
166
166
CGColorSpaceRef SDAVIFCreateColorSpaceMono (avifColorPrimaries const colorPrimaries, avifTransferCharacteristics const transferCharacteristics) {
167
- if (@available (macOS 10.10 , iOS 8.0 , tvOS 8.0 , *)) {
168
- vImage_Error err;
169
- vImageWhitePoint white;
170
- vImageTransferFunction transfer;
171
- CalcWhitePoint (colorPrimaries, &white);
172
- CalcTransferFunction (transferCharacteristics, &transfer);
173
- CGColorSpaceRef colorSpace = vImageCreateMonochromeColorSpaceWithWhitePointAndTransferFunction (&white, &transfer, kCGRenderingIntentDefault , kvImagePrintDiagnosticsToConsole, &err);
174
- if (err != kvImageNoError) {
175
- NSLog (@" [BUG] Failed to create monochrome color space: %ld " , err);
176
- if (colorSpace != NULL ) {
177
- CGColorSpaceRelease (colorSpace);
178
- }
179
- return NULL ;
167
+ vImage_Error err;
168
+ vImageWhitePoint white;
169
+ vImageTransferFunction transfer;
170
+ CalcWhitePoint (colorPrimaries, &white);
171
+ CalcTransferFunction (transferCharacteristics, &transfer);
172
+ CGColorSpaceRef colorSpace = vImageCreateMonochromeColorSpaceWithWhitePointAndTransferFunction (&white, &transfer, kCGRenderingIntentDefault , kvImagePrintDiagnosticsToConsole, &err);
173
+ if (err != kvImageNoError) {
174
+ NSLog (@" [BUG] Failed to create monochrome color space: %ld " , err);
175
+ if (colorSpace != NULL ) {
176
+ CGColorSpaceRelease (colorSpace);
180
177
}
181
- return colorSpace;
182
- }else {
183
178
return NULL ;
184
179
}
180
+ return colorSpace;
185
181
}
186
182
187
183
CGColorSpaceRef SDAVIFCreateColorSpaceRGB (avifColorPrimaries const colorPrimaries, avifTransferCharacteristics const transferCharacteristics) {
188
- if (@available (macOS 10.10 , iOS 8.0 , tvOS 8.0 , *)) {
189
- vImage_Error err;
190
- vImageRGBPrimaries primaries;
191
- vImageTransferFunction transfer;
192
- CalcRGBPrimaries (colorPrimaries, &primaries);
193
- CalcTransferFunction (transferCharacteristics, &transfer);
194
- CGColorSpaceRef colorSpace = vImageCreateRGBColorSpaceWithPrimariesAndTransferFunction (&primaries, &transfer, kCGRenderingIntentDefault , kvImagePrintDiagnosticsToConsole, &err);
195
- if (err != kvImageNoError) {
196
- NSLog (@" [BUG] Failed to create monochrome color space: %ld " , err);
197
- if (colorSpace != NULL ) {
198
- CGColorSpaceRelease (colorSpace);
199
- }
200
- return NULL ;
184
+ vImage_Error err;
185
+ vImageRGBPrimaries primaries;
186
+ vImageTransferFunction transfer;
187
+ CalcRGBPrimaries (colorPrimaries, &primaries);
188
+ CalcTransferFunction (transferCharacteristics, &transfer);
189
+ CGColorSpaceRef colorSpace = vImageCreateRGBColorSpaceWithPrimariesAndTransferFunction (&primaries, &transfer, kCGRenderingIntentDefault , kvImagePrintDiagnosticsToConsole, &err);
190
+ if (err != kvImageNoError) {
191
+ NSLog (@" [BUG] Failed to create monochrome color space: %ld " , err);
192
+ if (colorSpace != NULL ) {
193
+ CGColorSpaceRelease (colorSpace);
201
194
}
202
- return colorSpace;
203
- }else {
204
195
return NULL ;
205
196
}
197
+ return colorSpace;
206
198
}
207
199
208
200
void SDAVIFCalcColorSpaceMono (avifImage * avif, CGColorSpaceRef* ref, BOOL * shouldRelease) {
@@ -214,7 +206,7 @@ void SDAVIFCalcColorSpaceMono(avifImage * avif, CGColorSpaceRef* ref, BOOL* shou
214
206
});
215
207
}
216
208
if (avif->icc .data && avif->icc .size ) {
217
- if (@available (macOS 10.12 , iOS 10.0 , tvOS 10.0 , *)) {
209
+ if (@available (macOS 10.12 , iOS 10.0 , tvOS 10.0 , watchOS 3.0 , *)) {
218
210
CFDataRef iccData = CFDataCreate (kCFAllocatorDefault , avif->icc .data , avif->icc .size );
219
211
*ref = CGColorSpaceCreateWithICCData (iccData);
220
212
CFRelease (iccData);
@@ -312,7 +304,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
312
304
});
313
305
}
314
306
if (avif->icc .data && avif->icc .size ) {
315
- if (@available (macOS 10.12 , iOS 10.0 , tvOS 10.0 , *)) {
307
+ if (@available (macOS 10.12 , iOS 10.0 , tvOS 10.0 , watchOS 3.0 , *)) {
316
308
CFDataRef iccData = CFDataCreate (kCFAllocatorDefault , avif->icc .data , avif->icc .size );
317
309
*ref = CGColorSpaceCreateWithICCData (iccData);
318
310
CFRelease (iccData);
@@ -339,7 +331,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
339
331
static CGColorSpaceRef bt709 = NULL ;
340
332
static dispatch_once_t onceToken;
341
333
dispatch_once (&onceToken, ^{
342
- if (@available (macOS 10.11 , iOS 9.0 , tvOS 9.0 , *)) {
334
+ if (@available (macOS 10.11 , iOS 9.0 , tvOS 9.0 , watchOS 2.0 , *)) {
343
335
bt709 = CGColorSpaceCreateWithName (kCGColorSpaceITUR_709 );
344
336
} else {
345
337
bt709 = defaultColorSpace;
@@ -354,7 +346,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
354
346
static CGColorSpaceRef sRGB = NULL ;
355
347
static dispatch_once_t onceToken;
356
348
dispatch_once (&onceToken, ^{
357
- if (@available (macOS 10.5 , iOS 9.0 , tvOS 9.0 , *)) {
349
+ if (@available (macOS 10.5 , iOS 9.0 , tvOS 9.0 , watchOS 2.0 , *)) {
358
350
sRGB = CGColorSpaceCreateWithName (kCGColorSpaceSRGB );
359
351
} else {
360
352
sRGB = defaultColorSpace;
@@ -369,7 +361,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
369
361
static CGColorSpaceRef sRGBlinear = NULL ;
370
362
static dispatch_once_t onceToken;
371
363
dispatch_once (&onceToken, ^{
372
- if (@available (macOS 10.12 , iOS 10.0 , tvOS 10.0 , *)) {
364
+ if (@available (macOS 10.12 , iOS 10.0 , tvOS 10.0 , watchOS 3.0 , *)) {
373
365
sRGBlinear = CGColorSpaceCreateWithName (kCGColorSpaceLinearSRGB );
374
366
} else {
375
367
sRGBlinear = defaultColorSpace;
@@ -385,7 +377,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
385
377
static CGColorSpaceRef bt2020 = NULL ;
386
378
static dispatch_once_t onceToken;
387
379
dispatch_once (&onceToken, ^{
388
- if (@available (macOS 10.11 , iOS 9.0 , tvOS 9.0 , *)) {
380
+ if (@available (macOS 10.11 , iOS 9.0 , tvOS 9.0 , watchOS 2.0 , *)) {
389
381
bt2020 = CGColorSpaceCreateWithName (kCGColorSpaceITUR_2020 );
390
382
} else {
391
383
bt2020 = defaultColorSpace;
@@ -395,12 +387,57 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
395
387
*shouldRelease = FALSE ;
396
388
return ;
397
389
}
390
+ if (colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
391
+ transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SMPTE2084) {
392
+ static CGColorSpaceRef bt2020pq = NULL ;
393
+ static dispatch_once_t onceToken;
394
+ dispatch_once (&onceToken, ^{
395
+ CFStringRef colorSpaceName = NULL ;
396
+ if (@available (macOS 11.0 , iOS 14.0 , tvOS 14.0 , watchOS 7.0 , *)) {
397
+ colorSpaceName = kCGColorSpaceITUR_2100_PQ ;
398
+ } else if (@available (macOS 10.15.4 , iOS 13.4 , tvOS 13.4 , watchOS 6.2 , *)) {
399
+ colorSpaceName = kCGColorSpaceITUR_2020_PQ ;
400
+ } else if (@available (macOS 10.14.6 , iOS 12.6 , tvOS 12.0 , watchOS 5.0 , *)) {
401
+ colorSpaceName = kCGColorSpaceITUR_2020_PQ_EOTF ;
402
+ }
403
+ if (colorSpaceName) {
404
+ bt2020pq = CGColorSpaceCreateWithName (colorSpaceName);
405
+ } else {
406
+ bt2020pq = defaultColorSpace;
407
+ }
408
+ });
409
+ *ref = bt2020pq;
410
+ *shouldRelease = FALSE ;
411
+ return ;
412
+ }
413
+ if (colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
414
+ transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_HLG) {
415
+ static CGColorSpaceRef bt2020hlg = NULL ;
416
+ static dispatch_once_t onceToken;
417
+ dispatch_once (&onceToken, ^{
418
+ CFStringRef colorSpaceName = NULL ;
419
+ if (@available (macOS 11.0 , iOS 14.0 , tvOS 14.0 , watchOS 7.0 , *)) {
420
+ colorSpaceName = kCGColorSpaceITUR_2100_HLG ;
421
+ } else if (@available (macOS 10.15.6 , iOS 12.6 , tvOS 12.0 , watchOS 5.0 , *)) {
422
+ colorSpaceName = kCGColorSpaceITUR_2020_HLG ;
423
+ }
424
+ if (colorSpaceName) {
425
+ bt2020hlg = CGColorSpaceCreateWithName (colorSpaceName);
426
+ } else {
427
+ bt2020hlg = defaultColorSpace;
428
+ }
429
+ });
430
+
431
+ *ref = bt2020hlg;
432
+ *shouldRelease = FALSE ;
433
+ return ;
434
+ }
398
435
if (colorPrimaries == AVIF_COLOR_PRIMARIES_BT2020 &&
399
436
transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_LINEAR) {
400
437
static CGColorSpaceRef bt2020linear = NULL ;
401
438
static dispatch_once_t onceToken;
402
439
dispatch_once (&onceToken, ^{
403
- if (@available (macOS 10.14.3 , iOS 12.3 , tvOS 12.3 , *)) {
440
+ if (@available (macOS 10.14.3 , iOS 12.3 , tvOS 12.3 , watchOS 5.0 , *)) {
404
441
bt2020linear = CGColorSpaceCreateWithName (kCGColorSpaceExtendedLinearITUR_2020 );
405
442
} else {
406
443
bt2020linear = defaultColorSpace;
@@ -415,7 +452,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
415
452
static CGColorSpaceRef p3 = NULL ;
416
453
static dispatch_once_t onceToken;
417
454
dispatch_once (&onceToken, ^{
418
- if (@available (macOS 10.11.2 , iOS 9.3 , tvOS 9.3 , *)) {
455
+ if (@available (macOS 10.11.2 , iOS 9.3 , tvOS 9.3 , watchOS 2.2 , *)) {
419
456
p3 = CGColorSpaceCreateWithName (kCGColorSpaceDisplayP3 );
420
457
} else {
421
458
p3 = defaultColorSpace;
@@ -425,12 +462,33 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
425
462
*shouldRelease = FALSE ;
426
463
return ;
427
464
}
465
+ if (colorPrimaries == AVIF_COLOR_PRIMARIES_SMPTE432 /* Display P3 */ &&
466
+ transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_SMPTE2084) {
467
+ static CGColorSpaceRef p3pq = NULL ;
468
+ static dispatch_once_t onceToken;
469
+ dispatch_once (&onceToken, ^{
470
+ CFStringRef colorSpaceName = NULL ;
471
+ if (@available (macOS 10.15.4 , iOS 13.4 , tvOS 13.4 , watchOS 6.2 , *)) {
472
+ colorSpaceName = kCGColorSpaceDisplayP3_PQ ;
473
+ } else if (@available (macOS 10.14.6 , iOS 12.6 , tvOS 12.0 , watchOS 5.0 , *)) {
474
+ colorSpaceName = kCGColorSpaceDisplayP3_PQ_EOTF ;
475
+ }
476
+ if (colorSpaceName) {
477
+ p3pq = CGColorSpaceCreateWithName (colorSpaceName);
478
+ } else {
479
+ p3pq = defaultColorSpace;
480
+ }
481
+ });
482
+ *ref = p3pq;
483
+ *shouldRelease = FALSE ;
484
+ return ;
485
+ }
428
486
if (colorPrimaries == AVIF_COLOR_PRIMARIES_SMPTE432 /* Display P3 */ &&
429
487
transferCharacteristics == AVIF_TRANSFER_CHARACTERISTICS_HLG) {
430
488
static CGColorSpaceRef p3hlg = NULL ;
431
489
static dispatch_once_t onceToken;
432
490
dispatch_once (&onceToken, ^{
433
- if (@available (macOS 10.14.6 , iOS 13.0 , tvOS 13.0 , *)) {
491
+ if (@available (macOS 10.14.6 , iOS 13.0 , tvOS 13.0 , watchOS 5.0 , *)) {
434
492
p3hlg = CGColorSpaceCreateWithName (kCGColorSpaceDisplayP3_HLG );
435
493
} else {
436
494
p3hlg = defaultColorSpace;
@@ -446,7 +504,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
446
504
static CGColorSpaceRef p3linear = NULL ;
447
505
static dispatch_once_t onceToken;
448
506
dispatch_once (&onceToken, ^{
449
- if (@available (macOS 10.14.3 , iOS 12.3 , tvOS 12.3 , *)) {
507
+ if (@available (macOS 10.14.3 , iOS 12.3 , tvOS 12.3 , watchOS 5.0 , *)) {
450
508
p3linear = CGColorSpaceCreateWithName (kCGColorSpaceExtendedLinearDisplayP3 );
451
509
} else {
452
510
p3linear = defaultColorSpace;
0 commit comments