DRM COLOR_RANGE property

Jyri Sarha jsarha at ti.com
Wed Jul 4 11:19:18 UTC 2018


On 03/07/18 19:18, Russell King - ARM Linux wrote:
> Can someone provide a deeper explanation about exactly what this
> property represents please?
> 
> Does this represent the range of YCbCr values _into_ a YCbCr-to-RGB
> conversion (in other words, the range of values in the framebuffer),
> or the expected output range from the conversion?
> 

Yes, it to describe the YCbCr color encoding used in the buffer given to
the plane, nothing more. It should then be up to the driver and display
HW to decide what to do with the information. But of course since there
is currently no way to tell the range of the RGB buffers used, the
working assumption is that the RGB buffers are all full range and the
blending is done accordingly.

It should be easy enough to extend the existing enums, or to create
completely new ones, for information about the RGB buffers range.
Extending has a downside of adding nasty dependency between the
framebuffer format and the encoding properties.

The output side is then another matter.

Best regards,
Jyri

> This matters, because a "limited", (iow, eg, BT601 compliant YCbCr)
> framebuffer where the Y signal is between 16..235 being displayed
> on a full-range RGB output would need different conversion from
> needing a limited-range RGB output.
> 
> If it is indeed the output, then why is this a property of the plane?
> Is that not a property of:
> 
> (a) whether the plane is being blended or overlaid onto a graphics
>     plane which uses full-range RGB
> (b) the properties of the output(s) to which the plane is being
>     displayed.
> 
> IOW, it seems that the output of the CSC is more to do with what's
> downstream of the plane than with the plane itself.
> 
> For example, take this situation:
> 
> plane 0 - graphics, full range RGB
>                                   >-- CRTC --> HDMI sink only supporting
> plane 1 - video, limited range YUV              limited range RGB
> 
> In order to display the graphics correctly in that scenario, the HDMI
> output needs to compress the RGB 0-255 range down to 16..236 to be
> compliant.  If the video is limited range, and the CSC produces a
> limited range RGB output, then plane 1 gets its range further
> compressed at the HDMI output, which surely is undesirable.
> 
> It would surely be better, if it's not possible to map the range of
> plane 0 to limited range, to instead expand the YUV range and then
> recompress it at the HDMI output to match the capabilities of the
> attached source.
> 
> It also seems logical that describing the range of the RGB plane would
> also be sane - if the application is limiting graphics RGB to 16..235,
> then you'd want the CSC output to do the same and there'd be no need
> for any range expansion or compression.
> 
> I'd personally like drm_plane_create_color_properties() to allow
> creation of COLOR_ENCODING without COLOR_RANGE (iow, supported_ranges
> being zero) until COLOR_RANGE is better defined than it is at present.
> 
> Thoughts?
> 
> I'm bringing this up, because the hardware I have has a CSC that
> accepts BT601 and BT709 formats, controlled by a single bit.  Another
> bit controls whether the CSC produces 0..255 output or 16..235 output.
> That is then blended/overlaid with the graphics plane (0..255) and
> sent to the output.  Having a "limited range" YUV plane produce
> 16..235 range output makes it look low-contrast compared to the
> graphics, which is what would be expected - "16" is not black
> compared to the black of the graphics in the same way that "235" is
> not white compared to the graphics.
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki


More information about the dri-devel mailing list