Skip to content

Commit 641d791

Browse files
committed
Support new encoding API.
1 parent 38600bf commit 641d791

1 file changed

Lines changed: 13 additions & 41 deletions

File tree

SDWebImageAVIFCoder/Classes/SDImageAVIFCoder.m

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,30 +1056,6 @@ static CGImageRef CreateImage16U(avifImage * avif) {
10561056
return result;
10571057
}
10581058

1059-
static void FillRGBABufferWithAVIFImage(vImage_Buffer *red, vImage_Buffer *green, vImage_Buffer *blue, vImage_Buffer *alpha, avifImage *img) {
1060-
red->width = img->width;
1061-
red->height = img->height;
1062-
red->data = img->rgbPlanes[AVIF_CHAN_R];
1063-
red->rowBytes = img->rgbRowBytes[AVIF_CHAN_R];
1064-
1065-
green->width = img->width;
1066-
green->height = img->height;
1067-
green->data = img->rgbPlanes[AVIF_CHAN_G];
1068-
green->rowBytes = img->rgbRowBytes[AVIF_CHAN_G];
1069-
1070-
blue->width = img->width;
1071-
blue->height = img->height;
1072-
blue->data = img->rgbPlanes[AVIF_CHAN_B];
1073-
blue->rowBytes = img->rgbRowBytes[AVIF_CHAN_B];
1074-
1075-
if (img->alphaPlane != NULL) {
1076-
alpha->width = img->width;
1077-
alpha->height = img->height;
1078-
alpha->data = img->alphaPlane;
1079-
alpha->rowBytes = img->alphaRowBytes;
1080-
}
1081-
}
1082-
10831059
@implementation SDImageAVIFCoder
10841060

10851061
+ (instancetype)sharedCoder {
@@ -1219,32 +1195,28 @@ - (nullable NSData *)encodedDataWithImage:(nullable UIImage *)image format:(SDIm
12191195
}
12201196

12211197
avifPixelFormat avifFormat = AVIF_PIXEL_FORMAT_YUV444;
1222-
enum avifPlanesFlags planesFlags = hasAlpha ? AVIF_PLANES_RGB | AVIF_PLANES_A : AVIF_PLANES_RGB;
1223-
1198+
12241199
avifImage *avif = avifImageCreate((int)width, (int)height, 8, avifFormat);
12251200
if (!avif) {
12261201
free(dest.data);
12271202
return nil;
12281203
}
1229-
avifImageAllocatePlanes(avif, planesFlags);
1230-
1204+
avifRGBImage rgb = {
1205+
.width = (uint32_t)width,
1206+
.height = (uint32_t)height,
1207+
.depth = 8,
1208+
.format = hasAlpha ? AVIF_RGB_FORMAT_ARGB : AVIF_RGB_FORMAT_RGB,
1209+
.pixels = dest.data,
1210+
.rowBytes = (uint32_t)dest.rowBytes,
1211+
};
1212+
avifImageRGBToYUV(avif, &rgb);
1213+
free(dest.data);
1214+
dest.data = NULL;
1215+
12311216
NSData *iccProfile = (__bridge_transfer NSData *)CGColorSpaceCopyICCProfile([SDImageCoderHelper colorSpaceGetDeviceRGB]);
12321217

12331218
avifImageSetProfileICC(avif, (uint8_t *)iccProfile.bytes, iccProfile.length);
12341219

1235-
vImage_Buffer red, green, blue, alpha;
1236-
FillRGBABufferWithAVIFImage(&red, &green, &blue, &alpha, avif);
1237-
1238-
if (hasAlpha) {
1239-
v_error = vImageConvert_ARGB8888toPlanar8(&dest, &alpha, &red, &green, &blue, kvImageNoFlags);
1240-
} else {
1241-
v_error = vImageConvert_RGB888toPlanar8(&dest, &red, &green, &blue, kvImageNoFlags);
1242-
}
1243-
free(dest.data);
1244-
if (v_error != kvImageNoError) {
1245-
return nil;
1246-
}
1247-
12481220
double compressionQuality = 1;
12491221
if (options[SDImageCoderEncodeCompressionQuality]) {
12501222
compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue];

0 commit comments

Comments
 (0)