From 1f3000b03c5ca8208858634ba57833d7dbb009cc Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Wed, 14 Jun 2017 20:06:56 +0200 Subject: vo_opengl: implement support for OOTFs and non-display referred content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This introduces (yet another..) mp_colorspace members, an enum `light` (for lack of a better name) which basically tells us whether we're dealing with scene-referred or display-referred light, but also a bit more metadata (in which way is the scene-referred light expected to be mapped to the display?). The addition of this parameter accomplishes two goals: 1. Allows us to actually support HLG more-or-less correctly[1] 2. Allows people playing back direct “camera” content (e.g. v-log or s-log2) to treat it as scene-referred instead of display-referred [1] Even better would be to use the display-referred OOTF instead of the idealized OOTF, but this would require either native HLG support in LittleCMS (unlikely) or more communication between lcms.c and video_shaders.c than I'm remotely comfortable with That being said, in principle we could switch our usage of the BT.1886 EOTF to the BT.709 OETF instead and treat BT.709 content as being scene-referred under application of the 709+1886 OOTF; which moves that particular conversion from the 3dlut to the shader code; but also allows a) users like UliZappe to turn it off and b) supporting the full HLG OOTF in the same framework. But I think I prefer things as they are right now. --- DOCS/man/input.rst | 4 ++++ DOCS/man/vf.rst | 14 ++++++++++++++ 2 files changed, 18 insertions(+) (limited to 'DOCS') diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index e0e9cf28fd..ef3ceb1fb5 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -1459,6 +1459,9 @@ Property list ``video-params/sig-peak`` The video file's tagged signal peak as float. + ``video-params/light`` + The light type in use as a string. (Exact values subject to change.) + ``video-params/chroma-location`` Chroma location as string. (Exact values subject to change.) @@ -1487,6 +1490,7 @@ Property list "primaries" MPV_FORMAT_STRING "gamma" MPV_FORMAT_STRING "sig-peak" MPV_FORMAT_DOUBLE + "light" MPV_FORMAT_STRING "chroma-location" MPV_FORMAT_STRING "rotate" MPV_FORMAT_INT64 "stereo-in" MPV_FORMAT_STRING diff --git a/DOCS/man/vf.rst b/DOCS/man/vf.rst index a76e327b8a..b9a3dd41d8 100644 --- a/DOCS/man/vf.rst +++ b/DOCS/man/vf.rst @@ -376,6 +376,20 @@ Available mpv-only filters are: The default of 0.0 will default to the source's nominal peak luminance. + ```` + Light type of the scene. This is mostly correctly inferred based on the + gamma function, but it can be useful to override this when viewing raw + camera footage (e.g. V-Log), which is normally scene-referred instead + of display-referred. + + Available light types are: + + :auto: Automatic selection (default) + :display: Display-referred light (most content) + :hlg: Scene-referred using the HLG OOTF (e.g. HLG content) + :709-1886: Scene-referred using the BT709+BT1886 interaction + :gamma1.2: Scene-referred using a pure power OOTF (gamma=1.2) + ```` Set the stereo mode the video is assumed to be encoded in. Takes the same values as the ``--video-stereo-mode`` option. -- cgit v1.2.3