FFmpeg/libswscale
Niklas Haas dddf536d3d swscale/cms: add color management subsystem
The underlying color mapping logic was ported as straightforwardly as possible
from libplacebo, although the API and glue code has been very heavily
refactored / rewritten. In particular, the generalization of gamut mapping
methods is replaced by a single ICC intent selection, and constants have been
hard-coded.

To minimize the amount of overall operations, this gamut mapping LUT now embeds
a direct end-to-end transformation to the output color space; something that
libplacebo does in shaders, but which is prohibitively expensive in software.

In order to preserve compatibility with dynamic tone mapping without severely
regressing performance, we add the ability to generate a pair of "split" LUTS,
one for encoding the input and output to the perceptual color space, and a
third to embed the tone mapping operation. Additionally, this intermediate
space could be used for additional subjective effect (e.g. changing
saturation or brightness).

The big downside of the new approach is that generating a static color mapping
LUT is now fairly slow, as the chromaticity lobe peaks have to be recomputed
for every single RGB value, since correlated RGB colors are not necessarily
aligned in ICh space. Generating a split 3DLUT significantly alleviates this
problem because the expensive step is done as part of the IPT input LUT, which
can share the same hue peak calculation at least for all input intensities.
2024-12-23 12:33:43 +01:00
..
aarch64 swscale/aarch64: add neon {lum,chr}ConvertRange16 2024-12-05 21:10:29 +01:00
arm swscale/internal: group user-facing options together 2024-11-21 12:49:56 +01:00
loongarch swscale/range_convert: saturate output instead of limiting input 2024-12-05 21:10:29 +01:00
ppc swscale/ppc: disable YUV2RGB AltiVec acceleration 2024-12-02 02:51:39 +01:00
riscv swscale/range_convert: saturate output instead of limiting input 2024-12-05 21:10:29 +01:00
tests tests/swscale: allow nonzero positive return codes from sws_scale_frame() 2024-12-18 17:30:48 +01:00
x86 swscale: add ICC intent enum and option 2024-12-23 12:33:43 +01:00
alphablend.c swscale/internal: group user-facing options together 2024-11-21 12:49:56 +01:00
bayer_template.c swscale/internal: constify SwsFunc 2024-10-07 19:51:34 +02:00
cms.c swscale/cms: add color management subsystem 2024-12-23 12:33:43 +01:00
cms.h swscale/cms: add color management subsystem 2024-12-23 12:33:43 +01:00
csputils.c swscale/csputils: add internal colorspace math helpers 2024-12-23 12:33:43 +01:00
csputils.h swscale/csputils: add internal colorspace math helpers 2024-12-23 12:33:43 +01:00
gamma.c swscale: rename SwsContext to SwsInternal 2024-10-24 22:50:00 +02:00
graph.c swscale: add ICC intent enum and option 2024-12-23 12:33:43 +01:00
graph.h swscale/graph: add new high-level scaler dispatch mechanism 2024-11-25 11:02:16 +01:00
half2float.c swscale/input: add rgbaf16 input support 2022-08-19 22:09:36 +02:00
hscale.c swscale/range_convert: fix mpeg ranges in yuv range conversion for non-8-bit pixel formats 2024-12-05 21:10:29 +01:00
hscale_fast_bilinear.c swscale: rename SwsContext to SwsInternal 2024-10-24 22:50:00 +02:00
input.c swscale/internal: group user-facing options together 2024-11-21 12:49:56 +01:00
libswscale.v build: Change structure of the linker version script templates 2016-05-29 16:43:11 +02:00
log2_tab.c
Makefile swscale/cms: add color management subsystem 2024-12-23 12:33:43 +01:00
options.c swscale: add ICC intent enum and option 2024-12-23 12:33:43 +01:00
output.c swscale/output: fix bilinear yuv2rgb chroma interpolation 2024-12-21 10:57:54 +01:00
rgb2rgb.c swscale/swscale_unscaled: add unscaled x2rgb10le to packed RGB 2024-11-06 17:34:32 -03:00
rgb2rgb.h swscale/swscale_unscaled: add unscaled x2rgb10le to packed RGB 2024-11-06 17:34:32 -03:00
rgb2rgb_template.c swscale/swscale_unscaled: add unscaled conversion for AYUV/VUYA/UYVA 2024-11-02 15:01:31 -03:00
slice.c swscale/slice: fix init of 32 bpc planes 2024-12-16 12:21:55 +01:00
swscale.c swscale/utils: add HDR metadata to SwsFormat 2024-12-23 12:33:43 +01:00
swscale.h swscale: add ICC intent enum and option 2024-12-23 12:33:43 +01:00
swscale_internal.h swscale: add ICC intent enum and option 2024-12-23 12:33:43 +01:00
swscale_unscaled.c swscale/unscaled: allow semiplanar copies 2024-12-23 11:32:02 +01:00
swscaleres.rc
utils.c swscale/utils: fix XYZ primaries tagging 2024-12-23 12:33:43 +01:00
utils.h swscale/utils: add helper function to infer colorspace metadata 2024-12-23 12:33:43 +01:00
version.c lib*/version: Use static_assert for static asserts 2024-03-31 00:08:42 +01:00
version.h swscale: add ICC intent enum and option 2024-12-23 12:33:43 +01:00
version_major.h libs: bump major version for all libraries 2024-03-07 11:29:43 -03:00
vscale.c swscale/internal: group user-facing options together 2024-11-21 12:49:56 +01:00
yuv2rgb.c swscale/internal: group user-facing options together 2024-11-21 12:49:56 +01:00