mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-17 21:14:47 +00:00
384fe39623
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.
45 lines
826 B
Plaintext
45 lines
826 B
Plaintext
5c83d22a628d01c095704f58328f63c9 *tests/data/fate/jpg-icc.mjpeg
|
|
11016 tests/data/fate/jpg-icc.mjpeg
|
|
#tb 0: 1/25
|
|
#media_type 0: video
|
|
#codec_id 0: rawvideo
|
|
#dimensions 0: 128x128
|
|
#sar 0: 1/1
|
|
0, 0, 0, 1, 49152, 0xea4329bc
|
|
[FRAME]
|
|
media_type=video
|
|
stream_index=0
|
|
key_frame=1
|
|
pts=0
|
|
pts_time=0.000000
|
|
pkt_dts=0
|
|
pkt_dts_time=0.000000
|
|
best_effort_timestamp=0
|
|
best_effort_timestamp_time=0.000000
|
|
duration=1
|
|
duration_time=0.040000
|
|
pkt_pos=0
|
|
pkt_size=11016
|
|
width=128
|
|
height=128
|
|
crop_top=0
|
|
crop_bottom=0
|
|
crop_left=0
|
|
crop_right=0
|
|
pix_fmt=yuvj444p
|
|
sample_aspect_ratio=1:1
|
|
pict_type=I
|
|
interlaced_frame=0
|
|
top_field_first=0
|
|
repeat_pict=0
|
|
color_range=pc
|
|
color_space=bt470bg
|
|
color_primaries=unknown
|
|
color_transfer=unknown
|
|
chroma_location=center
|
|
[SIDE_DATA]
|
|
side_data_type=ICC profile
|
|
size=3144
|
|
[/SIDE_DATA]
|
|
[/FRAME]
|