diff options
author | Ramiro Polla <ramiro.polla@gmail.com> | 2024-09-18 23:46:06 +0200 |
---|---|---|
committer | Ramiro Polla <ramiro.polla@gmail.com> | 2024-12-05 21:10:29 +0100 |
commit | 384fe39623e932e68fe35af7d5b51fcd0a6c28fb (patch) | |
tree | 52ae1ce0e6705559739be743975a2ee7024137ed /tests/ref/seek | |
parent | 58bcdeb7425ed7b74f1aac20099cb3c025e6ce8d (diff) | |
download | ffmpeg-384fe39623e932e68fe35af7d5b51fcd0a6c28fb.tar.gz |
swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats
There is an issue with the constants used in YUV to YUV range conversion,
where the upper bound is not respected when converting to mpeg range.
With this commit, the constants are calculated at runtime, depending on
the bit depth. This approach also allows us to more easily understand how
the constants are derived.
For bit depths <= 14, the number of fixed point bits has been set to 14
for all conversions, to simplify the code.
For bit depths > 14, the number of fixed points bits has been raised and
set to 18, to allow for the conversion to be accurate enough for the mpeg
range to be respected.
The convert functions now take the conversion constants (coeff and offset)
as function arguments.
For bit depths <= 14, coeff is unsigned 16-bit and offset is 32-bit.
For bit depths > 14, coeff is unsigned 32-bit and offset is 64-bit.
x86_64:
chrRangeFromJpeg8_1920_c: 2127.4 2125.0 (1.00x)
chrRangeFromJpeg16_1920_c: 2325.2 2127.2 (1.09x)
chrRangeToJpeg8_1920_c: 3166.9 3168.7 (1.00x)
chrRangeToJpeg16_1920_c: 2152.4 3164.8 (0.68x)
lumRangeFromJpeg8_1920_c: 1263.0 1302.5 (0.97x)
lumRangeFromJpeg16_1920_c: 1080.5 1299.2 (0.83x)
lumRangeToJpeg8_1920_c: 1886.8 2112.2 (0.89x)
lumRangeToJpeg16_1920_c: 1077.0 1906.5 (0.56x)
aarch64 A55:
chrRangeFromJpeg8_1920_c: 28835.2 28835.6 (1.00x)
chrRangeFromJpeg16_1920_c: 28839.8 32680.8 (0.88x)
chrRangeToJpeg8_1920_c: 23074.7 23075.4 (1.00x)
chrRangeToJpeg16_1920_c: 17318.9 24996.0 (0.69x)
lumRangeFromJpeg8_1920_c: 15389.7 15384.5 (1.00x)
lumRangeFromJpeg16_1920_c: 15388.2 17306.7 (0.89x)
lumRangeToJpeg8_1920_c: 19227.8 19226.6 (1.00x)
lumRangeToJpeg16_1920_c: 15387.0 21146.3 (0.73x)
aarch64 A76:
chrRangeFromJpeg8_1920_c: 6324.4 6268.1 (1.01x)
chrRangeFromJpeg16_1920_c: 6339.9 11521.5 (0.55x)
chrRangeToJpeg8_1920_c: 9656.0 9612.8 (1.00x)
chrRangeToJpeg16_1920_c: 6340.4 11651.8 (0.54x)
lumRangeFromJpeg8_1920_c: 4422.0 4420.8 (1.00x)
lumRangeFromJpeg16_1920_c: 4420.9 5762.0 (0.77x)
lumRangeToJpeg8_1920_c: 5949.1 5977.5 (1.00x)
lumRangeToJpeg16_1920_c: 4446.8 5946.2 (0.75x)
NOTE: all simd optimizations for range_convert have been disabled.
they will be re-enabled when they are fixed for each architecture.
NOTE2: the same issue still exists in rgb2yuv conversions, which is not
addressed in this commit.
Diffstat (limited to 'tests/ref/seek')
-rw-r--r-- | tests/ref/seek/lavf-jpg | 8 | ||||
-rw-r--r-- | tests/ref/seek/vsynth_lena-mjpeg | 40 | ||||
-rw-r--r-- | tests/ref/seek/vsynth_lena-roqvideo | 2 |
3 files changed, 25 insertions, 25 deletions
diff --git a/tests/ref/seek/lavf-jpg b/tests/ref/seek/lavf-jpg index 545f59da57..78e8255fac 100644 --- a/tests/ref/seek/lavf-jpg +++ b/tests/ref/seek/lavf-jpg @@ -1,4 +1,4 @@ -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: -1 size: 25641 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: -1 size: 25633 ret:-EINVAL st:-1 flags:0 ts:-1.000000 ret:-EINVAL st:-1 flags:1 ts: 1.894167 ret:-EINVAL st: 0 flags:0 ts: 0.800000 @@ -6,7 +6,7 @@ ret:-EINVAL st: 0 flags:1 ts:-0.320000 ret:-EINVAL st:-1 flags:0 ts: 2.576668 ret:-EINVAL st:-1 flags:1 ts: 1.470835 ret: 0 st: 0 flags:0 ts: 0.360000 -ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos: -1 size: 25316 +ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos: -1 size: 25312 ret:-EINVAL st: 0 flags:1 ts:-0.760000 ret:-EINVAL st:-1 flags:0 ts: 2.153336 ret:-EINVAL st:-1 flags:1 ts: 1.047503 @@ -18,7 +18,7 @@ ret:-EINVAL st: 0 flags:0 ts:-0.480000 ret:-EINVAL st: 0 flags:1 ts: 2.400000 ret:-EINVAL st:-1 flags:0 ts: 1.306672 ret: 0 st:-1 flags:1 ts: 0.200839 -ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: -1 size: 25788 +ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: -1 size: 25799 ret:-EINVAL st: 0 flags:0 ts:-0.920000 ret:-EINVAL st: 0 flags:1 ts: 2.000000 ret:-EINVAL st:-1 flags:0 ts: 0.883340 @@ -26,5 +26,5 @@ ret:-EINVAL st:-1 flags:1 ts:-0.222493 ret:-EINVAL st: 0 flags:0 ts: 2.680000 ret:-EINVAL st: 0 flags:1 ts: 1.560000 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: -1 size: 25487 +ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: -1 size: 25489 ret:-EINVAL st:-1 flags:1 ts:-0.645825 diff --git a/tests/ref/seek/vsynth_lena-mjpeg b/tests/ref/seek/vsynth_lena-mjpeg index 71f798e929..41f0c615ea 100644 --- a/tests/ref/seek/vsynth_lena-mjpeg +++ b/tests/ref/seek/vsynth_lena-mjpeg @@ -1,46 +1,46 @@ -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11209 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11224 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11209 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11224 ret: 0 st:-1 flags:1 ts: 1.894167 -ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos: 592412 size: 14066 +ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos: 592510 size: 14069 ret: 0 st: 0 flags:0 ts: 0.800000 -ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos: 232652 size: 12269 +ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos: 232724 size: 12267 ret:-1 st: 0 flags:1 ts:-0.320000 ret:-1 st:-1 flags:0 ts: 2.576668 ret: 0 st:-1 flags:1 ts: 1.470835 -ret: 0 st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos: 453104 size: 13735 +ret: 0 st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos: 453244 size: 13732 ret: 0 st: 0 flags:0 ts: 0.360000 -ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos: 104118 size: 11213 +ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos: 104162 size: 11211 ret:-1 st: 0 flags:1 ts:-0.760000 ret:-1 st:-1 flags:0 ts: 2.153336 ret: 0 st:-1 flags:1 ts: 1.047503 -ret: 0 st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos: 307404 size: 12723 +ret: 0 st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos: 307478 size: 12725 ret: 0 st: 0 flags:0 ts:-0.040000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11209 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11224 ret: 0 st: 0 flags:1 ts: 2.840000 -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 620564 size: 14125 +ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 620688 size: 14145 ret: 0 st:-1 flags:0 ts: 1.730004 -ret: 0 st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos: 536264 size: 13966 +ret: 0 st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos: 536394 size: 13965 ret: 0 st:-1 flags:1 ts: 0.624171 -ret: 0 st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos: 184478 size: 11981 +ret: 0 st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos: 184556 size: 11973 ret: 0 st: 0 flags:0 ts:-0.480000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11209 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11224 ret: 0 st: 0 flags:1 ts: 2.400000 -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 620564 size: 14125 +ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 620688 size: 14145 ret: 0 st:-1 flags:0 ts: 1.306672 -ret: 0 st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos: 398934 size: 13340 +ret: 0 st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos: 399054 size: 13347 ret: 0 st:-1 flags:1 ts: 0.200839 -ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 59904 size: 10972 +ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 59930 size: 10980 ret: 0 st: 0 flags:0 ts:-0.920000 -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11209 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5652 size: 11224 ret: 0 st: 0 flags:1 ts: 2.000000 -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 620564 size: 14125 +ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 620688 size: 14145 ret: 0 st:-1 flags:0 ts: 0.883340 -ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos: 257220 size: 12407 +ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos: 257278 size: 12415 ret:-1 st:-1 flags:1 ts:-0.222493 ret:-1 st: 0 flags:0 ts: 2.680000 ret: 0 st: 0 flags:1 ts: 1.560000 -ret: 0 st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos: 480710 size: 13831 +ret: 0 st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos: 480846 size: 13843 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 137920 size: 11458 +ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 137982 size: 11451 ret:-1 st:-1 flags:1 ts:-0.645825 diff --git a/tests/ref/seek/vsynth_lena-roqvideo b/tests/ref/seek/vsynth_lena-roqvideo index 50a0a335c7..a10b74c4e5 100644 --- a/tests/ref/seek/vsynth_lena-roqvideo +++ b/tests/ref/seek/vsynth_lena-roqvideo @@ -1,4 +1,4 @@ -ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.000000 pos: 24 size: 26814 +ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.000000 pos: 24 size: 26626 ret:-1 st:-1 flags:0 ts:-1.000000 ret:-1 st:-1 flags:1 ts: 1.894167 ret:-1 st: 0 flags:0 ts: 0.800000 |