[FFmpeg-devel] [PATCH] avfilter/vf_scale: Do not set YUV color range for RGB formats

Mark Thompson sw at jkqxz.net
Tue Mar 27 00:56:47 EEST 2018


On 26/03/18 22:44, Michael Niedermayer wrote:
> On Mon, Mar 26, 2018 at 08:34:06AM +0200, Paul B Mahol wrote:
>> On 3/26/18, Michael Niedermayer <michael at niedermayer.cc> wrote:
>>> On Wed, Mar 21, 2018 at 09:18:21AM +0100, Paul B Mahol wrote:
>>>> On 3/20/18, Michael Niedermayer <michael at niedermayer.cc> wrote:
>>>>> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
>>>>> ---
>>>>>  libavfilter/vf_scale.c | 7 ++++++-
>>>>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
>>>>> index 9f45032e85..2f6fa4791d 100644
>>>>> --- a/libavfilter/vf_scale.c
>>>>> +++ b/libavfilter/vf_scale.c
>>>>> @@ -407,6 +407,7 @@ static int filter_frame(AVFilterLink *link, AVFrame
>>>>> *in)
>>>>>      AVFilterLink *outlink = link->dst->outputs[0];
>>>>>      AVFrame *out;
>>>>>      const AVPixFmtDescriptor *desc =
>>>>> av_pix_fmt_desc_get(link->format);
>>>>> +    const AVPixFmtDescriptor *out_desc =
>>>>> av_pix_fmt_desc_get(outlink->format);
>>>>>      char buf[32];
>>>>>      int in_range;
>>>>>
>>>>> @@ -497,7 +498,11 @@ static int filter_frame(AVFilterLink *link,
>>>>> AVFrame
>>>>> *in)
>>>>>                                       table, out_full,
>>>>>                                       brightness, contrast,
>>>>> saturation);
>>>>>
>>>>> -        out->color_range = out_full ? AVCOL_RANGE_JPEG :
>>>>> AVCOL_RANGE_MPEG;
>>>>> +        // color_range describes YUV, it is undefined for RGB
>>>>> +        if ((out_desc->flags & AV_PIX_FMT_FLAG_RGB) &&
>>>>> out_desc->nb_components != 1) {
>>>>> +            out->color_range = AVCOL_RANGE_UNSPECIFIED;
>>>>> +        } else
>>>>> +            out->color_range = out_full ? AVCOL_RANGE_JPEG :
>>>>> AVCOL_RANGE_MPEG;
>>>>>      }
>>>>>
>>>>>      av_reduce(&out->sample_aspect_ratio.num,
>>>>> &out->sample_aspect_ratio.den,
>>>>> --
>>>>> 2.16.2
>>>>>
>>>>
>>>> This is not optimal, as full color_range should remain full when not
>>>> changed.
>>>
>>> there is no range for rgb formats. The range is specific to YUV based
>>> formats.
>>> Thats, if iam guessing correctly what you meant. You did not really say
>>> which case you meant here. So maybe there is an issue and i misunderstand
>>> what you refer to
>>
>> Maybe not for swscale here but does exist otherwise.
> 
> It has no meaning for RGB. There is no limited range RGB
> also, the API defines it only for YUV. So if it had meaning for RGB its not defined
> what meaning that would be. The ranges for luma and chroma differ so its not
> natural or obvious how to extend it to RGB.
> Iam also not aware of any specification that defines limited range RGB
See HDMI, HD-SDI, CEA-861, pretty much anything related to sending RGB over wires in a non-PC context.

(No comment on whether it is useful to include it, but dismissing limited range RGB as not a thing is probably not a good idea.  I would kindof expect things like DeckLink to be using limited-range RGB everywhere, but I'm not familiar with the details there.)

- Mark


More information about the ffmpeg-devel mailing list