SDWebImageAVIFCoder icon indicating copy to clipboard operation
SDWebImageAVIFCoder copied to clipboard

请教一个问题,为什么不使用接口avifImageYUVToRGB直接转成 RGB 呢

Open ghost opened this issue 3 years ago • 5 comments
trafficstars

为什么不使用接口avifImageYUVToRGB直接转成 RGB 呢,看现在是使用 iOS的 API 自己转,这种方式是速度快吗。

ghost avatar Oct 14 '22 07:10 ghost

See: https://github.com/SDWebImage/SDWebImageAVIFCoder/pull/7

Actually, before v0.5.0 (which is originally written by me), it use avifImageYUVToRGB to convert it, exactly what you think. And code is simple.

But @ledyba-z create that PR and use vImage for conversion and provide the performance result, so I merge it and release the new version.

And then, since @ledyba-z no longer maintain this repo and write his own AVIF decoder (!), so I maintained this code and get updated to libavif's API break, until now 😂

dreampiggy avatar Oct 14 '22 09:10 dreampiggy

Currently YUV<->RGB may loss detail and slow if you just use CPU to do conversion.

There are two available open source project used by libavif for RGB to YUV conversion, one is libyuv, another is sharpyuv (Both from Google), or use Apple's vImage to convert.

dreampiggy avatar Oct 14 '22 09:10 dreampiggy

If you think there are performance regression, I can provide a option in AVIFCoder to let you customize, like :

typedef enum RGBYUVConversion {
    case vImage,
    case libyuv,
    case sharpyuv
} RGBYUVConversion;

@interface SDImageAVIFCoder
// Control the default RGB to YUV conversion, defaults to vImage (which is fast on Apple platforms)
@class (assign) BOOL RGBYUVConversion defaultConversion; 
@end

dreampiggy avatar Oct 14 '22 09:10 dreampiggy

if so, thank you very much.

ghost avatar Oct 17 '22 03:10 ghost

Ah, yes. vImage frameworks can convert YUV to RGB about 100x faster than naive CPU code.

@dreampiggy Hi, I have quit my job on link-u, which is a manga company, and moved to a energy company. But I am still interested in maintaining, so feel free to mention when something happen to vImage codes!

ledyba-z avatar Oct 17 '22 05:10 ledyba-z