New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 676054 link

Starred by 5 users

Issue metadata

Status: Archived
Owner:
Closed: Mar 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug

Blocking:
issue 622133
issue 638052
issue 667431
issue 696747



Sign in to add a comment

cc: Ensure that video color conversion matches in overlay and non-overlay modes

Project Member Reported by ccameron@chromium.org, Dec 20 2016

Issue description

DrawQuads that come from video are sometimes not composited using the GLRenderer, but rather, are promoted to "overlays".

The meaning of "overlay" differs across platforms:
 - on CrOS this refers to hardware overlay support
 - on Mac, this refers to CALayers or AVSampleBufferDisplayLayers
 - support also exists (or should exist) on Android

The issue here is as follows
 - the GLRenderer is capable of color conversion from any media color
   space to any output device color space
 - these overlay systems sometimes have less or no color conversion
   support
 - if the appearance of the media element differs between these two
   modes, then this can result in a frame-to-frame "flickering" as we
   enter and leave low power mode

It needs to be ensured that this flickering not happen. This can happen by:
 Option A: Not promoting media to an overlay if the overlay hardware
           (whatever it is on that platform) cannot perform color
           conversion itself
 Option B: Doing incorrect color conversion in the GLRenderer, so that
           it will match what the hardware overlay will do
 
I have a very strong opinion that, on mobile and on laptops, power consumption while watching video is far more important that correct color rendering, so we we should do "Option B".

Comment 2 by w...@chromium.org, Dec 21 2016

Cc: liber...@chromium.org
I think doing no color conversion in GLRenderer will result in Option B on Android. +liberato@?
+1 option B, +1 c#1.

android has no color space support that's available in a user-exposed API that i know about.  lots of "vendor defined" parts.

also, "not promoting" isn't really an option anyway on android.  the decoder either puts the decoded frame into a SurfaceView for overlay that's inaccessible to chrome, or it puts it somewhere that GLRenderer can read it but cannot be promoted with any power savings

Comment 4 by hubbe@chromium.org, Dec 21 2016

I guess we need to make a per-stream decision on how to display it.
If overlays are possible, and we decide to (try) to use it, we can make sure that the fallback path matches what the overlays do for any frame that doesn't end up using the overlays.


Blocking: 638052
Re c#1, I think that depends on the colorspaces involved.

For Rec.709 SDR content, even on "wide gamut" displays which in practice are generally <= 100% DCI-P3, I tend to agree.

For Rec. 2020 or HDR content, if we can't color manage this content we might as well indicate that it is not supported at all, and refuse to play it.

I have the "joy" of a display device that will take Rec.2020/HDR input but requires manually switching modes, so there's always some period where there's a mismatch.  sRGB content treated as Rec.2020/HDR input is a special brand of horrible.  (The inverse is pretty bad too).
Typed up rules for when, and when not to apply color correction here:

https://docs.google.com/document/d/1hAr9WPYbWyOxjIKA8YbKDHX4GwM5mY6WHDvpQdjO2z0/edit

Feedback welcome.
WRT WCG+Battery+NoOverlayColorCorrection: I believe that we should have no correction here. Battery life trumps everything.
Blocking: 696747
Blocking: -667966 667431
Status: Archived (was: Assigned)
This has been working for a long time on macOS. Windows has separate issues for DCOverlays that are currently open. Closing this as stale.

Sign in to add a comment