summaryrefslogtreecommitdiffstats
path: root/DOCS
diff options
context:
space:
mode:
Diffstat (limited to 'DOCS')
-rw-r--r--DOCS/compatibility.rst22
-rw-r--r--DOCS/compile-windows.md438
-rw-r--r--DOCS/contribute.md5
-rw-r--r--DOCS/interface-changes.rst8
-rw-r--r--DOCS/interface-changes/cmd-nonrepeatable.txt1
-rw-r--r--DOCS/interface-changes/egl-output-format.txt2
-rw-r--r--DOCS/interface-changes/input-builtin-dragging.txt1
-rw-r--r--DOCS/interface-changes/input-dragging-deadzone.txt1
-rw-r--r--DOCS/interface-changes/input-select.txt2
-rw-r--r--DOCS/interface-changes/input-touch-emulate-mouse.txt1
-rw-r--r--DOCS/interface-changes/keybind-cancel.txt2
-rw-r--r--DOCS/interface-changes/native-touch.txt4
-rw-r--r--DOCS/interface-changes/option-info-expects-file.txt1
-rw-r--r--DOCS/interface-changes/osc-show.txt1
-rw-r--r--DOCS/interface-changes/osdscale.txt3
-rw-r--r--DOCS/interface-changes/show-playlist-titles.txt2
-rw-r--r--DOCS/interface-changes/sub-ass-override-default.txt3
-rw-r--r--DOCS/interface-changes/touch-pos.txt1
-rw-r--r--DOCS/interface-changes/vapoursynth-api-v4.txt.txt1
-rw-r--r--DOCS/man/ao.rst4
-rw-r--r--DOCS/man/console.rst1
-rw-r--r--DOCS/man/encode.rst2
-rw-r--r--DOCS/man/input.rst40
-rw-r--r--DOCS/man/lua.rst26
-rw-r--r--DOCS/man/mpv.rst42
-rw-r--r--DOCS/man/options.rst91
-rw-r--r--DOCS/man/osc.rst39
-rw-r--r--DOCS/man/stats.rst17
-rw-r--r--DOCS/man/vf.rst14
-rw-r--r--DOCS/man/vo.rst4
30 files changed, 524 insertions, 255 deletions
diff --git a/DOCS/compatibility.rst b/DOCS/compatibility.rst
index 3d6ec2cdfc..aeef8fc7ca 100644
--- a/DOCS/compatibility.rst
+++ b/DOCS/compatibility.rst
@@ -29,7 +29,16 @@ All of these are important for interfacing both with end users and API users
(which include Lua scripts, libmpv, and the JSON IPC). As such, they constitute
a large part of the user interface and APIs.
-All incompatible changes to this must be declared in interface-changes.rst.
+Certain options and commands may have documented default values. These default
+values are considered a part of the API since scripts may already rely on these
+documented behaviors. Changing these defaults are considered incompatible
+changes and must be documented. Undocumented default values do not subject to
+this requirement, and it is recommended to discourage such usage in the related
+documentations if there is a need to frequently change such defaults.
+
+All incompatible changes to this must be declared in interface-changes.rst,
+which include the types of changes, the impact of these changes, and suggested
+actions to address such impact so that the incompatibility is alleviated.
(This may also list compatible additions, but it's not a requirement.)
Degrees of importance and compatibility preservation
@@ -49,8 +58,17 @@ functionality still works, and a replacement is available (if technically
reasonable). For example, a feature deprecated in mpv 0.30.0 may be removed in
mpv 0.32.0. Minor releases do not count towards this.
+Under extraordinary circumstances, such as missed incompatible changes that are
+already included in a release, critical security fixes, or a severe shortage of
+developer time to address the known incompatible changes, important/often used
+parts may be broken immediately, but the change must be extensively documented:
+all of the related documentations (including manpage, interface-changes.rst,
+etc., retrospectively modified if applicable) must clearly state the following:
+the fact that the change is a breaking change; the version when the breaking
+change happened; and the reason, impact, and suggested remedy actions.
+
Less useful parts can be broken immediately, but must come with some sort of
-removal warning-
+removal warning.
Parts for debugging and testing may be removed any time, potentially even
without any sort of documentation.
diff --git a/DOCS/compile-windows.md b/DOCS/compile-windows.md
index 04bc200f37..f2b2ba65db 100644
--- a/DOCS/compile-windows.md
+++ b/DOCS/compile-windows.md
@@ -1,214 +1,270 @@
-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:
-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 (https://osdn.net/projects/mingw/) is unsupported.
-
-Cross-compilation
-=================
-
-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'
+# Compiling for Windows
+
+Compiling for Windows is supported using GNU-like compilers (GCC/Clang). Clang
+is compatible with both the ``w64-windows-gnu`` [MinGW-w64](https://www.mingw-w64.org/)
+and ``pc-windows-msvc`` [Windows SDK](https://developer.microsoft.com/windows/downloads/windows-sdk)
+targets. It supports the production of both 32-bit and 64-bit binaries and is
+suitable for building on Windows as well as cross-compiling from Linux and Cygwin.
+
+Although it is possible to build a complete MinGW-w64 toolchain yourself, there
+are build environments and scripts available to simplify the process, such as
+MSYS2 on Windows or a packaged toolchain provided by your favorite Linux
+distribution. Note that MinGW-w64 environments included in Linux distributions
+can vary in versions. As a general guideline, mpv only supports the MinGW-w64
+toolchain version included in the latest Ubuntu LTS release.
+
+mpv employs Meson for building, and the process is the same as any standard Meson
+compilation.
+
+For the most up-to-date reference on build scripts, you can refer to
+[build.yml](https://github.com/mpv-player/mpv/blob/master/.github/workflows/build.yml),
+which builds and tests all supported configurations: ``MinGW-w64``, ``Windows SDK``,
+and ``MSYS2`` builds.
+
+## Cross-compilation
+
+When cross-compiling, it is recommended to use a Meson ``--cross-file`` to set up the
+cross-compiling environment. For a basic example, please refer to
+[Cross-compilation](https://mesonbuild.com/Cross-compilation.html).
+
+Alternatively, consider using [mpv-winbuild-cmake](https://github.com/shinchiro/mpv-winbuild-cmake),
+which bootstraps a MinGW-w64 toolchain and builds mpv along with its dependencies.
+
+### Example with Meson
+
+1. Create ``cross-file.txt`` with definitions for your toolchain and target platform.
+ Refer to [x86_64-w64-mingw32.txt](https://mesonbuild.com/Cross-compilation.html)
+ as a directly usable example.
+ - **Important**: Beware of pkg-config usage. By default, it uses build machine
+ files for dependency detection, even when ``--cross-file`` is used. It must
+ be configured correctly. Refer to ``pkg_config_libdir`` and ``sys_root``
+ in the [documentation](https://mesonbuild.com/Cross-compilation.html#defining-the-environment)
+ for proper setup. **In this example pkg-config is not used/required.**
+2. Initialize subprojects. This step is optional; other methods are also
+ available to provide the necessary dependencies.
+
+ ``` bash
+ # Update the subprojects database from Meson's WrapDB.
+ meson wrap update-db
+
+ # Explicitly download wraps as nested projects may have older versions of them.
+ meson wrap install expat
+ meson wrap install harfbuzz
+ meson wrap install libpng
+ meson wrap install zlib
+
+ # Add wraps for mpv's required dependencies
+ mkdir -p subprojects
+
+ cat <<EOF > subprojects/libplacebo.wrap
+ [wrap-git]
+ url = https://github.com/haasn/libplacebo
+ revision = master
+ depth = 1
+ clone-recursive = true
+ EOF
+
+ cat <<EOF > subprojects/libass.wrap
+ [wrap-git]
+ revision = master
+ url = https://github.com/libass/libass
+ depth = 1
+ EOF
+
+ # For FFmpeg, use Meson's build system port; alternatively, you can compile
+ # the upstream version yourself. See https://trac.ffmpeg.org/wiki/CompilationGuide
+ cat <<EOF > subprojects/ffmpeg.wrap
+ [wrap-git]
+ url = https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg.git
+ revision = meson-6.1
+ depth = 1
+ [provide]
+ libavcodec = libavcodec_dep
+ libavdevice = libavdevice_dep
+ libavfilter = libavfilter_dep
+ libavformat = libavformat_dep
+ libavutil = libavutil_dep
+ libswresample = libswresample_dep
+ libswscale = libswscale_dep
+ EOF
+ ```
+
+3. Build
+
+ ``` bash
+ meson setup -Ddefault_library=static -Dprefer_static=true \
+ -Dc_link_args='-static' -Dcpp_link_args='-static' \
+ --cross-file cross-file.txt build
+
+ ninja -C build mpv.exe mpv.com
+ ```
+
+ This will produce fully portabiel, statically linked, ``mpv.exe`` and ``mpv.com``
+ binaries.
+
+#### Building libmpv
+
+- To also build ``libmpv``, execute the following commands:
+
+ ``` bash
+ # For a static library
+ meson configure build -Dlibmpv=true -Ddefault_library=static
+ ninja -C build libmpv.a
+
+ # For a shared library
+ meson configure build -Dlibmpv=true -Ddefault_library=shared
+ ninja -C build libmpv-2.dll
+ ```
+
+- Depending on the use case, you might want to use ``-Dgpl=false`` and review
+ similar options for subprojects.
+- If any of Meson's subprojects are not linked statically, you might need to
+ specify options like the following example for ffmpeg:
+ ``-Dffmpeg:default_library=static``.
+
+#### Enabling more mpv features
+
+The process above produces a basic mpv build. You can enable additional features.
+Check the Meson
+[WrapDB packages](https://mesonbuild.com/Wrapdb-projects.html) for available
+dependencies or by providing them through other means.
+
+Enhancing mpv with more features is as simple as adding more arguments to the
+Meson setup command, for example:
+
+``` bash
+-Dlua=enabled -Djavascript=enabled -Dlcms2=enabled -Dlibplacebo:lcms=enabled
```
-See [meson's documentation](https://mesonbuild.com/Cross-compilation.html) for
-more information.
+they will be automatically downloaded and built by Meson.
+
+## Native Compilation with Clang (Windows SDK Build)
+
+1. Install [Build Tools for Visual Studio](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022)
+ or the full [Visual Studio](https://visualstudio.microsoft.com/downloads/#visual-studio-community-2022):
+ - From the installer, select the necessary components:
+ - Clang compiler for Windows
+ - C++ CMake tools for Windows
+ - Windows SDK
+ - Activate the developer shell:
+ ```
+ & "<Visual Studio Path>\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -HostArch amd64 -SkipAutomaticLocation | Out-Null
+ ```
+2. Install Meson, as outlined in [Getting Meson](https://mesonbuild.com/Getting-meson.html):
+ - **Important**: At the time of writing, there is an issue in Meson with
+ escaping response files.
+
+ See: [mesonbuild/meson#8981](https://github.com/mesonbuild/meson/issues/8981)
+ and [mesonbuild/meson#11715](https://github.com/mesonbuild/meson/pull/11715)
+
+ If you wish to install a fixed version, follow the steps outlined
+ [here](https://github.com/mpv-player/mpv/blob/481e498427fc34956ad24b94157553908f5cd638/.github/workflows/build.yml#L132-L135).
+3. The following build script utilizes the Meson subprojects system to build mpv and its dependencies.
+ To make sure all dependency versions are up-to-date, update the subprojects database from Meson's WrapDB.
+ Also explicitly download several wraps as some nested projects may pull older versions of them.
+ ```
+ meson wrap update-db
+
+ meson wrap install expat
+ meson wrap install harfbuzz
+ meson wrap install libpng
+ meson wrap install zlib
+ ```
+4. Set environment variables or use the `--native-file` option in Meson.
+ ```powershell
+ $env:CC = 'clang'
+ $env:CXX = 'clang++'
+ $env:CC_LD = 'lld'
+ $env:CXX_LD = 'lld'
+ $env:WINDRES = 'llvm-rc'
+ ```
+ Note that some dependencies (e.g. LuaJIT) may require `sed` to configure. Fortunately, it is already bundled in
+ [Git for Windows](https://www.git-scm.com/download/win):
+ ```powershell
+ $env:PATH += ';<Git Path>\usr\bin'
+ ```
+5. Execute [ci\build-win32.ps1](https://github.com/mpv-player/mpv/blob/master/ci/build-win32.ps1). Refer to the script for more details.
+
+This process will produce a fully static ``mpv.exe`` and ``mpv.com``, as well as
+a static ``libmpv.a``.
+
+## Native Compilation with MSYS2
+
+For Windows developers seeking a quick setup, MSYS2 is an effective tool for
+compiling mpv natively on a Windows machine. The MSYS2 repositories provide
+binary packages for most of mpv's dependencies, simplifying the process to
+primarily involve building mpv itself.
+
+### Installing MSYS2
+
+1. Follow the installation steps from [MSYS2](https://www.msys2.org/).
+2. Initiate one of the [Environments](https://www.msys2.org/docs/environments/),
+ with the CLANG64 (``clang64.exe``) being the recommended option.
+ **Note:** This environment is distinct from the MSYS2 shell that opens
+ automatically after the final installation dialog. You must close that
+ initial shell and open a new one for the appropriate environment.
+
+### Updating MSYS2
+
+For guidance on updating MSYS2, please refer to the official documentation:
+[Updating MSYS2](https://www.msys2.org/docs/updating/).
+
+### Installing mpv Dependencies
+
+``` bash
+# Install pacboy
+pacman -S pactoys
-[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 [mpv-winbuild-cmake](https://github.com/shinchiro/mpv-winbuild-cmake),
-which bootstraps a MinGW-w64 environment and builds mpv and dependencies.
-
-Example with MXE
-----------------
-
-```bash
-# Before starting, make sure you install MXE prerequisites. MXE will download
-# and build all target dependencies, but no host dependencies. For example,
-# you need a working compiler, or MXE can't build the crosscompiler.
-#
-# Refer to
-#
-# https://mxe.cc/#requirements
-#
-# Scroll down for disto/OS-specific instructions to install them.
-
-# Download MXE. Note that compiling the required packages requires about 1.4 GB
-# or more!
-
-cd /opt
-git clone https://github.com/mxe/mxe mxe
-cd mxe
-
-# Set build options.
-
-# The JOBS environment variable controls threads to use when building. DO NOT
-# use the regular `make -j4` option with MXE as it will slow down the build.
-# Alternatively, you can set this in the make command by appending "JOBS=4"
-# to the end of command:
-echo "JOBS := 4" >> settings.mk
-
-# The MXE_TARGET environment variable builds MinGW-w64 for 32 bit targets.
-# Alternatively, you can specify this in the make command by appending
-# "MXE_TARGETS=i686-w64-mingw32" to the end of command:
-echo "MXE_TARGETS := i686-w64-mingw32.static" >> settings.mk
-
-# If you want to build 64 bit version, use this:
-# echo "MXE_TARGETS := x86_64-w64-mingw32.static" >> settings.mk
-
-# Build required packages. The following provide a minimum required to build
-# a reasonable mpv binary (though not an absolute minimum).
-
-make gcc ffmpeg libass jpeg lua luajit
-
-# Add MXE binaries to $PATH
-export PATH=/opt/mxe/usr/bin/:$PATH
-
-# Build mpv. The target will be used to automatically select the name of the
-# build tools involved (e.g. it will use i686-w64-mingw32.static-gcc).
-
-cd ..
-git clone https://github.com/mpv-player/mpv.git
-cd mpv
-meson setup build --crossfile crossfile
-meson compile -C build
-```
-
-Native compilation with MSYS2
-=============================
-
-For Windows developers looking to get started quickly, MSYS2 can be used to
-compile mpv natively on a Windows machine. The MSYS2 repositories have binary
-packages for most of mpv's dependencies, so the process should only involve
-building mpv itself.
-
-To build 64-bit mpv on Windows:
-
-Installing MSYS2
-----------------
-
-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
- version is preferred since the larger address space makes it less prone to
- fork() errors.
-
-2. Start a MinGW-w64 shell (``mingw64.exe``). **Note:** This is different from
- the MSYS2 shell that is started from the final installation dialog. You must
- close that shell and open a new one.
-
- For a 32-bit build, use ``mingw32.exe``.
-
-Updating MSYS2
---------------
-
-To prevent errors during post-install, the MSYS2 core runtime must be updated
-separately.
-
-```bash
-# Check for core updates. If instructed, close the shell window and reopen it
-# before continuing.
-pacman -Syu
-
-# Update everything else
-pacman -Su
-```
-
-Installing mpv dependencies
----------------------------
-
-```bash
# Install MSYS2 build dependencies and a MinGW-w64 compiler
-pacman -S git $MINGW_PACKAGE_PREFIX-{python,pkgconf,gcc,meson}
+pacboy -S git {python,pkgconf,cc,meson}:p
-# 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,luajit}
+# Install key dependencies. libass and lcms2 are also included as dependencies
+# of ffmpeg.
+pacboy -S {ffmpeg,libjpeg-turbo,libplacebo,luajit}:p
```
-Building mpv
-------------
-
-Finally, compile and install mpv. Binaries will be installed to
-``/mingw64/bin`` or ``/mingw32/bin``.
-
-```bash
-meson setup build --prefix=$MSYSTEM_PREFIX
-meson compile -C build
-```
+### Building mpv
-Or, compile and install both libmpv and mpv:
+To compile and install mpv, execute the following commands.
+The binaries will be installed in the directory ``/$MSYSTEM_PREFIX/bin``.
```bash
+# Set up the build directory with the desired configuration
meson setup build -Dlibmpv=true --prefix=$MSYSTEM_PREFIX
+
+# Compile
meson compile -C build
+
+# Optionally, install the compiled binaries
meson install -C build
```
-Linking libmpv with MSVC programs
----------------------------------
+## Running mpv
-mpv/libmpv cannot be built with Visual Studio (Microsoft is too incompetent to
-support C99/C11 properly and/or hates open source and Linux too much to
-seriously do it). But you can build C++ programs in Visual Studio and link them
-with a libmpv built with MinGW.
+Depending on your build configuration, ``mpv.exe`` may rely on external
+libraries. To create a portable package, you will need to include these
+dependencies as well. The quickest way to determine which libraries are needed
+is to run ``mpv.exe`` and note any error messages that list the required ``.dll``
+files. You can find these libraries in the sysroot used for compilation, such as
+``/clang64/bin/`` in MSYS2.
-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:
+## Linking libmpv with MSVC Programs
-```bash
-lib /name:mpv-1.dll /out:mpv.lib /MACHINE:X64
-```
+Building mpv/libmpv directly with the MSVC compiler (cl.exe) is not supported
+due to differences in compiler flags. Our build system is designed specifically
+for GNU-like compiler drivers. However, you can still build programs in
+Visual Studio and link them with libmpv.
-The string in the ``/name:`` parameter must match the filename of the DLL (this
-is simply the filename the MSVC linker will use).
-
-Static linking is not possible.
-
-Running mpv
------------
-
-If you want to run mpv from the MinGW-w64 shell, you will find the experience
-much more pleasant if you use the ``winpty`` utility
+If the toolchain used generates a ``.lib`` file, it will be ready for use.
+Otherwise, you will need to create an import library for the mpv DLL with the
+following command:
```bash
-pacman -S winpty
-winpty mpv.com ToS-4k-1920.mov
+lib /name:mpv-2.dll /out:mpv.lib /MACHINE:X64
```
-If you want to move / copy ``mpv.exe`` and ``mpv.com`` to somewhere other than
-``/mingw64/bin/`` for use outside the MinGW-w64 shell, they will still depend on
-DLLs in that folder. The simplest solution is to add ``C:\msys64\mingw64\bin``
-to the windows system ``%PATH%``. Beware though that this can cause problems or
-confusion in Cygwin if that is also installed on the machine.
-
-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.
+Ensure that the string in the ``/name:`` parameter matches the filename of the
+DLL, as this is the filename that the MSVC linker will reference.
+
+**Note:** Static linking is only feasible with matching compilers. For instance,
+if you build with Clang in Visual Studio, static linking is possible.
diff --git a/DOCS/contribute.md b/DOCS/contribute.md
index 4d2af4ea4e..669be3c6cf 100644
--- a/DOCS/contribute.md
+++ b/DOCS/contribute.md
@@ -141,7 +141,10 @@ Interface change policy
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.
+ change. The content of the file should begin with the type of the change
+ (add, remove, deprecate, change, rename, etc.). If the file contains multiple
+ changes, the change which causes the most serious compatibility issues should
+ be placed first.
- 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.
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index b55ef97739..4166bdf4b0 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -44,7 +44,7 @@ Interface changes
- 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)
+ - 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
@@ -64,7 +64,11 @@ Interface changes
- 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
+ - add `index` argument to `loadlist` command
+ - add `index` argument to `loadfile` command. This breaks all existing
+ uses of this command which make use of the argument to include the list of
+ options to be set while the file is playing. To address this problem, the
+ third argument now needs to be set to -1 if the fourth argument needs to be used.
- move the `options` argument of the `loadfile` command from the third
parameter to the fourth (after `index`)
- add `--drag-and-drop=insert-next` option
diff --git a/DOCS/interface-changes/cmd-nonrepeatable.txt b/DOCS/interface-changes/cmd-nonrepeatable.txt
new file mode 100644
index 0000000000..887b44b982
--- /dev/null
+++ b/DOCS/interface-changes/cmd-nonrepeatable.txt
@@ -0,0 +1 @@
+add `nonrepeatable` input command prefix
diff --git a/DOCS/interface-changes/egl-output-format.txt b/DOCS/interface-changes/egl-output-format.txt
new file mode 100644
index 0000000000..00bb7fd84f
--- /dev/null
+++ b/DOCS/interface-changes/egl-output-format.txt
@@ -0,0 +1,2 @@
+add `--egl-config-id` option
+add `--egl-output-format` option
diff --git a/DOCS/interface-changes/input-builtin-dragging.txt b/DOCS/interface-changes/input-builtin-dragging.txt
new file mode 100644
index 0000000000..5dbce76987
--- /dev/null
+++ b/DOCS/interface-changes/input-builtin-dragging.txt
@@ -0,0 +1 @@
+add `--input-builtin-dragging` option
diff --git a/DOCS/interface-changes/input-dragging-deadzone.txt b/DOCS/interface-changes/input-dragging-deadzone.txt
new file mode 100644
index 0000000000..d2628d4cbd
--- /dev/null
+++ b/DOCS/interface-changes/input-dragging-deadzone.txt
@@ -0,0 +1 @@
+add `--input-dragging-deadzone` option
diff --git a/DOCS/interface-changes/input-select.txt b/DOCS/interface-changes/input-select.txt
index 03e421a6c7..09306c8481 100644
--- a/DOCS/interface-changes/input-select.txt
+++ b/DOCS/interface-changes/input-select.txt
@@ -1 +1 @@
-`add mp.input.select()`
+add `mp.input.select()`
diff --git a/DOCS/interface-changes/input-touch-emulate-mouse.txt b/DOCS/interface-changes/input-touch-emulate-mouse.txt
deleted file mode 100644
index 00b08b7715..0000000000
--- a/DOCS/interface-changes/input-touch-emulate-mouse.txt
+++ /dev/null
@@ -1 +0,0 @@
-add --input-touch-emulate-mouse option
diff --git a/DOCS/interface-changes/keybind-cancel.txt b/DOCS/interface-changes/keybind-cancel.txt
new file mode 100644
index 0000000000..ab137a0cb4
--- /dev/null
+++ b/DOCS/interface-changes/keybind-cancel.txt
@@ -0,0 +1,2 @@
+change `mp.add_key_binding` so that by default, the callback is not invoked if the event is canceled; clients should now use the `complex` option to detect this situation
+add `canceled` entry to `mp.add_key_binding` callback argument
diff --git a/DOCS/interface-changes/native-touch.txt b/DOCS/interface-changes/native-touch.txt
index 91c3a53bad..164f0ce4f5 100644
--- a/DOCS/interface-changes/native-touch.txt
+++ b/DOCS/interface-changes/native-touch.txt
@@ -1 +1,3 @@
-add --native-touch option
+add `--native-touch` option
+add `--input-touch-emulate-mouse` option
+add `touch-pos` property
diff --git a/DOCS/interface-changes/option-info-expects-file.txt b/DOCS/interface-changes/option-info-expects-file.txt
new file mode 100644
index 0000000000..c8a54da0a7
--- /dev/null
+++ b/DOCS/interface-changes/option-info-expects-file.txt
@@ -0,0 +1 @@
+add "option-info/<name>/expects-file" sub-property
diff --git a/DOCS/interface-changes/osc-show.txt b/DOCS/interface-changes/osc-show.txt
new file mode 100644
index 0000000000..260ee30fe1
--- /dev/null
+++ b/DOCS/interface-changes/osc-show.txt
@@ -0,0 +1 @@
+add `osc-show` script message
diff --git a/DOCS/interface-changes/osdscale.txt b/DOCS/interface-changes/osdscale.txt
new file mode 100644
index 0000000000..38eec1afc8
--- /dev/null
+++ b/DOCS/interface-changes/osdscale.txt
@@ -0,0 +1,3 @@
+change `vidscale` script option type to string for osc.lua
+change `vidscale` script option type to string for stats.lua
+change `vidscale` default from `yes` to `auto` for osc.lua and stats.lua
diff --git a/DOCS/interface-changes/show-playlist-titles.txt b/DOCS/interface-changes/show-playlist-titles.txt
new file mode 100644
index 0000000000..dd9f32e864
--- /dev/null
+++ b/DOCS/interface-changes/show-playlist-titles.txt
@@ -0,0 +1,2 @@
+add `--osd-playlist-entry` option
+remove `osc-playlist_media_title` script-opt
diff --git a/DOCS/interface-changes/sub-ass-override-default.txt b/DOCS/interface-changes/sub-ass-override-default.txt
new file mode 100644
index 0000000000..691579693b
--- /dev/null
+++ b/DOCS/interface-changes/sub-ass-override-default.txt
@@ -0,0 +1,3 @@
+move 'scale' above 'force' for `sub-ass-override` in documentation as well as code. This more accurately reflects destructiveness of these options.
+change `sub-ass-override` default from 'yes' to 'scale'. This should result in no effective changes because 'yes' used to unintentionally do what 'scale' should've done.
+change 'u' binding to cycle between 'force' and 'scale', instead of 'force' and 'yes'
diff --git a/DOCS/interface-changes/touch-pos.txt b/DOCS/interface-changes/touch-pos.txt
deleted file mode 100644
index a390d2369f..0000000000
--- a/DOCS/interface-changes/touch-pos.txt
+++ /dev/null
@@ -1 +0,0 @@
-add `touch-pos` property
diff --git a/DOCS/interface-changes/vapoursynth-api-v4.txt.txt b/DOCS/interface-changes/vapoursynth-api-v4.txt.txt
new file mode 100644
index 0000000000..346e639b3e
--- /dev/null
+++ b/DOCS/interface-changes/vapoursynth-api-v4.txt.txt
@@ -0,0 +1 @@
+Bump dependency of VapourSynth to utilize its API version 4. New minimum VapourSynth version for runtime is R56. Some functions and plugins are changed or removed. For details, refer to VapourSynth documentation http://www.vapoursynth.com/2021/09/r55-audio-support-and-improved-performance/ and https://github.com/vapoursynth/vapoursynth/blob/R68/APIV4%20changes.txt
diff --git a/DOCS/man/ao.rst b/DOCS/man/ao.rst
index 78dfed3b51..f03f64242e 100644
--- a/DOCS/man/ao.rst
+++ b/DOCS/man/ao.rst
@@ -15,6 +15,10 @@ in the list.
See ``--ao=help`` for a list of compiled-in audio output drivers sorted by
autoprobe order.
+ Note that the default audio output driver is subject to change, and must
+ not be relied upon. If a certain AO needs to be used, it must be
+ explicitly specified.
+
Available audio output drivers are:
``alsa``
diff --git a/DOCS/man/console.rst b/DOCS/man/console.rst
index 69cc103c15..7028e6c76d 100644
--- a/DOCS/man/console.rst
+++ b/DOCS/man/console.rst
@@ -167,7 +167,6 @@ Configurable Options
Default: true
Remove duplicate entries in history as to only keep the latest one.
- multiplied by "scale."
``font_hw_ratio``
Default: auto
diff --git a/DOCS/man/encode.rst b/DOCS/man/encode.rst
index 26f3d6cbc8..c650d0f6c4 100644
--- a/DOCS/man/encode.rst
+++ b/DOCS/man/encode.rst
@@ -8,7 +8,7 @@ You can encode files from one format/codec to another using this facility.
``--of=<format>``
Specifies the output format (overrides autodetection by the file name
- extension of the file specified by ``-o``). See ``--of=help`` for a full
+ extension of the file specified by ``--o``). See ``--of=help`` for a full
list of supported formats.
``--ofopts=<options>``
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index e0bfadf98f..f638cb7e69 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst</