@@ -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