Skip to content

Commit 1ee4979

Browse files
authored
Merge pull request #3 from SDWebImage/project_compatbible_avif_0.2
Fix the compatible for libavif 0.2 API changes
2 parents eada23f + 88feab2 commit 1ee4979

File tree

5 files changed

+20
-11
lines changed

5 files changed

+20
-11
lines changed

Cartfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
github "SDWebImage/SDWebImage" ~> 5.0
2-
github "SDWebImage/libavif-Xcode" >= 0.1.3
2+
github "SDWebImage/libavif-Xcode" ~> 0.2.0

Cartfile.resolved

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
github "SDWebImage/SDWebImage" "5.1.0"
22
github "SDWebImage/libaom-Xcode" "1.0.1"
3-
github "SDWebImage/libavif-Xcode" "0.1.4"
3+
github "SDWebImage/libavif-Xcode" "0.2.0"

Example/Podfile.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
PODS:
22
- libaom (1.0.1)
3-
- libavif (0.1.4):
3+
- libavif (0.2.0):
44
- libaom (>= 1.0.1)
55
- SDWebImage (5.1.0):
66
- SDWebImage/Core (= 5.1.0)
77
- SDWebImage/Core (5.1.0)
8-
- SDWebImageAVIFCoder (0.2.0):
9-
- libavif (~> 0.1.4)
8+
- SDWebImageAVIFCoder (0.2.1):
9+
- libavif (~> 0.2.0)
1010
- SDWebImage (~> 5.0)
1111

1212
DEPENDENCIES:
@@ -24,9 +24,9 @@ EXTERNAL SOURCES:
2424

2525
SPEC CHECKSUMS:
2626
libaom: 1e48c68559b8d6191c1a9f266e0bee83b2dd21fd
27-
libavif: 4f94ed672d45d6651ee0f784f5faf11b95449716
27+
libavif: 251b8a20baa5b05467cc64c3b844eaa7b5cf3a62
2828
SDWebImage: fb387001955223213dde14bc08c8b73f371f8d8f
29-
SDWebImageAVIFCoder: ec08ff2cf12552223b51b7253c8201d264ecbbac
29+
SDWebImageAVIFCoder: 0cc05dc868739b68d6b61856ef11e1aea6af68eb
3030

3131
PODFILE CHECKSUM: cb60778bff8fb5ce4fbc8792f6079317b7a897be
3232

SDWebImageAVIFCoder.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,5 @@ Which is built based on the open-sourced libavif codec.
3636
s.source_files = 'SDWebImageAVIFCoder/Classes/**/*', 'SDWebImageAVIFCoder/Module/SDWebImageAVIFCoder.h'
3737

3838
s.dependency 'SDWebImage', '~> 5.0'
39-
s.dependency 'libavif', '~> 0.1.4'
39+
s.dependency 'libavif', '~> 0.2.0'
4040
end

SDWebImageAVIFCoder/Classes/SDImageAVIFCoder.m

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,10 @@ - (nullable CGImageRef)sd_createAVIFImageWithData:(nonnull NSData *)data CF_RETU
128128
.size = data.length
129129
};
130130
avifImage * avif = avifImageCreateEmpty();
131-
avifResult result = avifImageRead(avif, &rawData);
131+
avifDecoder *decoder = avifDecoderCreate();
132+
avifResult result = avifDecoderRead(decoder, avif, &rawData);
132133
if (result != AVIF_RESULT_OK) {
134+
avifDecoderDestroy(decoder);
133135
avifImageDestroy(avif);
134136
return nil;
135137
}
@@ -147,6 +149,7 @@ - (nullable CGImageRef)sd_createAVIFImageWithData:(nonnull NSData *)data CF_RETU
147149

148150
uint8_t * dest = calloc(width * components * height, sizeof(uint8_t));
149151
if (!dest) {
152+
avifDecoderDestroy(decoder);
150153
avifImageDestroy(avif);
151154
return nil;
152155
}
@@ -162,6 +165,7 @@ - (nullable CGImageRef)sd_createAVIFImageWithData:(nonnull NSData *)data CF_RETU
162165

163166
// clean up
164167
CGDataProviderRelease(provider);
168+
avifDecoderDestroy(decoder);
165169
avifImageDestroy(avif);
166170

167171
return imageRef;
@@ -274,17 +278,22 @@ - (nullable NSData *)encodedDataWithImage:(nullable UIImage *)image format:(SDIm
274278
if (options[SDImageCoderEncodeCompressionQuality]) {
275279
compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue];
276280
}
277-
int rescaledQuality = 63 - (int)((compressionQuality) * 63.0f);
281+
int rescaledQuality = AVIF_WORST_QUALITY - (int)((compressionQuality) * AVIF_WORST_QUALITY);
278282

279283
avifRawData raw = AVIF_RAW_DATA_EMPTY;
280-
avifResult result = avifImageWrite(avif, &raw, 2, rescaledQuality);
284+
avifEncoder *encoder = avifEncoderCreate();
285+
encoder->quality = rescaledQuality;
286+
encoder->maxThreads = 2;
287+
avifResult result = avifEncoderWrite(encoder, avif, &raw);
281288

282289
if (result != AVIF_RESULT_OK) {
290+
avifEncoderDestroy(encoder);
283291
return nil;
284292
}
285293

286294
NSData *imageData = [NSData dataWithBytes:raw.data length:raw.size];
287295
free(raw.data);
296+
avifEncoderDestroy(encoder);
288297

289298
return imageData;
290299
}

0 commit comments

Comments
 (0)