mirror of https://github.com/mpv-player/mpv
e3d93fde2f
The current peak detection algorithm was very bugged (which contributed to the excessive cross-frame flicker without long normalization) and also didn't take into account the frame average brightness level. The new algorithm both takes into account frame average brightness (in addition to peak brightness), and also computes the values in a more stable/correct way. (The old path was basically undefined behavior) In addition to improving the algorithm, we also switch to hable tone mapping by default, and try to enable peak computation automatically whever possible (compute shaders + SSBOs supported). We also make the desaturation milder, after extensive testing during libplacebo development. I also had to compensate a bit for the representational differences between mpv and libplacebo (libplacebo treats 1.0 as the reference peak, but mpv treats it as the nominal peak), but it shouldn't have caused any problems. This is still not quite the same as libplacebo, since libplacebo also allows tagging the desired scene average brightness on the output, and it also supports reading the scene average brightness from static metadata (MaxFALL) where available. But those changes are a bit more involved. It's possible we could also read this from metadata in the future, but we have problems communicating with AVFrames as it is and I don't want to touch the mpv colorimetry structs for the time being. |
||
---|---|---|
.. | ||
context.c | ||
context.h | ||
d3d11_helpers.c | ||
d3d11_helpers.h | ||
hwdec.c | ||
hwdec.h | ||
lcms.c | ||
lcms.h | ||
osd.c | ||
osd.h | ||
ra.c | ||
ra.h | ||
shader_cache.c | ||
shader_cache.h | ||
spirv.c | ||
spirv.h | ||
spirv_shaderc.c | ||
user_shaders.c | ||
user_shaders.h | ||
utils.c | ||
utils.h | ||
video.c | ||
video.h | ||
video_shaders.c | ||
video_shaders.h |