Libplacebo Versions Save

Official mirror of libplacebo

v6.338.2

3 months ago

This release fixes a number of minor issues with v6.338.1, in particular a fix for the new caching subsystem when using custom cache callbacks.

Fixes and performance improvements:

  • properly align AVFrame planes when using oddly-sized pixels
  • correct some reported GPU buffer size limits
  • properly report texture transfer failures
  • avoid ICC-related error spam
  • avoid using some deprecated APIs and syntax
  • fix pl_find_filter_* missing symbols
  • fix duplicate initialization of vulkan debug layers
  • fix assertion when using custom cache allocator API
  • avoid redundant scale shader variable declarations
  • avoid redundant linearization step when using sigmoid scaling
  • avoid generating redundant dependency on xxhash
  • fix possible integer overflow on 32-bit textures
  • fix cropped frame dimensions when using vulkan hwframes

v6.338.1

7 months ago

This release fixes a number of minor issues with v6.338.0, as well as a major regression of the frame mixing code.

Fixes and performance enhancements:

  • fix H.274 grain database PRNG
  • fix compilation on FreeBSD
  • fix unnatural peak detection flicker on mostly black samples
  • fix plplay 'Use detected luminance' checkbox
  • fix unnecessary recompilation when changing antiring strength
  • properly disable anti-ringing for non-negative filters
  • fix double-callback on sliced texture uploads
  • dispatch callback slightly sooner in pointer texture upload fallback
  • slightly improve saturation when tone mapping by large factors
  • various improvements to the benchmark
  • fix regression when frame mixing low FPS sources
  • update various misleading comments

v6.338.0

7 months ago

This release focuses on several major "quality of life" improvements for downstream users. These include an all-new options system, a new unified cache layer, and a new filter configuration API, as well as improvements to tone and gamut mapping, scaling and HDR peak detection.

The new options system greatly simplifies usage of the pl_render_params API, and allows saving/loading parameter presets at runtime, as well as exposing advanced options in a programmatic way.

The new cache layer unifies the old dispatch/renderer/icc cache systems into a single file which can be more easily saved/loaded at runtime, and also includes support for internal size limits, book-keeping and garbage collection.

The new filter API greatly simplifies the process of configuring custom filter kernels, and also augments each filter entry by extra metadata which can be used to make this API more understandable and simpler for end users. The default scalers have also been overhauled, and multiple scalers have been fixed, made faster, or otherwise improved.

In addition to this, libplacebo now uses a custom GLSL preprocessor to significantly speed up the runtime generation of complex shaders, faster built-in functions for parsing and printing numbers, as well as a significantly faster generic hash routine.

Additions:

  • add pl_test_pixfmt_caps to test AVPixelFormat<->GPU capabilities
  • add pl_vulkan_swapchain_params.disable_10bit_sdr to work around bugs
  • add pl_queue_estimate_fps/vps, pl_queue_num_frames and pl_queue_peek
  • add pl_tone_map_linear_light
  • add pl_gamut_map_softclip (equivalent to old pl_gamut_map_perceptual)
  • add pl_primaries_compatible and pl_primaries_clip
  • add pl_gamut_map_params.gamut_expansion
  • add helper macros to struct pl_color_adjustment and pl_icc_profile
  • add pl_filter_function.name and pl_filter_config.name/description
  • add pl_filter_config.radius/params/wparams/antiring
  • add pl_filter_config.allowed/recommended usage hints
  • add pl_filter_functions and pl_filter_configs
  • add pl_filter.radius_zero (size of main lobe)
  • add pl_filter_ewa_lanczossharp and pl_filter_ewa_lanczos4sharpest
  • add pl_hook_par.names and TYPE ENUM named parameters
  • add new options system in <libplacebo/options.h>
  • add pl_gamut_map_params.constants and pl_color_map_params.gamut_constants
  • add pl_tone_map_params.constants and pl_color_map_params.tone_constants
  • add pl_renderer_get_hdr_metadata
  • add new unified cache system in <libplacebo/cache.h>
  • add pl_gpu_set_cache
  • add pl_render_params.correct_subpixel_offsets
  • add pl_icc_update to update pl_icc_object more efficiently
  • add pl_frame.icc to eventually replace pl_frame.profile
  • add pl_frame_mix_nearest/current
  • add pl_frames_infer and pl_frames_infer_mix
  • add pl_shader_sample_hermite/gaussian
  • add pl_tex_transfer_params.no_import to bypass host pointer import
  • add new 'multigpu' demo to allow benchmarking GPU->GPU transfers, including roundtrips through a single GPU

Changes:

  • pl_source_frame.pts and pl_queue_params.pts are now double
  • anti-ringing now works for polar (EWA) filters
  • pl_deband_default_params.threshold lowered to 2.0 (TODO)
  • pl_icc_params.size_r/g/b are now int
  • pl_filter_config and pl_filter_function have been substantially refactored
  • deprecate/remove pl_filter_function_preset and pl_filter_preset
  • pl_peak_detect_params.smoothing_period == 0 now disables smoothing
  • deprecate pl_color_map_params.tone_mapping_param and pl_tone_map_params.param
  • remove pl_peak_detect_params.minimum_peak
  • pl_tone_map_auto is now an alias for pl_tone_map_spline
  • change pl_peak_detect_params.scene_threshold_low/high and smoothing_period default values to make peak detection much more responsive
  • remove pl_filter_config.filter_scale (set filter blur instead)
  • default to pl_filter_ewa_lanczossharp in high quality preset
  • default to pl_filter_lanczos in default preset
  • default to pl_filter_hermite for downscaling
  • make pl_render_high_quality_params.frame_mixer consistent with default
  • require C++20 for building
  • remove pl_pass_params.cached_program (use pl_cache instead)
  • deprecate pl_dispatch_save/load (use pl_cache instead)
  • deprecate pl_renderer_save/load (use pl_cache instead)
  • depreciate pl_frame.profile in favor of pl_frame.icc
  • remove pl_render_params.icc_params and ignore_icc_profiles
  • remove the redundant pl_filter_function_{bcspline,catmull_rom,mitchell, robidoux,robidouxsharp,bicubic} family of cubic splines, and instead add a single tunable pl_filter_function_cubic to replace them
  • remove pl_{render,sample_filter}_params.{lut_entries,polar_cutoff}
  • pl_filter.radius now always holds the true radius (after blurring/cutoff)
  • slightly adjust pl_deband_default_params.threshold/grain
  • plplay now has a new, and much better, options parsing code
  • pl_filter_nearest can now only be used for upscaling
  • pl_filter_box is now a separate filter instead of an alias for pl_filter_nearest

Fixes and performance enhancements:

  • shader stripping is now enabled by default
  • greatly improve performance of complex shader generation
  • fix some bugs related to pl_swapchain_colorspace_hint
  • fix meson picking wrong python version sometimes
  • fix contrast recovery sometimes producing illegal values
  • fix pl_filter_function_box radius to be more useful, and make pl_filter_nearest radius 0.5 instead
  • fix error using vulkan on system with broken synchronization2 layers
  • fix AV1 film grain for 4:4:4 files
  • fix build issues with UCRT on windows
  • fix allocation of large pages (e.g. very large images) on vulkan
  • fix runtime checks on windows 8+
  • fix CHROMA/ALPHA_SCALED hooks not working
  • fix pl_tex_transfer_params.buf_offset in texel fallback path
  • automatically split large texture transfers into slices
  • fix overly strict garbage collection on high FPS displays
  • fix crash on pl_queue_update with no frames
  • fix peak detection not working for files with buggy HDR10 metadata
  • fix peak detection not applying when HDR10+ metadata is present
  • fix peak detection luma coefficients
  • make peak detection ignore entirely black pixels (e.g. black bars)
  • fix calculation of filter blurs not correctly scaling the window
  • fix leaking vulkan headers path in pkg-config file
  • improve performance and correctness of numerical parsing/printing
  • fix textureLod error when using external or rectangle samplers
  • greatly improve performance of built-in hashing function
  • improve LUT generation performance by caching all shader LUTs
  • halve in-memory size of gamut mapping 3DLUTs
  • fix rendering of overlays when target has an ICC profile set
  • fix incorrect subpixel offset on multi-pass prescalers (e.g. NNEDI3)
  • fix pl_filter_function_hermite and pl_filter_hermite values
  • fix scaling of kaiser/quadratic/bicubic windows
  • improve performance of ortho scaling with all-positive filter kernels
  • improve performance and LUT accuracy when scaling with prematurely windowed (or heavily sharpened) filters
  • improve performance of gaussian and hermite scaling
  • improve accuracy of all scaler LUTs
  • frame mixers are now properly blurred when reducing FPS

v6.292.1

8 months ago

This minor release includes several important bug fixes to downscaler kernels, a new and improved default perceptual gamut mapping mode, and an overhaul of the plplay demo program's core timing loop. It also drops the requirement for VK_KHR_synchronization2, which was unnecessarily and prohibitively strict in practice.

Note that because this minor release does not change the public API, several new options related to the above changes are not yet exposed as part of this release.

Fixes and other enhancements

  • improve the quality of fallback tone-mapping (without state object)
  • implement fast path for saturation mapping
  • don't clip overlays during tone mapping / gamut conversion
  • enhance gamut 3DLUT visualization
  • fix aliasing when antiringing during downscaling
  • fix aliasing when downscaling with polar (EWA) filters
  • revert requirement for VK_KHR_synchronization2
  • fix possible queue underrun bug on very high fps sources
  • correctly support displays above 200 Hz
  • improve timing loop of plplay
  • add CPU metrics and frame statistics to plplay
  • fix build errors on 32-bit windows
  • correctly flush when submitting frame on opengl
  • fix bug when using contrast recovery with bilinear sampling
  • fix compilation warning on some platforms
  • properly handle interpolation on single frame files
  • fix memory leak of d3d11 helper buffer
  • fix vulkan debug_extra not being respected
  • remove unusable rxgxbxax10/12 formats
  • various fixes to the test framework
  • fix compute shaders being incorrectly enabled at too-low GLSL versions
  • fix capability masking when limiting max GLSL version
  • fix HLG source peak tuning logic when display luminance is known
  • fix unintended tone-mapping from SDR sources with embedded ICC profiles on unknown SDR displays
  • fix ICC profile luminance metadata being ignored on redraws when using pl_render_image_mix
  • improve quality of perceptual gamut mapper, and vastly decrease time to compute
  • increase default 3DLUT precision
  • fix numerical accuracy of pl_primaries_superset
  • disable gamut mapping if either colorspace does not describe a normal RGB colorspace (e.g. swapped channels from synthetic test ICC profiles)