Release 0.42.0
==============

We are excited to announce the release of mpv 0.42.0.

Key highlights:

* libcurl based network backend with HTTP/2, HTTP/3 and connection reuse
* DVD-Video, Blu-ray HDMV and BD-J menu navigation
* DVD-Audio playback
* Direct playback of .iso images of DVD-Video, DVD-Audio and Blu-ray discs
* Dolby Vision Profile 7 enhancement layer support in `gpu-next`
* MPEG-TS programs and HLS variants are exposed as editions
* DSD-over-PCM (DoP) passthrough with `--audio-spdif=dsd`
* Support for SRV3 (YouTube) subtitles via subrandr library
* Context menu populated from the new `menu.conf`, bound to right click
* `floating` OSC layout with Fluent icons (`--script-opts=osc-layout=floating`)
* API that allows integration between the OSC and (third-party) thumbnailer scripts
* Wayland session management
* Wayland color management through the protocol instead of the Vulkan API
* scRGB output with `--target-trc=scrgb`
* Improved HDR colorspace signalling on DRM (Linux)
* D3D11 render API backend for libmpv
* Reworked terminal video outputs (`sixel`, `kitty` and `tct`)
* AMD Frame Rate Conversion filter (`--vf=amf_frc`)
* Rewritten display-sync audio drift compensation
* `--tls-verify` is enabled by default

This release requires FFmpeg 6.1 or newer and libplacebo 7.387.0 or newer.

# Features

## New

- sub: add subrandr renderer support
- video/filter/vf_amf: add AMD Frame Rate Conversion filter
- mac/common: add support for transparent rendering
- context_menu.lua: implement key hints
- menu.conf: add this file
- select.lua: populate the context menu
- input.conf: add context menu bindings
- vo_gpu_next: add scRGB support
- video/out/opengl/context_wayland: export preferred colorspace
- vo_dmabuf_wayland: add BT.2100 mapping
- wayland_common: add scRGB support
- mpv-osd-symbols: add some Fluent UI System Icons to mpv font
- osc.lua: add `floating` layout
- vo_gpu_next: add stereo osd support
- demux_lavf: add support for programs
- demux_timeline: add support for programs
- vo_gpu: initial support for tunable parameters
- vo_gpu: add support for DEFINE and ENUM parameters
- osc: define and add support for "preview" api
- demux/packet: add support for SMPTE 2094-50 metadata
- vo_gpu: support parameters in RPN expressions
- demux_playlist: add support for 'strm' playlist
- wayland: implement session management
- demux/packet: add support for LCEVC ITU-T35 payloads
- demux_lavf: add support for stream groups
- video: merge the tiles of grid heif and avif images
- stream_curl: add libcurl-based stream backend
- demux_lavf: route nested HTTP opens through the curl backend
- stream_curl: use for ftp/ftps
- video/out/x11_common: add --focus-on support in X11
- hwdec_d3d11va: support 4:4:4 and high bit depth zero-copy formats
- demux_mkv: support demuxing native VC-1 streams
- stream_curl: add support for Icecast metadata
- f_enhancement_pair: add filter to match frames of separate video tracks
- vo_gpu_next: upload/map EL frame
- demux_lavf: add support for splitting EL track from in-band
- demux_mkv: add support for splitting EL track from in-band
- stream_env: add new stream to read from environment variables
- audio/filter: implement lavfi-tempo leveraging lavfi's atempo/ascale
- sd_lavc: add support for DVD sub highlight
- stream_dvdnav: implement DVD menu navigation
- stream_bluray: implement HDMV menu navigation
- demux_disc: add a synthetic "Disc Menu" edition
- stream_bluray: add BD-J menu support
- stream_dvdnav: add support for still frames
- stream_bluray: add support for still frames
- stream_dvda: add DVD-Audio playback support
- stream_dvda: expose DVD-Audio still images as a cover-art video track
- stream: auto-detect .iso DVD-Video, DVD-Audio and Blu-ray images
- vo_{gpu,gpu_next}/vulkan: enable extensions required for vf_fruc_vulkan
- audio/format: add raw DSD sample format
- ao_wasapi: add DSD-over-PCM (DoP) output support
- audio: add DSD-over-PCM pass-through
- mp_image: read stereo 3D layout from AV_FRAME_DATA_STEREO3D
- demux_lavf: read the stereo 3D mode from the stream side data
- video/out: add a swapchain for terminal VOs
- vo_{sixel,tct,kitty}: present frames through the terminal swapchain
- stream_aes_ctr: add aes-ctr:// protocol
- libmpv: add D3D11 render API backend
- vo_drm: add support for RGB565
- mp_image: support linear light XYZ

## Changed

- wayland: bump libwayland minimum version to 1.22
- wayland: bump wayland-protocols minimum version to 1.38
- common/msg: allow only SGR sequence in terminal output
- video/out/vulkan/context_wayland: implement color_depth
- vo_gpu_next: undo dither-depth=auto meaning 8bpc for SDR when undetected
- common/playlist: store normalized playlist filenames
- player/loadfile: never autoselect tracks with wrong PID
- context_drm_egl: use target_csp to signal HDR
- vo_gpu_next: set color directly using Wayland protocol
- wayland_common: set luminances
- meson: bump minimum libdrm version to 2.4.114
- vd_lavc: remove Vulkan hwdec from auto-safe selection
- player/video: rewrite display-sync audio drift compensation
- player/command: hide dependent tracks
- input/dnd: move built-in drag and drop handling to mpv client
- video/decode: enable APV hwdec by default
- input.conf: bind right click to context menu
- stream_curl: require libcurl 7.88.0
- vo_gpu_next: follow reference white system setting
- vo: prefer dmabuf_wayland over other fallback VOs
- vo_gpu_next: make subtitles / osd also follow system reference white
- f_decoder_wrapper: prefer bitstream stereo 3D layout over container tag
- vulkan: bump minimum required Vulkan headers to 1.4.309
- meson: prefer LuaJIT over PUC Lua
- meson: bump min libplacebo version to v7.387.0

## Removed

- options.lua: stop searching in lua-settings
- context_angle: remove the D3D9 renderer


# Options and Commands

## Added

- player/command: add subrandr-version property
- command: add libplacebo-version property
- command: add the default-menu property
- stats.lua: add track_info_selected_only script option
- command: add track-list/N/demux-duration property
- mp.input: allow async completions
- command: let playlist-play-index current preserve file-local-options
- mp.input: allow clients to override console.lua script-opts
- player/loadfile: add on_loaded hook
- osc.lua: add audioonlyscreen script option
- osc.lua: add `dynamic_margins`, `sub-margin`, `osd-margin`, `osc-icon_style` options
- command: add update-clipboard command
- player/command: add env property
- player/command: add default-value/choices arg fields to command-list
- vo_gpu_next: add image-subs-hdr-peak=video-dynamic/video-static
- context_menu.lua: set user-data/mpv/context-menu/open
- command: allow metadata to be set manually
- player/{lua,javascript}: add `mp.utils.terminal_display_width` function
- osc.lua: add option to configure skip_forward/backward buttons
- osc.lua: make window control buttons action customizable
- context_menu.lua: add background_alpha script-opt
- sub: add sub-lines property
- osc.lua: add box width option for box and slimbox layouts
- demux_{lavf,timeline}: add `--flatten-editions`
- input: add --input-builtin-drag-and-drop option
- command: add dropped-file property
- demux: add `--demuxer-hysteresis-bytes`
- stream_curl: add `--curl-enabled` option
- select.lua: add keep-open argument to select bindings
- vf_format: add `vf=format=enhancement-layer` option
- options: add secondary-sub-scale
- options: add --playlist-inherit-options option
- command: add colorspace and luminance arguments to overlay-add
- options: add `disc-menu` option
- player/command: add `disc-menu-active` property
- player/command: add `discnav` command and bind default keys
- osc.lua: make wheel commands on the seekbar configurable
- stream_bluray: add --bluray-key-file
- stream_bluray: add --bluray-min-title-length
- stream_bluray: add --bluray-region and --bluray-uo-restriction
- player/command: add commentary track flag support in commands
- player/command: add more disc navigation actions
- player/command: make property playlist/N/title writable
- lua: utils.format_json: add optional pretty argument
- vo_gpu_next: use pl_color_map_params.tone_constants
- vo_gpu_next: expose mastering_clip and film_strength color_map params

## Changed

- player/command: refactor loadfile and loadlist commands to use flags
- f_auto_filters: rework --deinterlace=auto option
- player: make effective image_display_duration playback_speed aware
- builtin.conf: enable antiringing in high quality profile
- vf_d3d11vpp: rename `ivctc` to `ivtc`
- player/command: apply `expand-properties` modifier also for string lists
- video/out/win_state: don't move window when force-window-position=no
- options: target-gamut now accepts custom CIE xy primaries
- options: allow selecting workspace using `--geometry` without specifying size
- player/screenshot: validate strftime format string
- input/cmd: use _name for command name in mpv_command_node
- demux_playlist: only autocreate on regular file
- ytdl_hook.lua: default to all_formats=yes
- etc/builtin.conf: change gui mode to idle=yes
- options: make player-operation-mode readable as a property
- options: enable `tls-verify` by default
- demux_lavf: change demuxer-lavf-{probesize,buffersize} to OPT_BYTE_SIZE
- player/command: make `track-list/N/ff-index` optional
- input/ipc-win: allow Windows handles for --input-ipc-client
- vd_lavc: derive hwdec surface pool size from VO requirements
- stream_bluray: use 1-based angle, same as in DVD
- stream_curl: use the Content-Disposition file name as the filename
- ytdl_hook: pass a default format again
- vf_format: make stereo-in=mono override the source mode
- m_property: sort the property list and resolve names once
- stream_dvdnav: set the VM language registers from --alang and --slang

## Deprecated

- vf_format: deprecate `--vf=format=sig-peak`
- mp.input: deprecate log_error()
- vo: officially deprecate vo_vaapi

## Removed

- console.lua: remove selected_color and selected_back_color
- console.lua: remove undocumented `dont_bind_up_down` option
- osc.lua: use window title for window controls from mpv core
- command: remove the deprecated time-start property
- lua: remove the deprecated error field from end-file


# Fixes and Minor Enhancements

- mac/{remote,touchbar}: remove manual 1 second rate limit of position property
- screenshot: correctly detect hardware frame
- sub/draw_bmp: fix rgba alpha blending
- console.lua: implement horizontal scroll
- demux_playlist: add base paths when adding playlist entries
- demux_playlist: expand tilde placeholders in playlist files
- command: set the language of added tracks from the filename
- command: remember the language when reloading tracks
- vo_gpu{,_next}: fix overriding scaling parameters for inherited kernels
- player/command: fix repeatable frame stepping with the seek argument
- d3d11: support `--d3d11-output-format` fully for `gpu-next`
- wayland: handle all outputs disappearing without segfaulting
- select.lua: sort the track submenu
- vf_d3d11vpp: fix deinterlacing
- vf_d3d11vpp: set output format for NVIDIA RTX Video HDR
- {demux,player}: expose original and commentary track flags
- screenshot: percent decode filename if it's a URI
- input.conf: bind Ctrl+r to reload the current file
- osc.lua: make top/bottom bar show independently on mouse proximity
- auto_profiles.lua: evaluate conditional profiles on on_loaded hook
- command: avoid crashing the player with mmap
- w32_common: refactor window resizing
- video/vaapi: mark nvidia-vaapi-driver as emulated driver
- mac/window: fix white lines around screen with non-native fullscreen
- osc.lua: show window controls in idle
- Meson: add appropriate install_tag to each target
- video/out/x11_common: fix BadAtom error when getting atom name
- player/screenshot: support %s date format on all platforms
- input/ipc-unix: don't delete file for abstract sockets
- osdep/io: make getenv case insensitive on windows
- player/external_files: use natural sort for comparing filenames
- player/external_files: fix --cover-art-whitelist priority
- menu.conf: add OSC layout selection
- vo_gpu_next: fix image subtitle hdr peak
- ytdl_hook.lua: set the title in metadata
- msg: sanitize term title and block C1 controls and DEL
- w32_common: support initial --fs and --window-maximized
- vf_vapoursynth: update for VapourSynth R74
- sub/dec_sub: de-duplicate overlapping sub lines
- select.lua: add select-secondary-subtitle-line
- demux: enrich edition titles with codec/resolution/bitrate info
- demux_{lavf,timeline}: consider audio only HLS when selecting edition
- demux_lavf: map `comment` to stream title
- vo_gpu_next: fix upload synchronization
- ra_gl: fix memory leak
- demux/packet_pool: incrementally free old packets on pop
- wayland: force redraw on every configure when in toplevel resize state
- vo_gpu_next: always cache frames in paused state and never interpolate
- stream/cookies: allow reading cookies not only from a local file
- demux_libarchive: apply --directory-filter-types to files in archives
- demux_cue: fix audio file lookup inside subdirectory
- ytdl_hook.lua: map ass/srt subtitles
- ao_pipewire: avoid deadlock when starting thread loop
- sub/sd_ass: subtitle timing rounding errors
- meson: consider only 'v0.*' tags when computing the version
- demux_timeline: fix Twitch VOD timestamps being offset by ~60 seconds
- player: fix cover-art-files overriding embedded video tracks
- subprocess-posix: use clone when available
- demux_mkv: don't apply AVI b-frame delay compensation to VfW tracks
- ytdl_hook: use native http-proxy option instead of lavf option
- ytdl_hook: defer loading until the formats become available
- video/d3d: exclude HEVC on known crashing Intel drivers
- video/d3d: exclude VP9 on known broken Intel drivers
- {select,console}.lua: release memory of menu items after menu closing
- vf_d3d11vpp: enable NVIDIA RTX Video only for SDR input
- options: store audio/sub delay in doubles instead of floats
- osxbundle: fix a wrong vulkan search path
- vo_gpu_next: ignore reference white for screenshots
- ao_pipewire: treat init timeout as failure instead of success
- console.lua: speed up filtering of selectable items
- demux: interrupt blocking reads whose result would be discarded
- ad_spdif: recreate spdif muxer on reset
- osdep/w32_register: add a DVD-Audio AutoPlay handler
- vo_gpu_next: keep hwdec frames mapped while the queue holds them
- stream_file: don't report a size for pipes and sockets
- osdep/path-win: expand `~~exe_dir/` on portable mode
- demux_lavf: read HLS and DASH manifests through the stream
- stream_slice: don't read past the end of the slice
- meson: respect -Dvapoursynth=disabled for vapoursynth-script
- osdep/win32/smtc: fix hang on exit before the window is created
- demux_mkv: fall back to the first cluster for seeks before the index
- hwdec_drmprime_overlay: make the framebuffer the whole frame
- stream/network: accept ICY headers without a space after the colon
- context_drm_egl: handle set_color() with a NULL hint
- context_drm_egl: keep allow_modeset until the color commit is submitted
- osdep/io: restore umask-based file creation permissions
- wayland: use configure bounds in window geometry
- vo_drm: fix hang when routine wakeups fill VT pipe
- terminal: serialize terminal output between the status line and the VOs
- vo_{sixel,kitty}: draw the video into a frame the size of the canvas
- terminal: redraw the terminal VOs when the terminal is resized
- terminal-win: ask the terminal for its cell size under ConPTY
- sws_utils,zimg: keep the scalers across frames with dynamic HDR metadata
- bash-completion: complete aliases and list actions like their target
- osdep/language-win: advance through preferred UI languages
- demux_playlist: resolve relative entries against the url after redirects
- vo_gpu: opengl: support GL_EXT_framebuffer_object
- vo_gpu: opengl: use R8/RG8 formats on GLES 2.0 and GL 2.1
- d3d11/context: resize buffers when DXGI leaves exclusive fullscreen
- vo_gpu_next: only re-upload OSD textures when they change
- vo_gpu: decode XYZ into the tagged primaries
- ytdl_hook: default cookies without a Domain to the host of origin
- osdep/win32/smtc: fix crash at exit when another thread owned the MTA
- win32/smtc: allow toggling at runtime
- mac/input: only filter repeated key down events
- mac/menu: set the window menu of the NSApp for default menu items
- ytdl_hook: map vp09 codec strings to vp9
- stream_lavf: mark rtsp:// URLs as network streams
- stream_lavf: open rtp:// URLs with the lavf rtp demuxer
- stream_bluray: set the player language settings from --alang and --slang
- stream_bluray: use the disc's chapter names when it has them
- demux_disc: fix the DVD subtitle palette conversion
- ytdl_hook: skip subtitles that need a yt-dlp downloader
- ao_pipewire: advertise unknown layouts as AUX channels
- ao_pulse: map unknown layouts onto the sink's channel positions
- ao_wasapi: request unknown layouts as DirectOut
- ao_openal: fix the 6.1 channel order
- ao_alsa: map the top side and bottom channel positions
- command: fix infinite recursion with a list property in term-status-msg
- sub/sd_ass: deduplicate packets without file position by content hash
- misc/path_utils: normalize win32 paths with GetFullPathNameW()
- options/parse_commandline: glob only arguments with wildcards on win32
- player: show the first frame at its time when audio already plays
- player: fall back to the next track when a decoder fails to initialize
- vo_dmabuf_wayland: ignore rotations that aren't multiples of 90
- stats.lua: fix keybind display searching
- wayland: scale initial window size hint
- ao_alsa: avoid possible playback freeze on xrun
- demux_mkv: use block timestamps as PTS for codecs that don't reorder
- player: preserve lavfi-complex when reinitializing VO
- context_drm_egl: allow fallback to GBM surface with implicit modifiers
- player/video: refresh just loaded images on filter changes
- ao_coreaudio_chmap: prioritise preferred stereo layout over default
- ao_coreaudio: reload ao on device change
- player/video: don't wait for the last frame's duration with --untimed
- subprocess-posix: fix deadlock on large stdin writes
- ipc-unix: create IPC sockets with CLOEXEC
- input/ipc-unix: keep listening after transient accept() errors


This listing is not complete. Check DOCS/client-api-changes.rst for a history
of changes to the client API, and DOCS/interface-changes.rst for a history
of changes to other user-visible interfaces.

A complete changelog can be seen by running `git log v0.41.0..v0.42.0`
in the git repository or by visiting
<https://github.com/mpv-player/mpv/compare/v0.41.0...v0.42.0>.
