ffmpeg/tests/ref/lavf
Ramiro Polla 384fe39623 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.
2024-12-05 21:10:29 +01:00
..
aiff
al
apng Revert "tests/fate: disable compression for zlib-based codecs" 2024-10-16 17:38:57 -03:00
apng.png Revert "tests/fate: disable compression for zlib-based codecs" 2024-10-16 17:38:57 -03:00
asf
ast
au
avi
bmp
caf
dfpwm
dpx
dv
dv_ntsc
dv_pal
flm
flv
gbrap16be.fits
gbrap.fits
gbrp10le.dpx
gbrp12le.dpx
gbrp16be.fits
gbrp.fits
gbrpf32be.pfm
gbrpf32le.pfm
gif
gray16be.fits swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats 2024-12-05 21:10:29 +01:00
gray16be.pam swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats 2024-12-05 21:10:29 +01:00
gray16be.png swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats 2024-12-05 21:10:29 +01:00
gray.fits
gray.pam
gray.xwd
grayf32be.pfm
grayf32le.pfm
gxf
gxf_ntsc
gxf_pal
ircam
ismv
jpg swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats 2024-12-05 21:10:29 +01:00
mka
mkv
mkv_attachment
mmf
monob.pam
monow.xwd
mov
mov_hybrid_frag
mov_rtphint
mp4
mpg
mxf
mxf_d10
mxf_dv25
mxf_dvcpro50
mxf_dvcpro100
mxf_ffv1
mxf_opatom
mxf_opatom_audio
none.gbrapf32le.exr
none.gbrpf32le.exr
none.grayf32le.exr
nut
ogg
pam
pbmpipe
pcx
peak_only.wav
peak.wav
pgm
pgmpipe
png Revert "tests/fate: disable compression for zlib-based codecs" 2024-10-16 17:38:57 -03:00
ppm
ppmpipe
qoi
qoipipe
rgb4_byte.xwd
rgb8.xwd
rgb48be.pam
rgb48be.png Revert "tests/fate: disable compression for zlib-based codecs" 2024-10-16 17:38:57 -03:00
rgb48le_10.dpx
rgb48le.dpx
rgb555be.xwd
rgb565be.xwd
rgba64le.dpx
rgba.pam
rgba.xwd
rle.gbrapf32le.exr
rle.gbrpf32le.exr
rle.grayf32le.exr
rm
rso
s16.voc
sgi
smjpeg swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats 2024-12-05 21:10:29 +01:00
sox
sun
swf
tga
tiff
ts
tta
ul
voc
w64
wav
wbmp
wtv
wv
xbm
xbmpipe
xwd
xwdpipe
y4m
zip1.gbrapf32le.exr
zip1.gbrpf32le.exr
zip1.grayf32le.exr
zip16.gbrapf32le.exr
zip16.gbrpf32le.exr
zip16.grayf32le.exr