mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2026-06-03 06:10:07 +02:00
812b5654ae
This actually changes the behavior vs SWS_SCALE_POINT, because point scaling
is bit-exact and thus implies a different set of optimizations.
Ideally, we would still try and somehow merge this with tests/swscale.c to
allow testing a different set of scalers; but I still don't have a good idea
for how to accomplish that here.
As it stands, results in additional extra dithering steps in almost all
filters involving scaling, e.g.:
rgb24 16x16 -> rgb24 16x32:
[ u8 +++X] SWS_OP_READ : 3 elem(s) packed >> 0
min: {0 0 0 _}, max: {255 255 255 _}
- [ u8 +++X] SWS_OP_FILTER_V : 16 -> 32 point (1 taps)
+ [ u8 ...X] SWS_OP_FILTER_V : 16 -> 32 bilinear (2 taps)
min: {0 0 0 _}, max: {255 255 255 _}
+ [f32 ...X] SWS_OP_DITHER : 16x16 matrix + {0 3 2 -1}
+ min: {1/512 1/512 1/512 _}, max: {255.998047 255.998047 255.998047 _}
+ [f32 ...X] SWS_OP_MIN : x <= {255 255 255 _}
+ min: {1/512 1/512 1/512 _}, max: {255 255 255 _}
[f32 +++X] SWS_OP_CONVERT : f32 -> u8
min: {0 0 0 _}, max: {255 255 255 _}
[ u8 XXXX] SWS_OP_WRITE : 3 elem(s) packed >> 0
(X = unused, z = byteswapped, + = exact, 0 = zero)
Signed-off-by: Niklas Haas <git@haasn.dev>