# Release 0.29.1

- Fixes and Minor Enhancements

  - af_rubberband: Fix for A-V drift on seeking.

  - demux_lavf: Fix EDL playback of certain DASH streams.

  - demux_lavf: Mark v4l streams as not seekable.

  - demux_raw: Fix for gapless playback from raw audio input.

  - encode: Fix for crashes in case of failure to write to output.

  - encode: Fix for encoding when utilizing lavfi-complex.

  - Fix to strip HDR peak metadata if attached to SDR video (#6111)

  - manpage: Misc fixups.

  - stream_{smb,file}: Fix for partial writes to buffers.

  - stream_libarchive: Fix hang when an out-of-bound seek happens.

  - vo_gpu: Fix for corruption when multiple compute shaders override each others' block sizes (#6083).

  - ytdl_hook: Always load "ytdl://" URLs with ytdl_hook first.

  - ytdl_hook: Fix audio streams not being picked up for some sites.

# Release 0.29.0

- Features

  - Added

    - vo_gpu: make screenshots use the GL renderer

    - ytdl_hook: support native dash demuxer, if present

  - Changed

    - audio: change format negotiation, remove channel remix fudging

    - client API: deprecate opengl-cb API and introduce a replacement API

    - demux: lower demuxer cache default sizes from 400MB/400MB to 50MB/150MB

    - scripting: change when/how player waits for scripts being loaded

    - vo_gpu: various improvements to HDR peak detection

    - vo_gpu: various improvements to HDR tone mapping

    - ytdl_hook: parse youtube playlist urls to set start index if --ytdl-raw-option=yes-playlist= is specified

  - Deprecated

    - af_lavrresample: deprecate this filter

- Options and Commands

  - Added

    - add a number of --audio-resample-* options, which should from now on be used instead of --af-defaults=lavrresample:

    - ao/openal: --openal-direct-channels

    - command: add --osd-on-seek option defaulting to bar

    - command: add a change-list command

    - options: add --http-proxy

    - options: add a builtin low-latency profile

    - video: add option to reduce latency by 1 or 2 frames

    - vo_gpu: introduce --target-peak

  - Changed

    - command: change cycle-value command behavior

    - config: replace config dir lua-settings/ with dir script-opts/

    - options: --lavfi-complex now requires uniquely named filter pads

    - options: --ytdl is now always enabled, even for libmpv

    - options: make --deinterlace=yes always deinterlace

    - options: slightly improve filter help output for lavfi bridge

    - vo: rename --vo=opengl-cb to --vo=libmpv

  - Deprecated

    - encoding: deprecate a bunch of obscure options (--ovoffset, --oaoffset, --ovfirst, --oafirst)

    - options: deprecate --vf-defaults and --af-defaults

  - Removed

    - command: remove an old compatibility hack that allowed CLI aliases to be set as property, deprecated in 0.26.0

    - input: remove legacy command handling for MPlayer commands that were deprecated in 2013

    - options: drop --opensles-sample-rate, as --audio-samplerate should be used if desired

    - options: drop deprecated --videotoolbox-format, --ff-aid, --ff-vid, --ff-sid, --ad-spdif-dtshd, --softvol options

    - options: remove --video-stereo-mode

    - options: remove deprecated ao/vo auto profiles

    - options: remove the following encoding options: --ocopyts (now the default, old timestamp handling is gone), --oneverdrop (now default), --oharddup (you need to use --vf=fps=VALUE), --ofps, --oautofps, --omaxfps

- Fixes and Minor Enhancements

  - TOOLS/autoload: Fix broken "disabled" option

  - TOOLS/autoload: be more robust with slow directory listings

  - common: round all integer times to milliseconds

  - demux, player: fix playback of sparse video streams (w/ still images)

  - demux: support for some kinds of timed metadata (e.g. ICY)

  - demux_mkv: add V_AV1 identifier for AV1

  - demux_mkv: support Meridian Lossless Packing in Matroska

  - display additional metadata tags during video playback

  - gpu: prefer 16bit floating point FBO formats to 16bit integer

  - input.conf: use exact value for [ binding, which does the inverse of ]

  - input: add a keybinding to toggle hardware decoding

  - input: minor additions to default key bindings

  - osc: fix accidentally skipping files when seeking with slider

  - player: fix strange behavior on edition switching

  - player: fix track autoselection of external files yet again

  - video: actually wait for last frame being rendered on EOF

  - video: fix --video-rotate in some cases

  - video: fix crash with vdpau when reinitializing rendering

  - vo_gpu: fix anamorphic screenshots

# Release 0.28.2

- This release contains an additional fix for CVE-2018-6360.

- Fixes and Minor Enhancements

  - ytdl_hook: whitelist subtitle URLs as well (#5456)

# Release 0.28.1

- This release fixes CVE-2018-6360.

- Fixes and Minor Enhancements

  - ytdl_hook: whitelist protocols from urls retrieved from youtube-dl (#5456)

# Release 0.28.0

- Features

  - Added

    - csputils: Add support for Display P3 primaries

    - demux: support multiple seekable cached ranges, display cache ranges on OSC

    - demux_playlist: support .url files (#5107)

    - lua: integrate stats.lua script (bound to i/I by default)

    - vd_lavc: add support for nvdec hwaccel

    - vo_gpu: initial d3d11 support

    - vo_gpu: vulkan support

  - Removed

    - af: remove deprecated audio filters (channels, equalizer, pan, volume; replacements in lavfi)

    - vf: remove most GPL video filters (crop, dsize, expand, flip, gradfun, mirror, noformat, pullup, rotate, scale, stereo3d, yadif; replacements in lavfi)

    - vf_buffer: remove this filter

    - video: remove automatic stereo3d filter insertion

    - vo_gpu: remove hwdec_vaglx interop

    - vo_opengl: refactor into vo_gpu

- Options and Commands

  - Added

    - demux: add option to create CC tracks eagerly (--sub-create-cc-track)

    - options: add --start=none to reset previously set start time

    - options: add --vlang switch

  - Changed

    - cache: lower default size to 2*10MB

    - demux: bump the demuxer cache readahead duration to 10 hours

    - demux: use seekable cache for network by default, bump prefetch limit

    - msg: make --msg-level affect --log-file too

    - player/misc.c: allow both --length and --end to control play endpoint

    - player: match subtitles with language tags with --sub-auto=exact

    - rename --opengl-hwdec-interop to --gpu-hwdec-interop (now mostly useless)

  - Removed

    - options: remove --heartbeat-cmd and --heartbeat-interval (incidentally fixes #4888)

- Fixes and Minor Enhancements

  - TOOLS/autoload.lua: add ogm, ogg and opus extensions

  - audio: add audio softvol processing to AO (replaces previously GPL?d code)

  - audio: fix channel conversion with NA channels (e.g. with ALSA)

  - audio: fix missing volume update on init and reinit

  - csputils: Fix DCI P3 primaries white point

  - demux: don't allow subtitles to mess up buffered time display

  - demux: fix .cue files with audio files that contain attached pictures

  - demux: fix accounting for seekable ranges on track switches (fixes missing audio when cycling through audio tracks with e.g. EDL, --merge-files, ordered chapters and youtube-dl pseudo DASH)

  - demux: fix crash with cue/ordered chapter files (#5027)

  - demux: speed up cache seeking with a coarse index

  - demux_lavf: always give libavformat the filename when probing (helps with mp3 files)

  - demux_mkv: add V_SNOW tag to mkv_video_tags

  - dvb: Fix long channel switching: next/prev channel

  - dvb: fixes for ATSC tuning

  - lavc_conv: clamp timestamps to positive (#5047)

  - mp_image: always copy color attributes on hw download (#4804)

  - mp_image: select an explicit fallback for chroma location (#4804)

  - msg: bump log level of --log-file to -v -v

  - msg: reinterpret a bunch of message levels

  - osc: fix rare stack overflow when changing visibility mode

  - player/playloop.c: respect playback start time when using --loop-file

  - player: allow seeking in cached parts of unseekable streams

  - player: make track language matching case insensitive (#5272)

  - player: use start timestamp for ab-looping if --ab-loop-a is absent

  - player: when loading external file, always add all track types (#5132)

  - screenshot: create directories from template

  - scripting: report dlerror() output

  - sd_ass: accept RFC8081 font media types

  - sd_ass: accept otc as fallback OpenType collection file extension

  - stream_libarchive: work around various types of locale braindeath (https://git.io/vbiFJ)

  - subprocess-win: don't change the mouse cursor when creating processes

  - video: add a hack to avoid missing subtitles with vf_sub (#5194)

  - video: fix alpha handling (#4983)

  - video: fix memory leaks (roughly 1 KB per decoded frame) with hwdec copy modes

  - video: fix rotation and deinterlace auto filters

  - video: properly pass through ICC data

  - vo_gpu: change --tone-mapping-desaturate algorithm

  - vo_gpu: enable 3DLUTs in dumb mode

  - vo_gpu: fix gamma scale

  - vo_gpu: fix mobius tone mapping compatibility to GLSL 120 (#5069)

  - vo_gpu: fix video sometimes not being rerendered on equalizer change

  - vo_gpu: kill off FBOTEX_FUZZY (#1814)

  - vo_gpu: opengl: fix possible screenshot window crash (#4905)

  - vo_gpu: reduce the --alpha=blend-tiles checkerboard intensity

  - vo_gpu: win: remove exclusive-fullscreen detection hack

  - vo_lavc: remove messy delayed subtitle rendering logic (#4689)

  - Windows: skip window snapping if Windows handled it

  - Windows: add more-POSIXy versions of open() and fstat() (#4711)

  - ytdl_hook: don't prepend ytdl:// to non-youtube links in playlists (#5003)