avfilter/tonemap*: add ICtCp based tonemap method #430
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds ICtCp based tonemap to OpenCL, Metal and CUDA based tonemap filters, and will use the mode as the new default. On GPUs with lower specs, OpenCL and CUDA implementation will default to relative luminance mode. The Metal implementation does not have a performance tradeoff mode and will always default to ICtCp mode.
This also fixed attachment related issue on Metal when output is 10bit by always setting the attachement values.
The ICtCp mode's desat algorithm is different from other modes. The coefficient applied to the chroma is defined by a Gaussian Function in the form:
Where$I$ is the ICtCp intensity linearized by ST2084 EOTF, $p_{\text{desat}}$ is the desat parameter, $L_{\text{target}}$ is the target peak luminance (1.0 for SDR) and $L_{\text{peak}}$ is the HDR peak luminance for current frame.
The current curve is tuned to preserve more color detail to preserve natural looking than to aggressively turning bright colors into white, and is different from the initial curve implemented in #429.
Original
desat=0.5
in #429desat=0.5
currentThis curve is not a standardized practice and is purely my own creation, which means it could lead to unpleasant results for certain cases I've not tested on.
Changes
Issues
Fixes #429