Skip to content

Releases: haasn/libplacebo

v7.349.0

02 Jul 13:32
v7.349.0
Compare
Choose a tag to compare

This release introduces a number of minor and maintenance changes, and
bumps the major version to v7 in order to clean up old deprecations. The
main focus was on bug fixing and performance improvements, with some new
API additions as a side product of that.

Additions:

  • add pl_peak_detect_params.black_cutoff, fixing unnatural flickering from
    encoding noise near black
  • add pl_queue_params.drift_compensation (and PL_QUEUE_DEFAULTS), to help
    adjust for slight discrepencancies due to e.g. 0.1% differences between 60.00
    Hz and 59.94 Hz.
  • add pl_cache_signature() to test if a cache object needs to be updated
  • add pl_map_avdovi_metadata()
  • add PL_ALPHA_NONE, distinguishing itself from PL_ALPHA_UNKNOWN
  • add pl_frame_clear_tiles()
  • add pl_gpu_limits.max_mapped_vram
  • add pl_color_linearize() and pl_color_delinearize()
  • add pl_color_{primaries,system,transfer}_name(s)
  • add fourcc codes for AB48 and AR48
  • add support for dovi extension block parsing in utils/libav.h

Changes:

  • remove fields deprecated in libplacebo v5
  • deprecate pl_frame_map_avdovi_metadata(), see pl_map_avdovi_metadata() for
    a replacement
  • deprecate pl_render_params.skip_target_clearing and .blend_against_tiles,
    instead introduce new fields pl_render_params.background and .border, which
    can be set to an explicit value to control how the background and border are
    drawn (respectively).
  • ICC profiles with well-known transfer functions are now identified as such
  • White point adaptation is now done using CAT16, replacing CAT97.

Fixes and performance enhancements:

  • fix accidentally removed symbols (cubic samplers)
  • improve cache efficiency of plplay
  • fix segfault when writing to oddly sized vulkan buffers under some
    circumstances
  • fix various extension checks for GLES
  • fix rgba8 not being marked host-readable on GLES
  • fix bit shift of vulkan P010 frames
  • also allow built-in fast paths for custom filters which are equivalent to
    built-in filters
  • massively improve compilation time of large ortho samplers, by not unrolling
    past a certain point
  • fix build issues past certain versions of glslang
  • slightly modify debanding algorithm to reduce some blurring and increase
    performance
  • fix wrong primaries being selected for linear light BT.709 swapchains
  • fix non-compute polar sampling fallback
  • allow polar sampling up to 64x64, up from 32x32
  • make polar compute shader more flexible w.r.t hardware limits
  • avoid compute shaders on very large polar radius
  • fix exhausting mapped VRAM on non-resizable BAR devices
  • fix use-after-free race when using download callbacks
  • prefer peak detection over static metadata when inferring tone mapping state
  • fix use as meson subproject
  • clean up ICC metadata reporting to conform to normal libplacebo style
  • allow timer queries to work on GL (ES) 3.0+
  • fix GLSL version detection on GLES
  • fix cache coherency issues on d3d11
  • fix accidental rounding of sub-pixel offsets inside renderer
  • allow using xxhash as subproject
  • improve texture format sorting preference
  • add support for 16hf formats on GL
  • fix 32/64-bit cache mismatch on windows+d3d11
  • fix superfluous function load warning on vulkan

v6.338.2

22 Jan 18:02
v6.338.2
Compare
Choose a tag to compare

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

17 Oct 12:55
v6.338.1
Compare
Choose a tag to compare

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

26 Sep 11:01
v6.338.0
Compare
Choose a tag to compare

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

20 Aug 22:48
v6.292.1
Compare
Choose a tag to compare

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)