From 81969472d3581c2b9c5cb38ec660c6953b34bc30 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sun, 9 Jul 2023 20:41:13 +0800 Subject: [PATCH 1/5] Avoid force-decode by apply the byte alignment for static WebP images See: https://github.com/SDWebImage/SDWebImage/pull/3559 --- .../Classes/SDImageWebPCoder.m | 148 +++++++++++++++--- 1 file changed, 126 insertions(+), 22 deletions(-) diff --git a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m index bd158b3..1f69604 100644 --- a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m +++ b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m @@ -71,8 +71,8 @@ else OSSpinLockUnlock(&lock##_deprecated); /// Used for animated WebP, which need a canvas for decoding (rendering), possible apply a scale transform for thumbnail decoding (avoiding post-rescale using vImage) /// See more in #73 static inline CGContextRef _Nullable CreateWebPCanvas(BOOL hasAlpha, CGSize canvasSize, CGSize thumbnailSize, BOOL preserveAspectRatio) { - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; + // From SDWebImage v5.17.0, use runtime detection of bitmap info instead of hardcode. + CGBitmapInfo bitmapInfo = [SDImageCoderHelper preferredBitmapInfo:hasAlpha]; // Check whether we need to use thumbnail CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(canvasSize.width, canvasSize.height) scaleSize:thumbnailSize preserveAspectRatio:preserveAspectRatio shouldScaleUp:NO]; CGContextRef canvas = CGBitmapContextCreate(NULL, scaledSize.width, scaledSize.height, 8, 0, [SDImageCoderHelper colorSpaceGetDeviceRGB], bitmapInfo); @@ -88,6 +88,89 @@ static inline CGContextRef _Nullable CreateWebPCanvas(BOOL hasAlpha, CGSize canv return canvas; } +WEBP_CSP_MODE ConvertCSPMode(CGBitmapInfo bitmapInfo) { + // Get alpha info, byteOrder info + CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask; + CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask; + BOOL byteOrderNormal = NO; + switch (byteOrderInfo) { + case kCGBitmapByteOrderDefault: { + byteOrderNormal = YES; + } break; + case kCGBitmapByteOrder32Little: { + } break; + case kCGBitmapByteOrder32Big: { + byteOrderNormal = YES; + } break; + default: break; + } + switch (alphaInfo) { + case kCGImageAlphaPremultipliedFirst: { + if (byteOrderNormal) { + // ARGB8888, premultiplied + return MODE_Argb; + } else { + // BGRA8888, premultiplied + return MODE_bgrA; + } + } + break; + case kCGImageAlphaPremultipliedLast: { + if (byteOrderNormal) { + // RGBA8888, premultiplied + return MODE_rgbA; + } else { + // ABGR8888, premultiplied + // Unsupported! + return MODE_LAST; + } + } + break; + case kCGImageAlphaNone: { + if (byteOrderNormal) { + // RGB + return MODE_RGB; + } else { + // BGR + return MODE_BGR; + } + } + break; + case kCGImageAlphaLast: + case kCGImageAlphaNoneSkipLast: { + if (byteOrderNormal) { + // RGBA or RGBX + return MODE_RGBA; + } else { + // ABGR or XBGR + // Unsupported! + return MODE_LAST; + } + } + break; + case kCGImageAlphaFirst: + case kCGImageAlphaNoneSkipFirst: { + if (byteOrderNormal) { + // ARGB or XRGB + return MODE_ARGB; + } else { + // BGRA or BGRX + return MODE_BGRA; + } + } + break; + case kCGImageAlphaOnly: { + // A + // Unsupported + return MODE_LAST; + } + break; + default: + break; + } + return MODE_LAST; +} + // TODO, share this logic for multiple coders, or do refactory in v6.0 (The coder plugin should provide image information back to Core, like `CGImageSourceCopyPropertiesAtIndex`) static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize originalSize, NSUInteger frameCount, NSUInteger bytesPerPixel) { if (CGSizeEqualToSize(originalSize, CGSizeZero)) return CGSizeMake(1, 1); @@ -264,6 +347,7 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize UIImage *firstFrameImage = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:kCGImagePropertyOrientationUp]; #endif firstFrameImage.sd_imageFormat = SDImageFormatWebP; + firstFrameImage.sd_isDecoded = YES; // We handle byte alignment and alloc bitmap buffer CGImageRelease(imageRef); WebPDemuxReleaseIterator(&iter); WebPDemuxDelete(demuxer); @@ -317,8 +401,8 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize - (instancetype)initIncrementalWithOptions:(nullable SDImageCoderOptions *)options { self = [super init]; if (self) { - // Progressive images need transparent, so always use premultiplied BGRA - _idec = WebPINewRGB(MODE_bgrA, NULL, 0, 0); + // Progressive images need transparent, so always use premultiplied RGBA + _idec = WebPINewRGB(MODE_rgbA, NULL, 0, 0); CGFloat scale = 1; NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; if (scaleFactor != nil) { @@ -428,9 +512,10 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, rgba, rgbaSize, NULL); CGColorSpaceRef colorSpaceRef = [SDImageCoderHelper colorSpaceGetDeviceRGB]; - - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst; + // Because _idec use MODE_rgbA + CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast; size_t components = 4; + BOOL shouldInterpolate = YES; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; // Why to use last_y for image height is because of libwebp's bug (https://bugs.chromium.org/p/webp/issues/detail?id=362) // It will not keep memory barrier safe on x86 architechure (macOS & iPhone simulator) but on ARM architecture (iPhone & iPad & tv & watch) it works great @@ -438,7 +523,7 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize // So this will cause our drawed image looks strange(above is the current part but below is the previous part) // We only grab the last_y height and draw the last_y height instead of total height image // Besides fix, this can enhance performance since we do not need to create extra bitmap - CGImageRef imageRef = CGImageCreate(width, last_y, 8, components * 8, components * width, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); + CGImageRef imageRef = CGImageCreate(width, last_y, 8, components * 8, components * width, colorSpaceRef, bitmapInfo, provider, NULL, shouldInterpolate, renderingIntent); CGDataProviderRelease(provider); @@ -546,20 +631,44 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize } BOOL hasAlpha = config.input.has_alpha; - // iOS prefer BGRA8888 (premultiplied) or BGRX8888 bitmapInfo for screen rendering, which is same as `UIGraphicsBeginImageContext()` or `- [CALayer drawInContext:]` - // use this bitmapInfo, combined with right colorspace, even without decode, can still avoid extra CA::Render::copy_image(which marked `Color Copied Images` from Instruments) - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; + // From SDWebImage v5.17.0, use runtime detection of bitmap info instead of hardcode. + CGBitmapInfo bitmapInfo = [SDImageCoderHelper preferredBitmapInfo:hasAlpha]; + WEBP_CSP_MODE mode = ConvertCSPMode(bitmapInfo); + if (mode == MODE_LAST) { + NSAssert(NO, @"Unsupported libwebp preferred CGBitmapInfo: %d", bitmapInfo); + return nil; + } + config.output.colorspace = mode; config.options.use_threads = 1; - config.output.colorspace = MODE_bgrA; + // Use scaling for thumbnail + size_t width = config.input.width; + size_t height = config.input.height; if (scaledSize.width != 0 && scaledSize.height != 0) { config.options.use_scaling = 1; config.options.scaled_width = scaledSize.width; config.options.scaled_height = scaledSize.height; + width = scaledSize.width; + height = scaledSize.height; } + // We alloc the buffer and do byte alignment by ourself. libwebp defaults does not byte alignment to `bitsPerPixel`, which cause the CoreAnimation unhappy and always trigger the `CA::Render::copy_image` + size_t bitsPerComponent = 8; + size_t components = (mode == MODE_RGB || mode == MODE_BGR) ? 3 : 4; // Actually always 4 + size_t bitsPerPixel = bitsPerComponent * components; + // Read: https://github.com/path/FastImageCache#byte-alignment + // A properly aligned bytes-per-row value must be a multiple of 8 pixels × bytes per pixel + // For a typical ARGB image, the aligned bytes-per-row value is a multiple of 64. + size_t alignment = [SDImageCoderHelper preferredByteAlignment]; + size_t bytesPerRow = SDByteAlign(width * (bitsPerPixel / 8), alignment); + + void *rgba = WebPMalloc(bytesPerRow * height); + config.output.is_external_memory = 1; + config.output.u.RGBA.rgba = rgba; + config.output.u.RGBA.stride = (int)bytesPerRow; + config.output.u.RGBA.size = height * bytesPerRow; + // Decode the WebP image data into a RGBA value array if (WebPDecode(webpData.bytes, webpData.size, &config) != VP8_STATUS_OK) { return nil; @@ -568,13 +677,9 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize // Construct a UIImage from the decoded RGBA value array CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, config.output.u.RGBA.rgba, config.output.u.RGBA.size, FreeImageData); - size_t bitsPerComponent = 8; - size_t bitsPerPixel = 32; - size_t bytesPerRow = config.output.u.RGBA.stride; - size_t width = config.output.width; - size_t height = config.output.height; + BOOL shouldInterpolate = YES; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; - CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); + CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, shouldInterpolate, renderingIntent); CGDataProviderRelease(provider); @@ -756,9 +861,6 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize } size_t bytesPerRow = CGImageGetBytesPerRow(imageRef); - size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); - size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef); - size_t components = bitsPerPixel / bitsPerComponent; CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask; CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask; @@ -891,7 +993,7 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize } static void FreeImageData(void *info, const void *data, size_t size) { - free((void *)data); + WebPFree((void *)data); } static int GetIntValueForKey(NSDictionary * _Nonnull dictionary, NSString * _Nonnull key, int defaultValue) { @@ -1236,6 +1338,8 @@ static float GetFloatValueForKey(NSDictionary * _Nonnull dictionary, NSString * #else image = [[UIImage alloc] initWithCGImage:imageRef scale:_scale orientation:kCGImagePropertyOrientationUp]; #endif + image.sd_imageFormat = SDImageFormatWebP; + image.sd_isDecoded = YES; // We handle byte alignment and alloc bitmap buffer CGImageRelease(imageRef); WebPDemuxReleaseIterator(&iter); From 13f640b36daf9d743f1f1be242b2553b873849e2 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sun, 9 Jul 2023 20:42:22 +0800 Subject: [PATCH 2/5] Bump the dependency of SDWebImage 5.17.0 because of new API --- Cartfile | 2 +- Package.swift | 2 +- SDWebImageWebPCoder.podspec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cartfile b/Cartfile index 6c3ac23..bc00632 100644 --- a/Cartfile +++ b/Cartfile @@ -1,2 +1,2 @@ -github "SDWebImage/SDWebImage" ~> 5.16 +github "SDWebImage/SDWebImage" ~> 5.17 github "SDWebImage/libwebp-Xcode" ~> 1.0 diff --git a/Package.swift b/Package.swift index 58f9f50..7378a2d 100644 --- a/Package.swift +++ b/Package.swift @@ -17,7 +17,7 @@ let package = Package( dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), - .package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.16.0"), + .package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.17.0"), .package(url: "https://github.com/SDWebImage/libwebp-Xcode.git", from: "1.1.0") ], targets: [ diff --git a/SDWebImageWebPCoder.podspec b/SDWebImageWebPCoder.podspec index db07852..1e19254 100644 --- a/SDWebImageWebPCoder.podspec +++ b/SDWebImageWebPCoder.podspec @@ -28,7 +28,7 @@ This is a SDWebImage coder plugin to support WebP image. 'USER_HEADER_SEARCH_PATHS' => '$(inherited) $(SRCROOT)/libwebp/src' } s.framework = 'CoreGraphics' - s.dependency 'SDWebImage/Core', '~> 5.16' + s.dependency 'SDWebImage/Core', '~> 5.17' s.dependency 'libwebp', '~> 1.0' end From 4b45cdde01356938f42d91808eabfca1b1c8dcc7 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Mon, 10 Jul 2023 23:27:18 +0800 Subject: [PATCH 3/5] Don't override the isDecoded = YES for non-CGContext drawn CGImage --- SDWebImageWebPCoder/Classes/SDImageWebPCoder.m | 2 -- 1 file changed, 2 deletions(-) diff --git a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m index 1f69604..09901c1 100644 --- a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m +++ b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m @@ -347,7 +347,6 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize UIImage *firstFrameImage = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:kCGImagePropertyOrientationUp]; #endif firstFrameImage.sd_imageFormat = SDImageFormatWebP; - firstFrameImage.sd_isDecoded = YES; // We handle byte alignment and alloc bitmap buffer CGImageRelease(imageRef); WebPDemuxReleaseIterator(&iter); WebPDemuxDelete(demuxer); @@ -1339,7 +1338,6 @@ static float GetFloatValueForKey(NSDictionary * _Nonnull dictionary, NSString * image = [[UIImage alloc] initWithCGImage:imageRef scale:_scale orientation:kCGImagePropertyOrientationUp]; #endif image.sd_imageFormat = SDImageFormatWebP; - image.sd_isDecoded = YES; // We handle byte alignment and alloc bitmap buffer CGImageRelease(imageRef); WebPDemuxReleaseIterator(&iter); From 8bae908c18decae69fa9815c392a227cd5f519be Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Tue, 11 Jul 2023 17:16:47 +0800 Subject: [PATCH 4/5] Added the test case `testWebPDecodeDoesNotTriggerCACopyImage` --- Tests/Images/TestColorspaceStatic.webp | Bin 0 -> 95026 bytes Tests/SDWebImageWebPCoderTests.m | 12 ++++++++++++ .../project.pbxproj | 6 ++++++ 3 files changed, 18 insertions(+) create mode 100644 Tests/Images/TestColorspaceStatic.webp diff --git a/Tests/Images/TestColorspaceStatic.webp b/Tests/Images/TestColorspaceStatic.webp new file mode 100644 index 0000000000000000000000000000000000000000..0f17960bad087c3c67b9e6a26085d9dcf77732d7 GIT binary patch literal 95026 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 Date: Fri, 14 Jul 2023 00:11:33 +0800 Subject: [PATCH 5/5] Update with the final changes from SDWebImage Core --- .../Classes/SDImageWebPCoder.m | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m index 09901c1..4dabcb9 100644 --- a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m +++ b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m @@ -72,7 +72,7 @@ else OSSpinLockUnlock(&lock##_deprecated); /// See more in #73 static inline CGContextRef _Nullable CreateWebPCanvas(BOOL hasAlpha, CGSize canvasSize, CGSize thumbnailSize, BOOL preserveAspectRatio) { // From SDWebImage v5.17.0, use runtime detection of bitmap info instead of hardcode. - CGBitmapInfo bitmapInfo = [SDImageCoderHelper preferredBitmapInfo:hasAlpha]; + CGBitmapInfo bitmapInfo = [SDImageCoderHelper preferredPixelFormat:hasAlpha].bitmapInfo; // Check whether we need to use thumbnail CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(canvasSize.width, canvasSize.height) scaleSize:thumbnailSize preserveAspectRatio:preserveAspectRatio shouldScaleUp:NO]; CGContextRef canvas = CGBitmapContextCreate(NULL, scaledSize.width, scaledSize.height, 8, 0, [SDImageCoderHelper colorSpaceGetDeviceRGB], bitmapInfo); @@ -171,20 +171,6 @@ WEBP_CSP_MODE ConvertCSPMode(CGBitmapInfo bitmapInfo) { return MODE_LAST; } -// TODO, share this logic for multiple coders, or do refactory in v6.0 (The coder plugin should provide image information back to Core, like `CGImageSourceCopyPropertiesAtIndex`) -static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize originalSize, NSUInteger frameCount, NSUInteger bytesPerPixel) { - if (CGSizeEqualToSize(originalSize, CGSizeZero)) return CGSizeMake(1, 1); - NSUInteger totalFramePixelSize = limitBytes / bytesPerPixel / (frameCount ?: 1); - CGFloat ratio = originalSize.height / originalSize.width; - CGFloat width = sqrt(totalFramePixelSize / ratio); - CGFloat height = width * ratio; - width = MAX(1, floor(width)); - height = MAX(1, floor(height)); - CGSize size = CGSizeMake(width, height); - - return size; -} - @interface SDWebPCoderFrame : NSObject @property (nonatomic, assign) NSUInteger index; // Frame index (zero based) @@ -328,7 +314,7 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize if (limitBytes > 0) { // Hack 32 BitsPerPixel CGSize imageSize = CGSizeMake(canvasWidth, canvasHeight); - CGSize framePixelSize = SDCalculateScaleDownPixelSize(limitBytes, imageSize, frameCount, 4); + CGSize framePixelSize = [SDImageCoderHelper scaledSizeWithImageSize:imageSize limitBytes:limitBytes bytesPerPixel:4 frameCount:frameCount]; // Override thumbnail size thumbnailSize = framePixelSize; preserveAspectRatio = YES; @@ -477,7 +463,7 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize if (_limitBytes > 0) { // Hack 32 BitsPerPixel CGSize imageSize = CGSizeMake(_canvasWidth, _canvasHeight); - CGSize framePixelSize = SDCalculateScaleDownPixelSize(_limitBytes, imageSize, _frameCount, 4); + CGSize framePixelSize = [SDImageCoderHelper scaledSizeWithImageSize:imageSize limitBytes:_limitBytes bytesPerPixel:4 frameCount:_frameCount]; // Override thumbnail size _thumbnailSize = framePixelSize; _preserveAspectRatio = YES; @@ -631,7 +617,8 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize BOOL hasAlpha = config.input.has_alpha; // From SDWebImage v5.17.0, use runtime detection of bitmap info instead of hardcode. - CGBitmapInfo bitmapInfo = [SDImageCoderHelper preferredBitmapInfo:hasAlpha]; + SDImagePixelFormat pixelFormat = [SDImageCoderHelper preferredPixelFormat:hasAlpha]; + CGBitmapInfo bitmapInfo = pixelFormat.bitmapInfo; WEBP_CSP_MODE mode = ConvertCSPMode(bitmapInfo); if (mode == MODE_LAST) { NSAssert(NO, @"Unsupported libwebp preferred CGBitmapInfo: %d", bitmapInfo); @@ -659,8 +646,9 @@ static inline CGSize SDCalculateScaleDownPixelSize(NSUInteger limitBytes, CGSize // Read: https://github.com/path/FastImageCache#byte-alignment // A properly aligned bytes-per-row value must be a multiple of 8 pixels × bytes per pixel // For a typical ARGB image, the aligned bytes-per-row value is a multiple of 64. - size_t alignment = [SDImageCoderHelper preferredByteAlignment]; + size_t alignment = pixelFormat.alignment; size_t bytesPerRow = SDByteAlign(width * (bitsPerPixel / 8), alignment); + //size_t bytesPerRow = 6688; void *rgba = WebPMalloc(bytesPerRow * height); config.output.is_external_memory = 1; @@ -1069,7 +1057,7 @@ static float GetFloatValueForKey(NSDictionary * _Nonnull dictionary, NSString * if (_limitBytes > 0) { // Hack 32 BitsPerPixel CGSize imageSize = CGSizeMake(_canvasWidth, _canvasHeight); - CGSize framePixelSize = SDCalculateScaleDownPixelSize(_limitBytes, imageSize, _frameCount, 4); + CGSize framePixelSize = [SDImageCoderHelper scaledSizeWithImageSize:imageSize limitBytes:_limitBytes bytesPerPixel:4 frameCount:_frameCount]; // Override thumbnail size _thumbnailSize = framePixelSize; _preserveAspectRatio = YES;