Skip to content

Commit 2f86c21

Browse files
authored
Merge pull request #20 from SDWebImage/fix/support-libavif-v0.7.3
Fix/support libavif v0.7.3
2 parents 08ca46f + a3c8104 commit 2f86c21

File tree

3 files changed

+35
-26
lines changed

3 files changed

+35
-26
lines changed

.github/workflows/check-image-decoding.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ jobs:
3232
CMD="../Example/CLI.xcarchive/Products/usr/local/bin/SDWebImageAVIFCoder_Example CLI"
3333
for file in $(find . -name \*.avif); do
3434
file=$(basename ${file})
35+
if (echo ${file} | grep "profile"); then
36+
# FIXME(ledyba-z): https://github.com/SDWebImage/SDWebImageAVIFCoder/issues/21
37+
echo "Ignore: ${file}"
38+
continue
39+
fi
3540
"${CMD}" "${file}" "./decoded/${file}.png"
3641
done
3742
- name: Upload result
@@ -53,6 +58,10 @@ jobs:
5358
# FIXME(ledyba-z): Check them.
5459
echo "Ignore: ${file}"
5560
continue
61+
elif (echo ${file} | grep "profile"); then
62+
# FIXME(ledyba-z): https://github.com/SDWebImage/SDWebImageAVIFCoder/issues/21
63+
echo "Ignore: ${file}"
64+
continue
5665
else
5766
orig=$(cat Makefile | grep "^${file}" | sed "s/^${file}: \(.*\)$/\1/")
5867
score=$(compare -metric PSNR "${orig}" "decoded/${file}.png" NULL: 2>&1 || true)

Example/Tests/Tests.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
static UInt16 kBlue16[] = {0,0,65535};
2828
static UInt16 kSpecial16[] = {0xe4 << 8,0x7a << 8,0x8c << 8};
2929

30-
static avifNclxColourPrimaries const kNumPrimaries = AVIF_NCLX_COLOUR_PRIMARIES_EBU3213E;
31-
static avifNclxTransferCharacteristics const kNumTransfers = AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2100_HLG;
30+
static avifNclxColourPrimaries const kNumPrimaries = AVIF_NCLX_COLOUR_PRIMARIES_EBU3213;
31+
static avifNclxTransferCharacteristics const kNumTransfers = AVIF_NCLX_TRANSFER_CHARACTERISTICS_HLG;
3232

3333

3434
// FIXME(ledyba-z): libavif does not respect MatrixCoefficients in AV1 Sequence Header.

SDWebImageAVIFCoder/Classes/ColorSpace.m

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
4343
*/
4444

4545
switch(transferCharacteristics) {
46-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_GAMMA28: // 5
46+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT470BG: // 5, gamma=2.8
4747
tf->cutoff = -INFINITY;
4848
tf->c0 = 1.0f;
4949
tf->c1 = 1.0f;
@@ -53,7 +53,7 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
5353
tf->c5 = 0.0f;
5454
tf->gamma = 1.0f/2.8f;
5555
break;
56-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT709: // 1
56+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT709: // 1, sRGB
5757
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT601: // 6
5858
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2020_10BIT: // 14
5959
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2020_12BIT: // 15
@@ -68,7 +68,7 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
6868
tf->c4 = 4.5f;
6969
tf->c5 = 0.0f;
7070
break;
71-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_ST240: // 7
71+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_SMPTE240: // 7
7272
tf->cutoff = beta;
7373
//
7474
tf->c0 = alpha;
@@ -104,7 +104,7 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
104104
tf->c4 = 4.5f;
105105
tf->c5 = 0.0f;
106106
break;
107-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT1361_EXTENDED: // 12
107+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT1361: // 12
108108
tf->cutoff = beta;
109109
//
110110
tf->c0 = alpha;
@@ -128,7 +128,7 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
128128
tf->c4 = 12.92f;
129129
tf->c5 = 0.0f;
130130
break;
131-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_ST428: // 17
131+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_SMPTE428: // 17
132132
tf->cutoff = -INFINITY;
133133
//
134134
tf->c0 = 1.0f;
@@ -141,14 +141,14 @@ static void CalcTransferFunction(uint16_t const transferCharacteristics, vImageT
141141
tf->c5 = 0.0f;
142142
break;
143143
// Can't be represented by vImageTransferFunction. Use gamma 2.2 as a fallback.
144-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_ST2084: // 16
145-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2100_HLG: // 18
146-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_LOG_100_1: // 9
147-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_LOG_100_SQRT: // 10
144+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_SMPTE2084: // 16
145+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_HLG: // 18
146+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_LOG100: // 9
147+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_LOG100_SQRT10: // 10
148148
//
149149
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_UNKNOWN: // 0
150150
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_UNSPECIFIED: // 2
151-
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_GAMMA22: // 4
151+
case AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT470M: // 4
152152
default:
153153
tf->cutoff = -INFINITY;
154154
tf->c0 = 1.0f;
@@ -244,7 +244,7 @@ void SDAVIFCalcColorSpaceMono(avifImage * avif, CGColorSpaceRef* ref, BOOL* shou
244244
*shouldRelease = FALSE;
245245
return;
246246
}
247-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SRGB &&
247+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT709 &&
248248
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB) {
249249
static CGColorSpaceRef sRGB = NULL;
250250
static dispatch_once_t onceToken;
@@ -287,7 +287,7 @@ void SDAVIFCalcColorSpaceMono(avifImage * avif, CGColorSpaceRef* ref, BOOL* shou
287287
*shouldRelease = FALSE;
288288
return;
289289
}
290-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_P3 &&
290+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SMPTE432 /* Display P3 */ &&
291291
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB) {
292292
static CGColorSpaceRef p3 = NULL;
293293
static dispatch_once_t onceToken;
@@ -367,7 +367,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
367367
*shouldRelease = FALSE;
368368
return;
369369
}
370-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SRGB &&
370+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT709 /* sRGB */ &&
371371
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB) {
372372
static CGColorSpaceRef sRGB = NULL;
373373
static dispatch_once_t onceToken;
@@ -382,7 +382,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
382382
*shouldRelease = FALSE;
383383
return;
384384
}
385-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SRGB &&
385+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT709 /* sRGB */ &&
386386
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_LINEAR) {
387387
static CGColorSpaceRef sRGBlinear = NULL;
388388
static dispatch_once_t onceToken;
@@ -428,8 +428,8 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
428428
*shouldRelease = FALSE;
429429
return;
430430
}
431-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT2100 &&
432-
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2100_HLG) {
431+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT2020 &&
432+
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_HLG) {
433433
static CGColorSpaceRef bt2020hlg = NULL;
434434
static dispatch_once_t onceToken;
435435
dispatch_once(&onceToken, ^{
@@ -443,8 +443,8 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
443443
*shouldRelease = FALSE;
444444
return;
445445
}
446-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT2100 &&
447-
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2100_PQ) {
446+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_BT2020 &&
447+
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_SMPTE2084 /* PQ */) {
448448
static CGColorSpaceRef bt2020pq = NULL;
449449
static dispatch_once_t onceToken;
450450
dispatch_once(&onceToken, ^{
@@ -458,7 +458,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
458458
*shouldRelease = FALSE;
459459
return;
460460
}
461-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_P3 &&
461+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SMPTE432 /* Display P3 */ &&
462462
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB) {
463463
static CGColorSpaceRef p3 = NULL;
464464
static dispatch_once_t onceToken;
@@ -473,8 +473,8 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
473473
*shouldRelease = FALSE;
474474
return;
475475
}
476-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_P3 &&
477-
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2100_HLG) {
476+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SMPTE432 /* Display P3 */ &&
477+
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_HLG) {
478478
static CGColorSpaceRef p3hlg = NULL;
479479
static dispatch_once_t onceToken;
480480
dispatch_once(&onceToken, ^{
@@ -489,8 +489,8 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
489489
*shouldRelease = FALSE;
490490
return;
491491
}
492-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_P3 &&
493-
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT2100_PQ) {
492+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SMPTE432 /* Display P3 */ &&
493+
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_SMPTE2084 /* PQ */) {
494494
static CGColorSpaceRef p3pq = NULL;
495495
static dispatch_once_t onceToken;
496496
dispatch_once(&onceToken, ^{
@@ -504,7 +504,7 @@ void SDAVIFCalcColorSpaceRGB(avifImage * avif, CGColorSpaceRef* ref, BOOL* shoul
504504
*shouldRelease = FALSE;
505505
return;
506506
}
507-
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_P3 &&
507+
if(colorPrimaries == AVIF_NCLX_COLOUR_PRIMARIES_SMPTE432 /* Display P3 */ &&
508508
transferCharacteristics == AVIF_NCLX_TRANSFER_CHARACTERISTICS_LINEAR) {
509509
static CGColorSpaceRef p3linear = NULL;
510510
static dispatch_once_t onceToken;

0 commit comments

Comments
 (0)