summaryrefslogtreecommitdiffstats
path: root/DOCS
diff options
context:
space:
mode:
Diffstat (limited to 'DOCS')
-rw-r--r--DOCS/client-api-changes.rst22
-rw-r--r--DOCS/compile-windows.md73
-rw-r--r--DOCS/contribute.md48
-rw-r--r--DOCS/edl-mpv.rst20
-rw-r--r--DOCS/encoding.rst74
-rw-r--r--DOCS/interface-changes.rst265
-rw-r--r--DOCS/interface-changes/example.txt1
-rw-r--r--DOCS/interface-changes/show-in-taskbar.txt1
-rw-r--r--DOCS/interface-changes/track-list-decoder-tag.txt1
-rw-r--r--DOCS/man/af.rst52
-rw-r--r--DOCS/man/ao.rst127
-rw-r--r--DOCS/man/changes.rst3
-rw-r--r--DOCS/man/console.rst126
-rw-r--r--DOCS/man/encode.rst21
-rw-r--r--DOCS/man/input.rst1059
-rw-r--r--DOCS/man/ipc.rst6
-rw-r--r--DOCS/man/javascript.rst60
-rw-r--r--DOCS/man/libmpv.rst20
-rw-r--r--DOCS/man/lua.rst161
-rw-r--r--DOCS/man/mpv.rst455
-rw-r--r--DOCS/man/options.rst2302
-rw-r--r--DOCS/man/osc.rst92
-rw-r--r--DOCS/man/stats.rst100
-rw-r--r--DOCS/man/vf.rst70
-rw-r--r--DOCS/man/vo.rst406
-rw-r--r--DOCS/mplayer-changes.rst16
-rw-r--r--DOCS/release-policy.md72
-rw-r--r--DOCS/tech-overview.txt126
-rw-r--r--DOCS/waf-buildsystem.rst157
29 files changed, 3934 insertions, 2002 deletions
diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst
index 308ce44b4b..7d348819ce 100644
--- a/DOCS/client-api-changes.rst
+++ b/DOCS/client-api-changes.rst
@@ -31,7 +31,23 @@ API changes
===========
::
-
+ --- mpv 0.38.0 ---
+ 2.3 - partially revert the changes from API version 1.27, remove libmpv as
+ the default VO and move it to the bottom of the auto-probing order.
+ This restores the prior behavior on all platforms other than macOS,
+ but still auto selects libmpv/cocoa-cb on macOS if it was built with
+ support for cocoa-cb.
+ --- mpv 0.37.0 ---
+ 2.2 - add mpv_time_ns()
+ --- mpv 0.36.0 ---
+ 2.1 - add mpv_del_property()
+ --- mpv 0.35.0 ---
+ 2.0 - remove headers/functions of the obsolete opengl_cb API
+ - remove mpv_opengl_init_params.extra_exts field
+ - remove deprecated mpv_detach_destroy. Use mpv_destroy instead.
+ - remove obsolete mpv_suspend and mpv_resume
+ - remove deprecated SCRIPT_INPUT_DISPATCH, PAUSE and UNPAUSE, TRACKS_CHANGED
+ TRACK_SWITCHED, METADATA_UPDATE, CHAPTER_CHANGE events
--- mpv 0.33.0 ---
1.109 - add MPV_RENDER_API_TYPE_SW and related (software rendering API)
- inactivate the opengl_cb API (always fails to initialize now)
@@ -54,7 +70,6 @@ API changes
It is a good idea to write better wrappers for your use, though.
--- mpv 0.31.0 ---
1.107 - Deprecate MPV_EVENT_TICK
-
--- mpv 0.30.0 ---
1.106 - Add cancel_fn to mpv_stream_cb_info
1.105 - Fix deadlock problems with MPV_RENDER_PARAM_ADVANCED_CONTROL and if
@@ -72,7 +87,6 @@ API changes
- add mpv_abort_async_command()
1.102 - rename struct mpv_opengl_drm_osd_size to mpv_opengl_drm_draw_surface_size
- rename MPV_RENDER_PARAM_DRM_OSD_SIZE to MPV_RENDER_PARAM_DRM_DRAW_SURFACE_SIZE
-
--- mpv 0.29.0 ---
1.101 - add MPV_RENDER_PARAM_ADVANCED_CONTROL and related API
- add MPV_RENDER_PARAM_NEXT_FRAME_INFO and related symbols
@@ -264,7 +278,7 @@ API changes
- extend the "--start" option; a leading "+", which was previously
insignificant is now significant
- add "cache-free" and "cache-used" properties
- - OSX: the "coreaudio" AO spdif code is split into a separate AO
+ - macOS: the "coreaudio" AO spdif code is split into a separate AO
--- mpv 0.4.0 ---
1.0 - the API is declared stable
diff --git a/DOCS/compile-windows.md b/DOCS/compile-windows.md
index 2fd011978a..04bc200f37 100644
--- a/DOCS/compile-windows.md
+++ b/DOCS/compile-windows.md
@@ -4,28 +4,43 @@ Compiling for Windows
Compiling for Windows is supported with MinGW-w64. This can be used to produce
both 32-bit and 64-bit executables, and it works for building on Windows and
cross-compiling from Linux and Cygwin. MinGW-w64 is available from:
-http://mingw-w64.sourceforge.net.
+https://www.mingw-w64.org/
While building a complete MinGW-w64 toolchain yourself is possible, there are a
few build environments and scripts to help ease the process, such as MSYS2 and
MXE. Note that MinGW environments included in Linux distributions are often
broken, outdated and useless, and usually don't use MinGW-w64.
-**Warning**: the original MinGW (http://www.mingw.org) is unsupported.
+**Warning**: the original MinGW (https://osdn.net/projects/mingw/) is unsupported.
Cross-compilation
=================
-When cross-compiling, you have to run mpv's configure with these arguments:
-
-```bash
-DEST_OS=win32 TARGET=i686-w64-mingw32 ./waf configure
+When cross-compiling, it is recommended to use a meson crossfile to setup
+the cross compiling environment. A minimal example is included below:
+
+```ini
+[binaries]
+c = 'x86_64-w64-mingw32-gcc'
+cpp = 'x86_64-w64-mingw32-g++'
+ar = 'x86_64-w64-mingw32-ar'
+strip = 'x86_64-w64-mingw32-strip'
+exe_wrapper = 'wine64'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
```
-[MXE](http://mxe.cc) makes it very easy to bootstrap a complete MingGW-w64
+See [meson's documentation](https://mesonbuild.com/Cross-compilation.html) for
+more information.
+
+[MXE](https://mxe.cc) makes it very easy to bootstrap a complete MingGW-w64
environment from a Linux machine. See a working example below.
-Alternatively, you can try [mingw-w64-cmake](https://github.com/lachs0r/mingw-w64-cmake),
+Alternatively, you can try [mpv-winbuild-cmake](https://github.com/shinchiro/mpv-winbuild-cmake),
which bootstraps a MinGW-w64 environment and builds mpv and dependencies.
Example with MXE
@@ -38,7 +53,7 @@ Example with MXE
#
# Refer to
#
-# http://mxe.cc/#requirements
+# https://mxe.cc/#requirements
#
# Scroll down for disto/OS-specific instructions to install them.
@@ -79,11 +94,8 @@ export PATH=/opt/mxe/usr/bin/:$PATH
cd ..
git clone https://github.com/mpv-player/mpv.git
cd mpv
-python ./bootstrap.py
-DEST_OS=win32 TARGET=i686-w64-mingw32.static ./waf configure
-# Or, if 64 bit version,
-# DEST_OS=win32 TARGET=x86_64-w64-mingw32.static ./waf configure
-./waf build
+meson setup build --crossfile crossfile
+meson compile -C build
```
Native compilation with MSYS2
@@ -99,7 +111,7 @@ To build 64-bit mpv on Windows:
Installing MSYS2
----------------
-1. Download an installer from https://msys2.github.io/
+1. Download an installer from https://www.msys2.org/
Both the i686 and the x86_64 version of MSYS2 can build 32-bit and 64-bit
mpv binaries when running on a 64-bit version of Windows, but the x86_64
@@ -132,37 +144,30 @@ Installing mpv dependencies
```bash
# Install MSYS2 build dependencies and a MinGW-w64 compiler
-pacman -S git python $MINGW_PACKAGE_PREFIX-{pkg-config,gcc}
+pacman -S git $MINGW_PACKAGE_PREFIX-{python,pkgconf,gcc,meson}
# Install the most important MinGW-w64 dependencies. libass and lcms2 are also
# pulled in as dependencies of ffmpeg.
-pacman -S $MINGW_PACKAGE_PREFIX-{ffmpeg,libjpeg-turbo,lua51}
+pacman -S $MINGW_PACKAGE_PREFIX-{ffmpeg,libjpeg-turbo,luajit}
```
Building mpv
------------
-Clone the latest mpv from git and install waf. **Note:** ``/usr/bin/python3``
-is invoked directly here, since an MSYS2 version of Python is required.
-
-```bash
-git clone https://github.com/mpv-player/mpv.git && cd mpv
-/usr/bin/python3 bootstrap.py
-```
-
Finally, compile and install mpv. Binaries will be installed to
``/mingw64/bin`` or ``/mingw32/bin``.
```bash
-/usr/bin/python3 waf configure CC=gcc.exe --check-c-compiler=gcc --prefix=$MSYSTEM_PREFIX
-/usr/bin/python3 waf install
+meson setup build --prefix=$MSYSTEM_PREFIX
+meson compile -C build
```
Or, compile and install both libmpv and mpv:
```bash
-/usr/bin/python3 waf configure CC=gcc.exe --check-c-compiler=gcc --enable-libmpv-shared --prefix=$MSYSTEM_PREFIX
-/usr/bin/python3 waf install
+meson setup build -Dlibmpv=true --prefix=$MSYSTEM_PREFIX
+meson compile -C build
+meson install -C build
```
Linking libmpv with MSVC programs
@@ -177,13 +182,11 @@ To do this, you need a Visual Studio which supports ``stdint.h`` (recent ones do
and you need to create a import library for the mpv DLL:
```bash
-lib /def:mpv.def /name:mpv-1.dll /out:mpv.lib /MACHINE:X64
+lib /name:mpv-1.dll /out:mpv.lib /MACHINE:X64
```
The string in the ``/name:`` parameter must match the filename of the DLL (this
-is simply the filename the MSVC linker will use). The ``mpv.def`` can be
-retrieved from the mpv build directory, or can be produced by MingGW's
-gendef.exe helper from the mpv DLL.
+is simply the filename the MSVC linker will use).
Static linking is not possible.
@@ -208,6 +211,4 @@ Use of the ANGLE OpenGL backend requires a copy of the D3D compiler DLL that
matches the version of the D3D SDK that ANGLE was built with
(``d3dcompiler_43.dll`` in case of MinGW-built ANGLE) in the path or in the
same folder as mpv. It must be of the same architecture (x86_64 / i686) as the
-mpv you compiled. You can find copies here:
-
-https://mpv.srsfckn.biz/d3dcompiler.7z
+mpv you compiled.
diff --git a/DOCS/contribute.md b/DOCS/contribute.md
index cc30978bf5..4d2af4ea4e 100644
--- a/DOCS/contribute.md
+++ b/DOCS/contribute.md
@@ -5,13 +5,13 @@ General
-------
The main contact for mpv development is IRC, specifically #mpv
-and #mpv-devel on Freenode. Github is used for code review and
+and #mpv-devel on Libera.chat. GitHub is used for code review and
long term discussions.
Sending patches
---------------
-- Make a github pull request, or send a link to a plaintext patch created with
+- Make a GitHub pull request, or send a link to a plaintext patch created with
``git format-patch``.
- Plain diffs posted as pastebins are not acceptable! (Especially if the http
link returns HTML.) They only cause extra work for everyone, because they lack
@@ -68,6 +68,11 @@ Write good commit messages
Having a prefix gives context, and is especially useful when trying to find
a specific change by looking at the history, or when running ``git blame``.
+
+ Sample prefixes: ``vo_gpu: ...``, ``command: ...``, ``DOCS/input: ...``,
+ ``TOOLS/osxbundle: ...``, ``osc.lua: ...``, etc. You can always check the git
+ log for commits which modify specific files to see which prefixes are used.
+
- The first word after the ``:`` is lower case.
- Don't end the subject line with a ``.``.
- Put an empty line between the subject line and the commit message.
@@ -106,13 +111,13 @@ Always squash fixup commits when making changes to pull requests
- If you make fixup commits to your pull request, you should generally squash
them with "git rebase -i". We prefer to have pull requests in a merge
ready state.
-- We don't squash-merge (nor do we use github's feature that does this) because
+- We don't squash-merge (nor do we use GitHub's feature that does this) because
pull requests with multiple commits are perfectly legitimate, and the only
thing that makes sense in non-trivial cases.
- With complex pull requests, it *may* make sense to keep them separate, but
they should be clearly marked as such. Reviewing commits is generally easier
with fixups squashed.
-- Reviewers are encouraged to look at individual commits instead of github's
+- Reviewers are encouraged to look at individual commits instead of GitHub's
"changes from all commits" view (which just encourages bad git and review
practices).
@@ -126,16 +131,28 @@ Touching user-visible parts may require updating the mpv docs
- Changes to command line options (addition/modification/removal) must be
documented in options.rst.
- Changes to input properties or input commands must be documented in input.rst.
-- All incompatible changes to the user interface (options, properties, commands)
- must be documented with a small note in interface-changes.rst. (Additions may
- be documented there as well, but this isn't required.)
- Changes to the libmpv API must be reflected in the libmpv's headers doxygen,
and in client-api-changes.rst.
+Interface change policy
+-----------------------
+
+- All incompatible changes to the user interface (options, properties, commands)
+ must be documented by making a new text file with a txt extension containing a
+ small note in the DOCS/interface-changes directory.
+- The name of the file should be brief and related to the commit that makes the
+ change.
+- Grouping multiple related changes in the same file is also OK. Just be sure to
+ put each separate change on a different line.
+- Documenting additions in DOCS/interface-changes is optional but encouraged.
+- interface-changes.rst is never directly updated except when making new major
+ releases.
+- See DOCS/interface-changes/example.txt for an example.
+
Code formatting
---------------
-mpv uses C99 with K&R formatting, with some exceptions.
+mpv uses C11 with K&R formatting, with some exceptions.
- Use the K&R indent style.
- Use 4 spaces of indentation, never use tabs (except in Makefiles).
@@ -148,9 +165,9 @@ mpv uses C99 with K&R formatting, with some exceptions.
some_function(a, b, c);
}
```
-- Break lines on 80 columns. There is a hard limit of 85 columns. You may ignore
+- Break lines on 80 columns. There is a hard limit of 100 columns. You may ignore
this limit if there's a strong case that not breaking the line will increase
- readability. Going over 85 columns might provoke endless discussions about
+ readability. Going over 100 columns might provoke endless discussions about
whether such a limit is needed or not, so avoid it.
- If the body of an if/for/while statement has more than 1 physical lines, then
always add braces, even if they're technically redundant.
@@ -219,15 +236,16 @@ New code must follow the following conventions:
General coding
--------------
-- Use C99. Also freely make use of C99 features if it's appropriate, such as
- stdbool.h. (Except VLA and complex number types.)
+- Use C11. Also freely make use of C11 features if it's appropriate, but do not
+ use VLA and complex number types.
- Don't use non-standard language (such as GNU C-only features). In some cases
they may be warranted, if they are optional (such as attributes enabling
printf-like format string checks). "#pragma once" is allowed as an exception.
- But in general, standard C99 must be used.
+ But in general, standard C11 must be used.
- The same applies to libc functions. We have to be Windows-compatible too. Use
- functions guaranteed by C99 or POSIX only, unless your use is guarded by a
- configure check. There is some restricted use of C11 (ask on IRC for details).
+ functions guaranteed by C11 or POSIX only, unless your use is guarded by a
+ configure check. Be mindful of MinGW-specifics since C11 support is not always
+ guaranteed.
- Prefer fusing declaration and initialization, rather than putting declarations
on the top of a block. Obvious data flow is more important than avoiding
mixing declarations and statements, which is just a C90 artifact.
diff --git a/DOCS/edl-mpv.rst b/DOCS/edl-mpv.rst
index 78da44a8bf..0e4d2b410e 100644
--- a/DOCS/edl-mpv.rst
+++ b/DOCS/edl-mpv.rst
@@ -239,6 +239,26 @@ title. The subtitle stream will use ``ducks`` as title.
The ``track_meta`` header is not part of the core EDL format. It may be changed
or removed at any time, depending on mpv's internal requirements.
+Global metadata
+===============
+
+The special ``global_tags`` header can set metadata fields (aka tags) of the EDL
+file. This metadata is supposed to be informational, much like for example ID3
+tags in audio files. Due to lack of separation of different kinds of metadata it
+is unspecified what names are allowed, how they are interpreted, and whether
+some of them affect playback functionally. (Much of this is unfortunately
+inherited from FFmpeg. Another consequence of this is that FFmpeg "normalized"
+tags are recognized, or stuff like replaygain tags.)
+
+Example::
+
+ !global_tags,title=bla,something_arbitrary=even_more_arbitrary
+
+Any parameter names are allowed. Repeated use of this adds to the tag list. If
+``!new_stream`` is used, the location doesn't matter.
+
+May possibly be ignored in some cases, such as delayed media opening.
+
Delayed media opening
=====================
diff --git a/DOCS/encoding.rst b/DOCS/encoding.rst
index ee46cec770..9c6c067589 100644
--- a/DOCS/encoding.rst
+++ b/DOCS/encoding.rst
@@ -3,26 +3,26 @@ General usage
::
- mpv infile -o outfile [-of outfileformat] [-ofopts formatoptions] [-orawts] \
+ mpv infile --o=outfile [--of=outfileformat] [--ofopts=formatoptions] [--orawts] \
[(any other mpv options)] \
- -ovc outvideocodec [-ovcopts outvideocodecoptions] \
- -oac outaudiocodec [-oacopts outaudiocodecoptions]
+ --ovc=outvideocodec [--ovcopts=outvideocodecoptions] \
+ --oac=outaudiocodec [--oacopts=outaudiocodecoptions]
Help for these options is provided if giving help as parameter, as in::
- mpv -ovc help
+ mpv --ovc=help
The suboptions of these generally are identical to ffmpeg's (as option parsing
-is simply delegated to ffmpeg). The option -ocopyts enables copying timestamps
+is simply delegated to ffmpeg). The option --ocopyts enables copying timestamps
from the source as-is, instead of fixing them to match audio playback time
-(note: this doesn't work with all output container formats); -orawts even turns
+(note: this doesn't work with all output container formats); --orawts even turns
off discontinuity fixing.
-Note that if neither -ofps nor -oautofps is specified, VFR encoding is assumed
-and the time base is 24000fps. -oautofps sets -ofps to a guessed fps number
+Note that if neither --ofps nor --oautofps is specified, VFR encoding is assumed
+and the time base is 24000fps. --oautofps sets --ofps to a guessed fps number
from the input video. Note that not all codecs and not all formats support VFR
encoding, and some which do have bugs when a target bitrate is specified - use
--ofps or -oautofps to force CFR encoding in these cases.
+--ofps or --oautofps to force CFR encoding in these cases.
Of course, the options can be stored in a profile, like this .config/mpv/mpv.conf
section::
@@ -48,7 +48,7 @@ to encoding. This is not the case anymore.)
One can then encode using this profile using the command::
- mpv infile -o outfile.mp4 -profile myencprofile
+ mpv infile --o=outfile.mp4 --profile=myencprofile
Some example profiles are provided in a file
etc/encoding-profiles.conf; as for this, see below.
@@ -62,10 +62,10 @@ for.
Typical MPEG-4 Part 2 ("ASP", "DivX") encoding, AVI container::
- mpv infile -o outfile.avi \
+ mpv infile --o=outfile.avi \
--vf=fps=25 \
- -ovc mpeg4 -ovcopts qscale=4 \
- -oac libmp3lame -oacopts ab=128k
+ --ovc=mpeg4 --ovcopts=qscale=4 \
+ --oac=libmp3lame --oacopts=b=128k
Note: AVI does not support variable frame rate, so the fps filter must be used.
The frame rate should ideally match the input (25 for PAL, 24000/1001 or
@@ -73,22 +73,22 @@ The frame rate should ideally match the input (25 for PAL, 24000/1001 or
Typical MPEG-4 Part 10 ("AVC", "H.264") encoding, Matroska (MKV) container::
- mpv infile -o outfile.mkv \
- -ovc libx264 -ovcopts preset=medium,crf=23,profile=baseline \
- -oac libvorbis -oacopts qscale=3
+ mpv infile --o=outfile.mkv \
+ --ovc=libx264 --ovcopts=preset=medium,crf=23,profile=baseline \
+ --oac=libopus --oacopts=qscale=3
Typical MPEG-4 Part 10 ("AVC", "H.264") encoding, MPEG-4 (MP4) container::
- mpv infile -o outfile.mp4 \
- -ovc libx264 -ovcopts preset=medium,crf=23,profile=baseline \
- -oac aac -oacopts ab=128k
+ mpv infile --o=outfile.mp4 \
+ --ovc=libx264 --ovcopts=preset=medium,crf=23,profile=baseline \
+ --oac=aac --oacopts=b=128k
Typical VP8 encoding, WebM (restricted Matroska) container::
mpv infile -o outfile.mkv \
- -of webm \
- -ovc libvpx -ovcopts qmin=6,b=1000000k \
- -oac libvorbis -oacopts qscale=3
+ --of=webm \
+ --ovc=libvpx --ovcopts=qmin=6,b=1000000k \
+ --oac=libopus --oacopts=qscale=3
Device targets
@@ -111,18 +111,18 @@ section.
Refer to the top of that file for more comments - in a nutshell, the following
options are added by it::
- -profile enc-to-dvdpal DVD-Video PAL, use dvdauthor -v pal+4:3 -a ac3+en
- -profile enc-to-dvdntsc DVD-Video NTSC, use dvdauthor -v ntsc+4:3 -a ac3+en
- -profile enc-to-bb-9000 MP4 for Blackberry Bold 9000
- -profile enc-to-nok-6300 3GP for Nokia 6300
- -profile enc-to-psp MP4 for PlayStation Portable
- -profile enc-to-iphone MP4 for iPhone
- -profile enc-to-iphone-4 MP4 for iPhone 4 (double res)
- -profile enc-to-iphone-5 MP4 for iPhone 5 (even larger res)
+ --profile=enc-to-dvdpal # DVD-Video PAL, use dvdauthor -v pal+4:3 -a ac3+en
+ --profile=enc-to-dvdntsc # DVD-Video NTSC, use dvdauthor -v ntsc+4:3 -a ac3+en
+ --profile=enc-to-bb-9000 # MP4 for Blackberry Bold 9000
+ --profile=enc-to-nok-6300 # 3GP for Nokia 6300
+ --profile=enc-to-psp # MP4 for PlayStation Portable
+ --profile=enc-to-iphone # MP4 for iPhone
+ --profile=enc-to-iphone-4 # MP4 for iPhone 4 (double res)
+ --profile=enc-to-iphone-5 # MP4 for iPhone 5 (even larger res)
You can encode using these with a command line like::
- mpv infile -o outfile.mp4 -profile enc-to-bb-9000
+ mpv infile --o=outfile.mp4 --profile=enc-to-bb-9000
Of course, you are free to override options set by these profiles by specifying
them after the -profile option.
@@ -133,19 +133,19 @@ What works
* Encoding at variable frame rate (default)
* Encoding at constant frame rate using --vf=fps=RATE
-* 2-pass encoding (specify flags=+pass1 in the first pass's -ovcopts, specify
+* 2-pass encoding (specify flags=+pass1 in the first pass's --ovcopts, specify
flags=+pass2 in the second pass)
* Hardcoding subtitles using vobsub, ass or srt subtitle rendering (just
configure mpv for the subtitles as usual)
-* Hardcoding any other mpv OSD (e.g. time codes, using -osdlevel 3 and -vf
- expand=::::1)
+* Hardcoding any other mpv OSD (e.g. time codes, using --osdlevel=3 and
+ --vf=expand=::::1)
* Encoding directly from a DVD, network stream, webcam, or any other source
mpv supports
* Using x264 presets/tunings/profiles (by using profile=, tune=, preset= in the
- -ovcopts)
+ --ovcopts)
* Deinterlacing/Inverse Telecine with any of mpv's filters for that
-* Audio file converting: mpv -o outfile.mp3 infile.flac -no-video -oac
- libmp3lame -oacopts ab=320k
+* Audio file converting: mpv --o=outfile.m4a infile.flac --no-video
+ --oac=aac --oacopts=b=320k
What does not work yet
======================
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index 0089f4425b..b55ef97739 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -17,15 +17,270 @@ a large part of the user interface and APIs.
Also see compatibility.rst.
-This document lists changes to them. New changes are added to the top. Usually,
-only incompatible or important changes are mentioned. New options/commands/etc.
-are not always listed.
+This document lists changes to them. New options/commands/etc. are not always
+listed.
+
+**Never** write to this file directly except when making releases. New changes
+are added in the interface-changes directory instead. See contribute.md for more
+details.
Interface changes
=================
::
+ --- mpv 0.38.0 ---
+ - add `term-size` property
+ - add the `escape-ass` command
+ - add `>` for fixed precision floating-point property expansion
+ - add `--input-comands` option
+ - change `--pulse-latency-hacks` default to `yes`
+ - add `context-menu` command
+ - add `menu-data` property
+ - add `--vo-tct-buffering` option
+ - add `begin-vo-dragging` command
+ - add `--deinterlace-field-parity` option
+ - add `--volume-gain`, `--volume-gain-min`, and `--volume-gain-max` options
+ - add `current-gpu-context` property
+ - add `--secondary-sub-ass-override` option
+ - add `--input-preprocess-wheel` option
+ - remove shared-script-properties (user-data is a replacement)
+ - add `--secondary-sub-delay`, decouple secondary subtitles from
+ `--sub-delay`
+ - add the `--osd-bar-border-size` option
+ - `--screenshot-avif-pixfmt` no longer defaults to yuv420p
+ - `--screenshot-avif-opts` defaults to lossless screenshot
+ - rename key `MP_KEY_BACK` to `MP_KEY_GO_BACK`
+ - add `--sub-filter-sdh-enclosures` option
+ - added the `mp.input` scripting API to query the user for textual input
+ - add `forced` choice to `subs-with-matching-audio`
+ - remove `--term-remaining-playtime` option
+ - change fallback deinterlace to bwdif
+ - add the command `load-config-file`
+ - add the command `load-input-conf`
+ - remove `--vo=rpi`, `--gpu-context=rpi`, and `--hwdec=mmal`
+ - add `auto` choice to `--deinterlace`
+ - change `--teletext-page` default from 100 to 0 ("subtitle" in lavc)
+ - change `--hidpi-window-scale` default to `no`
+ - add `insert-next`, `insert-next-play`, `insert-at`, and `insert-at-play`
+ actions to `loadfile` and `loadlist` commands
+ - add `index` argument to `loadfile` and `loadlist` commands
+ - move the `options` argument of the `loadfile` command from the third
+ parameter to the fourth (after `index`)
+ - add `--drag-and-drop=insert-next` option
+ - rename `--background` to `--background-color`
+ - remove `--alpha` and reintroduce `--background` option for better control
+ over blending alpha components into specific background types
+ - add `--border-background` option
+ - add `video-target-params` property
+ - add `hdr10plus` sub-parameter to `format` video filter
+ - remove `--focus-on-open` and add replacement `--focus-on`
+ - remove debanding from the high-quality profile
+ --- mpv 0.37.0 ---
+ - `--save-position-on-quit` and its associated commands now store state files
+ in %LOCALAPPDATA% instead of %APPDATA% directory by default on Windows.
+ - change `--subs-with-matching-audio` default from `no` to `yes`
+ - change `--subs-fallback` default from `no` to `default`
+ - add the `--hdr-peak-percentile` option
+ - include `--hdr-peak-percentile` in the `gpu-hq` profile
+ - change `--audiotrack-pcm-float` default from `no` to `yes`
+ - add video-params/aspect-name
+ - change type of `--sub-pos` to float
+ - The remaining time printed in the terminal is now adjusted for speed by default.
+ You can disable this with `--no-term-remaining-playtime`.
+ - add `playlist-path` and `playlist/N/playlist-path` properties
+ - add `--x11-wid-title` option
+ - add `--libplacebo-opts` option
+ - add `--audio-file-exts`, `--cover-art-auto-exts`, and `--sub-auto-exts`
+ - change `slang` default back to NULL
+ - remove special handling of the `auto` value from `--alang/slang/vlang` options
+ - add `--subs-match-os-language` as a replacement for `--slang=auto`
+ - add `always` option to `--subs-fallback-forced`
+ - remove `auto` choice from `--sub-forced-only`
+ - remove `auto-forced-only` property
+ - rename `--sub-forced-only` to `--sub-forced-events-only`
+ - remove `sub-forced-only-cur` property (`--sub-forced-events-only` is a replacement)
+ - remove deprecated `video-aspect` property
+ - add `--video-crop`
+ - add `video-params/crop-[w,h,x,y]`
+ - remove `--tone-mapping-mode`
+ - change `--subs-fallback-forced` so that it works alongside `--slang`
+ - add `--icc-3dlut-size=auto` and make it the default
+ - add `--scale=ewa_lanczos4sharpest`
+ - remove `--scale-wblur`, `--cscale-wblur`, `--dscale-wblur`, `--tscale-wblur`
+ - remove `bcspline` filter (`bicubic` is now the same as `bcspline`)
+ - rename `--cache-dir` and `--cache-unlink-files` to `--demuxer-cache-dir` and
+ `--demuxer-cache-unlink-files`
+ - enable `--correct-downscaling`, `--linear-downscaling`, `--sigmoid-upscaling`
+ - `--cscale` defaults to `--scale` if not defined
+ - change `--tscale` default to `oversample`
+ - change `--dither-depth` to `auto`
+ - deprecate `--profile=gpu-hq`, add `--profile=<fast|high-quality>`
+ - change `--dscale` default to `hermite`
+ - update defaults to `--hdr-peak-decay-rate=20`, `--hdr-scene-threshold-low=1.0`,
+ `--hdr-scene-threshold-high=3.0`
+ - update defaults to `--deband-threshold=48`, `--deband-grain=32`
+ - add `--directory-mode=auto` and make it the default
+ - remove deprecated `--profile=opengl-hq`
+ - remove several legacy fallbacks for old deprecated options (now they will just
+ error out like normal)
+ - remove deprecated `drop-frame-count` and `vo-drop-frame-count` property aliases
+ - remove the ability to write to the `display-fps` property (use `override-display-fps`
+ instead)
+ - writing the current value to playlist-pos will no longer restart playback (use
+ `playlist-play-index` instead)
+ - remove deprecated `--oaoffset`, `--oafirst`, `--ovoffset`, `--ovfirst`,
+ `--demuxer-force-retry-on-eof`, `--fit-border` options
+ - remove deprecated `--record-file` option
+ - remove deprecated `--vf-defaults` and `--af-defaults` options
+ - `--drm-connector` no longer allows selecting the card number (use `--drm-device`
+ instead)
+ - add `--title-bar` option
+ - add `--window-corners` option
+ - rename `--cdrom-device` to `--cdda-device`
+ - remove `--scale-cutoff`, `--cscale-cutoff`, `--dscale-cutoff`, `--tscale-cutoff`
+ - remove `--scaler-lut-size`
+ - deprecate shared-script-properties (user-data is a replacement)
+ - add `--backdrop-type` option
+ - add `--window-affinity` option
+ - `--config-dir` no longer forces cache and state files to also reside in there
+ - deprecate `--demuxer-cue-codepage` in favor of `--metadata-codepage`
+ - change the default of `metadata-codepage` to `auto`
+ - add `playlist-next-playlist` and `playlist-prev-playlist` commands
+ - change `video-codec` to show description or name, not both
+ - deprecate `--cdda-toc-bias` option, offsets are always checked now
+ - disable `--allow-delayed-peak-detect` by default
+ - rename `--fps` to `--container-fps-override`
+ - rename `--override-display-fps` to `--display-fps-override`
+ - rename `--sub-ass-force-style` to `--sub-ass-style-overrides`
+ - alias `--screenshot-directory` to `--screenshot-dir`
+ - alias `--watch-later-directory` to `--watch-later-dir`
+ - rename `--play-dir` to `--play-direction`
+ - `--js-memory-report` is now used for enabling memory reporting for javascript
+ scripts
+ - drop support for `-del` syntax for list options
+ - `--demuxer-hysteresis-secs` now respects `--cache-secs` and/or
+ `--demuxer-readahead-secs` as well
+ - add hdr metadata to `video-params` property
+ - add `--target-gamut`
+ - change the way display names are retrieved on macOS, usage of options and properties
+ `--fs-screen-name`, `--screen-name` and `display-names` needs to be adjusted
+ - remove OpenGL cocoa backend that was deprecated in 0.29
+ - remove `border`, `fullscreen`, `ontop`, `osd-level` and `pause`
+ from default `--watch-later-options`
+ - add `video-*` and `secondary-sub-visibility` to default `--watch-later-options`
+ --- mpv 0.36.0 ---
+ - add `--target-contrast`
+ - Target luminance value is now also applied when ICC profile is used.
+ `--icc-use-luma` has been added to use ICC profile luminance value.
+ If target luminance and ICC luminance is not used, old behavior apply,
+ defaulting to 203 nits. (Only applies for `--vo=gpu-next`)
+ - `playlist/N/title` gets set upon opening the file if it wasn't already set
+ and a title is available.
+ - add the `--vo=kitty` video output driver, as well as the options
+ `--vo-kitty-cols`, `--vo-kitty-rows`, `--vo-kitty-width`,
+ `--vo-kitty-height`, `--vo-kitty-left`, `--vo-kitty-top`,
+ `--vo-kitty-config-clear`, `--vo-kitty-alt-screen` and
+ `--vo-kitty-use-shm`
+ - add `--force-render`
+ - add `--vo-sixel-config-clear`, `--vo-sixel-alt-screen` and
+ `--vo-sixel-buffered`
+ - add `--wayland-content-type`
+ - deprecate `--vo-sixel-exit-clear` and alias it to
+ `--vo-sixel-alt-screen`
+ - deprecate `--drm-atomic`
+ - add `--demuxer-hysteresis-secs`
+ - add `--video-sync=display-tempo`
+ - the `start` option is no longer unconditionally written by
+ watch-