SDWebImage / SDWebImageAVIFCoder

A SDWebImage coder plugin to support AVIF(AV1 Image File Format) image
MIT License
55 stars 14 forks source link

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

Open ghost opened 1 year ago

ghost commented 1 year ago

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

dreampiggy commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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
ghost commented 1 year ago

if so, thank you very much.

ledyba-z commented 1 year ago

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!