Niklas Haas
3743d2851d
swscale/ops: switch from AVRational to AVRational64
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>
2026-06-25 01:20:44 +02:00
..
2026-05-16 13:55:22 -03:00
2026-06-16 09:18:24 -03:00
2026-05-25 21:18:34 +00:00
2026-03-29 23:01:39 +00:00
2026-03-29 23:01:39 +00:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-21 21:41:02 -03:00
2026-06-21 21:41:02 -03:00
2026-06-21 21:41:02 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-21 21:41:02 -03:00
2026-06-21 21:41:02 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-18 21:17:23 +00:00
2026-01-14 23:56:39 +00:00
2026-06-16 09:18:24 -03:00
2026-04-28 16:17:47 +00:00
2026-01-29 21:09:02 -03:00
2026-01-29 21:09:02 -03:00
2026-03-05 13:49:59 +00:00
2026-05-09 11:44:39 -03:00
2026-05-28 21:01:13 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-06-16 09:18:24 -03:00
2026-06-23 20:07:25 -03:00
2026-03-15 19:20:06 -03:00
2026-06-16 09:18:24 -03:00
2026-05-16 13:55:22 -03:00
2026-04-22 13:28:17 +00:00
2026-05-25 21:18:34 +00:00
2026-05-29 03:25:53 +00:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-16 13:55:22 -03:00
2026-05-30 22:37:09 -03:00
2026-03-31 18:05:51 +01:00
2026-06-23 23:05:57 +00:00
2026-06-23 23:05:57 +00:00
2026-06-23 23:05:57 +00:00
2026-03-15 19:20:06 -03:00
2026-06-15 19:11:59 +00:00
2025-12-20 11:53:23 -05:00
2025-12-20 11:53:23 -05:00
2026-06-18 21:17:23 +00:00
2026-01-07 20:25:18 -03:00
2026-03-21 01:04:20 +00:00
2025-12-07 19:36:49 +00:00
2026-03-14 23:26:51 +08:00
2026-03-14 23:26:51 +08:00
2026-03-14 23:26:51 +08:00
2026-01-04 13:42:20 +00:00
2026-01-04 13:42:20 +00:00
2025-12-03 21:23:51 +00:00
2025-12-03 21:23:51 +00:00
2026-04-30 03:46:18 +00:00
2026-06-17 02:27:33 +02:00
2026-06-15 19:33:25 +00:00
2026-06-23 20:07:25 -03:00
2026-04-05 00:26:55 +00:00
2026-04-05 00:26:55 +00:00
2026-04-05 00:26:55 +00:00
2026-04-05 00:26:55 +00:00
2025-12-09 21:31:58 +00:00
2026-04-30 21:15:58 +00:00
2026-03-05 13:49:59 +00:00
2025-12-02 03:03:55 +00:00
2026-05-16 15:09:52 +00:00
2026-05-31 00:39:51 +00:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-24 23:31:53 +02:00
2026-06-16 09:18:24 -03:00
2026-05-23 16:07:50 +02:00
2026-05-23 16:07:18 +02:00
2026-05-23 16:09:55 +02:00
2025-12-23 14:34:13 +00:00
2026-03-15 19:20:06 -03:00
2026-03-15 19:20:06 -03:00
2026-03-15 19:20:06 -03:00
2026-06-16 09:18:24 -03:00
2026-06-23 23:05:57 +00:00
2025-12-04 01:59:04 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-04-28 16:17:47 +00:00
2026-05-31 16:58:23 +02:00
2026-05-31 16:58:23 +02:00
2026-05-31 16:58:23 +02:00
2026-05-31 16:58:23 +02:00
2026-06-23 20:07:25 -03:00
2026-06-23 20:07:25 -03:00
2026-06-23 20:07:25 -03:00
2026-04-05 14:02:48 +00:00
2026-06-23 17:14:42 +02:00
2026-06-23 00:04:42 +00:00
2026-04-05 14:02:48 +00:00
2026-04-05 14:02:48 +00:00
2026-04-05 14:02:48 +00:00
2026-04-05 14:02:48 +00:00
2026-04-05 14:02:48 +00:00
2026-03-15 19:20:06 -03:00
2026-05-16 13:55:23 -03:00
2026-06-23 23:05:57 +00:00
2026-05-16 13:55:23 -03:00
2026-05-16 13:55:23 -03:00
2026-05-16 13:55:23 -03:00
2026-05-16 13:55:23 -03:00
2026-06-23 23:05:57 +00:00
2025-12-29 12:02:53 -03:00
2026-05-16 13:55:23 -03:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-05-07 09:46:53 -05:00
2026-06-03 14:32:19 +00:00
2026-06-24 23:31:54 +02:00
2026-06-24 23:31:54 +02:00
2026-02-20 16:32:10 +01:00
2026-02-20 16:32:10 +01:00
2025-12-16 10:38:56 -03:00
2026-04-09 03:01:43 +00:00
2026-04-05 00:12:29 +00:00
2026-05-30 17:37:28 +00:00
2026-05-30 17:37:28 +00:00
2026-05-30 17:37:28 +00:00
2026-06-16 09:18:24 -03:00
2026-06-18 21:17:23 +00:00
2026-02-05 23:21:49 -03:00
2026-05-16 13:55:22 -03:00
2026-03-15 19:20:06 -03:00
2026-02-05 23:21:49 -03:00
2026-02-05 23:21:49 -03:00
2026-06-16 09:18:24 -03:00
2026-02-28 04:01:08 +01:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-23 20:07:25 -03:00
2026-05-30 17:37:28 +00:00
2026-05-30 17:37:28 +00:00
2026-06-16 09:18:24 -03:00
2026-02-28 04:01:08 +01:00
2025-12-20 11:53:23 -05:00
2025-12-12 18:40:01 +02:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-23 20:07:25 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-05-16 13:55:23 -03:00
2026-05-16 13:55:23 -03:00
2026-05-16 13:55:23 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-05-17 11:16:56 -03:00
2026-02-28 04:01:08 +01:00
2026-06-16 09:18:24 -03:00
2025-12-12 18:40:01 +02:00
2026-06-16 09:18:24 -03:00
2026-03-08 16:22:24 -05:00
2026-06-23 23:05:57 +00:00
2026-04-24 16:04:48 -03:00
2026-04-24 16:04:48 -03:00
2026-04-24 16:04:48 -03:00
2026-04-24 16:04:48 -03:00
2026-04-24 16:04:48 -03:00
2026-04-24 16:04:48 -03:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2026-03-05 13:49:59 +00:00
2025-12-12 18:40:01 +02:00
2025-12-30 20:14:56 -03:00
2026-05-23 10:38:28 +00:00
2026-03-21 01:04:20 +00:00
2026-03-21 01:04:20 +00:00
2026-03-21 01:04:20 +00:00
2026-03-21 01:04:20 +00:00
2026-03-21 01:04:20 +00:00
2026-03-21 01:04:20 +00:00
2026-06-16 09:18:24 -03:00
2026-02-11 20:35:20 +00:00
2025-12-23 03:20:34 +00:00
2025-12-23 03:20:34 +00:00
2026-04-05 00:12:29 +00:00
2026-04-05 00:12:29 +00:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-03-28 11:25:38 +01:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-06-16 09:18:24 -03:00
2026-03-15 19:20:06 -03:00
2026-06-09 18:27:20 +02:00
2026-03-31 18:05:51 +01:00
2026-03-25 01:32:20 +00:00
2026-06-14 15:34:43 +00:00
2026-06-25 01:20:44 +02:00
2026-06-05 22:37:18 +02:00
2026-04-28 16:17:47 +00:00
2026-04-05 22:23:08 +02:00
2026-04-28 16:17:47 +00:00
2026-06-14 20:51:07 +02:00
2026-06-14 20:51:07 +02:00
2026-06-14 20:51:07 +02:00
2026-06-01 21:53:36 -05:00
2026-06-17 15:39:33 -05:00
2026-06-23 19:13:06 +02:00
2026-03-31 18:05:51 +01:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-06-11 14:06:20 +00:00
2026-05-08 13:33:31 -07:00
2026-05-08 13:33:31 -07:00
2026-05-08 13:33:31 -07:00
2026-05-08 13:33:31 -07:00
2026-05-19 11:36:10 +02:00
2026-05-19 11:36:10 +02:00
2026-05-19 11:36:10 +02:00
2025-12-14 17:08:37 +00:00