[FFmpeg-devel] [RFC] Bug in colorspace.c
Soft Works
softworkz at hotmail.com
Wed Jun 29 00:38:42 EEST 2022
Hi,
in colorspace.c, there are two functions with contradicting behavior
regarding reading/writing the max_luminance value from/to
AVMasteringDisplayMetadata. The code seems to be unchanged since
3 years:
1. ff_determine_signal_peak()
sd = av_frame_get_side_data(in, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA);
if (!peak && sd) {
AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)sd->data;
if (metadata->has_luminance)
peak = av_q2d(metadata->max_luminance) / REFERENCE_WHITE;
}
2. ff_update_hdr_metadata()
sd = av_frame_get_side_data(in, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA);
if (sd) {
AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)sd->data;
if (metadata->has_luminance)
metadata->max_luminance = av_d2q(peak * REFERENCE_WHITE, 10000);
}
The latter function writes the value as an AVRational with a denominator of
10000, but the former function doesn't multiply the value by 10000.
So - both cannot be right.
In fact, there seems to be some confusion about the base/range of this value.
I had found contradicting code somewhere in libva or Intel Media Driver
code a while ago, and I have also seen videos with both "kinds" of values.
This might be a chicken-egg issue, though: maybe those other files I've seen
were created by ffmpeg and subject to this bug. I'm not sure..
As I needed a practical rather than an academical solution, I ended up using a
check on the value range to determine whether to multiply by 10000 or not
(function 1). I won't submit this as a patch because somebody would shout out
"hack" anyway, while I see it more as an adaption to reality :-)
Anyway, the second function for writing the value should definitely do it in
the right way - unfortunately it can't do without a sane input parameter,
which in turn can only be ensured with said "hack".
For now, I just want to point at the problem as I don't have a clean solution
to offer, but I'd be interested in others' thoughts.
Best wishes,
softworkz
More information about the ffmpeg-devel
mailing list