mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-08-09 09:32:43 +00:00
This has two immediate consequences:
1. Fixes overflow in the range tracker for some 32-bit packed formats:
rgb24 -> v30xbe:
[ u8 +++X] SWS_OP_READ : 3 elem(s) packed >> 0
min: {0 0 0 _}, max: {255 255 255 _}
[ u8 +++X] SWS_OP_CONVERT : u8 -> f32
min: {0 0 0 _}, max: {255 255 255 _}
[f32 ...X] SWS_OP_LINEAR : matrix3+off3 [...]
min: {64 64 64 _}, max: {940 960 960 _}
[f32 ...X] SWS_OP_DITHER : 16x16 matrix + {0 3 2 -1}
min: {64.001953 64.001953 64.001953 _}, max: {940.998047 960.998047 960.998047 _}
[f32 +++X] SWS_OP_CONVERT : f32 -> u32
min: {64 64 64 _}, max: {940 960 960 _}
[u32 +++X] SWS_OP_SWIZZLE : 2013
min: {64 64 64 _}, max: {960 940 960 _}
[u32 ++++] SWS_OP_CLEAR : {_ _ _ 1}
min: {64 64 64 1}, max: {960 940 960 1}
[u32 +XXX] SWS_OP_PACK : {10 10 10 2}
- min: {268697857 _ _ _}, max: {-264581375 _ _ _}
+ min: {268697857 _ _ _}, max: {4030385921 _ _ _}
[u32 zXXX] SWS_OP_SWAP_BYTES
- min: {268697857 _ _ _}, max: {-264581375 _ _ _}
+ min: {268697857 _ _ _}, max: {4030385921 _ _ _}
2. Slightly increases the accuracy of intermediate values for some linear ops:
yuv444p10be -> rgb48be:
[u16 zzzX] SWS_OP_READ : 3 elem(s) planar >> 0
min: {0 0 0 _}, max: {1023 1023 1023 _}
[u16 +++X] SWS_OP_SWAP_BYTES
min: {0 0 0 _}, max: {1023 1023 1023 _}
[u16 +++X] SWS_OP_CONVERT : u16 -> f32
min: {0 0 0 _}, max: {1023 1023 1023 _}
[f32 ...X] SWS_OP_LINEAR : matrix3+off3 [...]
46.813777] [0 0 0 1 0]]
- min: {-57290.842348 -44341.337325 -71146.813777 _}, max: {124144.718860 111375.162457 137973.627845 _}
+ min: {-57290.842348 -44341.337326 -71146.813777 _}, max: {124144.718860 111375.162457 137973.627845 _}
[f32 ...X] SWS_OP_MAX : {0 0 0 _} <= x
min: {0 0 0 _}, max: {124144.718860 111375.162457 137973.627845 _}
[f32 ...X] SWS_OP_MIN : x <= {65535 65535 65535 _}
min: {0 0 0 _}, max: {65535 65535 65535 _}
[f32 +++X] SWS_OP_CONVERT : f32 -> u16
min: {0 0 0 _}, max: {65535 65535 65535 _}
[u16 zzzX] SWS_OP_SWAP_BYTES
min: {0 0 0 _}, max: {65535 65535 65535 _}
[u16 XXXX] SWS_OP_WRITE : 3 elem(s) packed >> 0
(X = unused, z = byteswapped, + = exact, 0 = zero)
Importantly, none of the changes affect the actual operation list, just the
range tracking metadata.
Sponsored-by: Sovereign Tech Fund
Signed-off-by: Niklas Haas <git@haasn.dev>