vo_opengl: implement more HDR tonemapping algorithms

This is now a configurable option, with tunable parameters.

I got inspiration for these algorithms off wikipedia. "simple" seems to
work pretty well, but not well enough to make it a reasonable default.

Some other notable candidates:

- Local functions (e.g. based on local contrast or gradient)
- Clamp with soft knee (linear up to a point)
- Mapping in CIE L*Ch. Map L smoothly, clamp C and h.
- Color appearance models

These will have to be implemented some other time.

Note that the parameter "peak_src" to pass_tone_map should, in
principle, be auto-detected from the SEI information of the source file
where available. This will also have to be implemented in a later
commit.
This commit is contained in:
Niklas Haas
2016-05-16 02:44:30 +02:00
parent 3cfe98c684
commit e047cc0931
5 changed files with 96 additions and 7 deletions

View File

@@ -1057,9 +1057,38 @@ Available video output drivers are:
``target-brightness=<1..100000>``
Specifies the display's approximate brightness in cd/m^2. When playing
HDR content, video colors will be scaled and clipped to this
brightness. The default of 250 cd/m^2 corresponds to a typical consumer
display.
HDR content, video colors will be tone mapped to this target brightness
using the algorithm specified by ``hdr-tone-mapping``. The default of
250 cd/m^2 corresponds to a typical consumer display.
``hdr-tone-mapping=<value>``
Specifies the algorithm used for tone-mapping HDR images onto the
target display. Valid values are:
clip
Hard-clip any out-of-range values (default)
simple
Very simple continuous curve. Preserves dynamic range and peak but
uses nonlinear contrast.
gamma
Fits a logarithmic transfer between the tone curves.
linear
Linearly stretches the entire reference gamut to (a linear multiple
of) the display.
``tone-mapping-param=<value>``
Set tone mapping parameters. Ignored if the tone mapping algorithm is
not tunable. This affects the following tone mapping algorithms:
simple
Specifies the local contrast coefficient at the display peak.
Defaults to 0.5, which means that in-gamut values will be about
half as bright as when clipping.
gamma
Specifies the exponent of the function. Defaults to 1.8.
linear
Specifies the scale factor to use while stretching. Defaults to
1.0.
``icc-profile=<file>``
Load an ICC profile and use it to transform video RGB to screen output.