2014-07-02 23:24:41 +00:00
|
|
|
Introduction
|
|
|
|
============
|
|
|
|
|
|
|
|
This file lists all changes that can cause compatibility issues when using
|
|
|
|
mpv through the client API (libmpv and ``client.h``). Since the client API
|
|
|
|
interfaces to input handling (commands, properties) as well as command line
|
2015-05-22 17:00:13 +00:00
|
|
|
options, you should also look at ``interface-changes.rst``.
|
2014-07-02 23:24:41 +00:00
|
|
|
|
|
|
|
Normally, changes to the C API that are incompatible to previous iterations
|
|
|
|
receive a major version bump (i.e. the first version number is increased),
|
|
|
|
while C API additions bump the minor version (i.e. the second number is
|
|
|
|
increased). Changes to properties/commands/options may also lead to a minor
|
|
|
|
version bump, in particular if they are incompatible.
|
|
|
|
|
|
|
|
The version number is the same as used for MPV_CLIENT_API_VERSION (see
|
|
|
|
``client.h`` how to convert between major/minor version numbers and the flat
|
|
|
|
32 bit integer).
|
|
|
|
|
|
|
|
Also, read the section ``Compatibility`` in ``client.h``.
|
|
|
|
|
2015-05-22 17:00:13 +00:00
|
|
|
Options, commands, properties
|
|
|
|
=============================
|
|
|
|
|
|
|
|
Changes to these are not listed here, but in ``interface-changes.rst``. (Before
|
|
|
|
client API version 1.17, they were listed here partially.)
|
|
|
|
|
|
|
|
This listing includes changes to the bare C API and behavior only, not what
|
|
|
|
you can access with them.
|
|
|
|
|
2014-07-02 23:24:41 +00:00
|
|
|
API changes
|
|
|
|
===========
|
|
|
|
|
2014-07-06 17:05:45 +00:00
|
|
|
::
|
|
|
|
|
2018-02-12 23:49:13 +00:00
|
|
|
--- mpv 0.29.0 ---
|
2018-04-20 17:26:04 +00:00
|
|
|
1.101 - add MPV_RENDER_PARAM_ADVANCED_CONTROL and related API
|
2018-04-20 22:26:58 +00:00
|
|
|
- add MPV_RENDER_PARAM_NEXT_FRAME_INFO and related symbols
|
|
|
|
- add MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME
|
|
|
|
- add MPV_RENDER_PARAM_SKIP_RENDERING
|
|
|
|
- add mpv_render_context_get_info()
|
client API: add a new way to pass X11 Display etc. to render API
Hardware decoding things often need access to additional handles from
the windowing system, such as the X11 or Wayland display when using
vaapi. The opengl-cb had nothing dedicated for this, and used the weird
GL_MP_MPGetNativeDisplay GL extension (which was mpv specific and not
officially registered with OpenGL).
This was awkward, and a pain due to having to emulate GL context
behavior (like needing a TLS variable to store context for the pseudo GL
extension function). In addition (and not inherently due to this), we
could pass only one resource from mpv builtin context backends to
hwdecs. It was also all GL specific.
Replace this with a newer mechanism. It works for all RA backends, not
just GL. the API user can explicitly pass the objects at init time via
mpv_render_context_create(). Multiple resources are naturally possible.
The API uses MPV_RENDER_PARAM_* defines, but internally we use strings.
This is done for 2 reasons: 1. trying to leave libmpv and internal
mechanisms decoupled, 2. not having to add public API for some of the
internal resource types (especially D3D/GL interop stuff).
To remain sane, drop support for obscure half-working opengl-cb things,
like the DRM interop (was missing necessary things), the RPI window
thing (nobody used it), and obscure D3D interop things (not needed with
ANGLE, others were undocumented). In order not to break ABI and the C
API, we don't remove the associated structs from opengl_cb.h.
The parts which are still needed (in particular DRM interop) needs to be
ported to the render API.
2018-03-22 16:05:01 +00:00
|
|
|
1.100 - bump API number to avoid confusion with mpv release versions
|
|
|
|
- actually apply the GL_MP_MPGetNativeDisplay change for the new render
|
|
|
|
API. This also means compatibility for anything but x11 and wayland
|
|
|
|
through the old opengl-cb GL_MP_MPGetNativeDisplay method is now
|
|
|
|
unsupported.
|
2018-03-23 15:24:17 +00:00
|
|
|
- deprecate mpv_get_wakeup_pipe(). It's complex, but easy to replace
|
|
|
|
using normal API (just set a wakeup callback to a function which
|
|
|
|
writes to a pipe).
|
2018-03-23 15:24:49 +00:00
|
|
|
- add a 1st class hook API, which replaces the hacky mpv_command()
|
|
|
|
based one. The old API is deprecated and will be removed soon. The
|
|
|
|
old API was never meant to be stable, while the new API is.
|
2018-03-09 03:46:09 +00:00
|
|
|
1.29 - the behavior of mpv_terminate_destroy() and mpv_detach_destroy()
|
|
|
|
changes subtly (see documentation in the header file). In particular,
|
|
|
|
mpv_detach_destroy() will not leave the player running in all
|
|
|
|
situations anymore (it gets closer to refcounting).
|
2018-03-09 05:05:50 +00:00
|
|
|
- rename mpv_detach_destroy() to mpv_destroy() (the old function will
|
|
|
|
remain valid as deprecated alias)
|
2018-03-09 05:00:51 +00:00
|
|
|
- add mpv_create_weak_client(), which makes use of above changes
|
2018-03-09 10:53:48 +00:00
|
|
|
- MPV_EVENT_SHUTDOWN is now returned exactly once if a mpv_handle
|
|
|
|
should terminate, instead of spamming the event queue with this event
|
2018-02-20 12:30:18 +00:00
|
|
|
1.28 - deprecate the render opengl_cb API, and replace it with render.h
|
|
|
|
and render_gl.h. The goal is allowing support for APIs other than
|
|
|
|
OpenGL. The old API is emulated with the new API.
|
|
|
|
Likewise, the "opengl-cb" VO is renamed to "libmpv".
|
|
|
|
mpv_get_sub_api() is deprecated along the opengl_cb API.
|
|
|
|
The new API is relatively similar, but not the same. The rough
|
|
|
|
equivalents are:
|
|
|
|
mpv_opengl_cb_init_gl => mpv_render_context_create
|
|
|
|
mpv_opengl_cb_set_update_callback => mpv_render_context_set_update_callback
|
|
|
|
mpv_opengl_cb_draw => mpv_render_context_render
|
|
|
|
mpv_opengl_cb_report_flip => mpv_render_context_report_swap
|
|
|
|
mpv_opengl_cb_uninit_gl => mpv_render_context_free
|
|
|
|
The VO opengl-cb is also renamed to "libmpv".
|
client API: add a new way to pass X11 Display etc. to render API
Hardware decoding things often need access to additional handles from
the windowing system, such as the X11 or Wayland display when using
vaapi. The opengl-cb had nothing dedicated for this, and used the weird
GL_MP_MPGetNativeDisplay GL extension (which was mpv specific and not
officially registered with OpenGL).
This was awkward, and a pain due to having to emulate GL context
behavior (like needing a TLS variable to store context for the pseudo GL
extension function). In addition (and not inherently due to this), we
could pass only one resource from mpv builtin context backends to
hwdecs. It was also all GL specific.
Replace this with a newer mechanism. It works for all RA backends, not
just GL. the API user can explicitly pass the objects at init time via
mpv_render_context_create(). Multiple resources are naturally possible.
The API uses MPV_RENDER_PARAM_* defines, but internally we use strings.
This is done for 2 reasons: 1. trying to leave libmpv and internal
mechanisms decoupled, 2. not having to add public API for some of the
internal resource types (especially D3D/GL interop stuff).
To remain sane, drop support for obscure half-working opengl-cb things,
like the DRM interop (was missing necessary things), the RPI window
thing (nobody used it), and obscure D3D interop things (not needed with
ANGLE, others were undocumented). In order not to break ABI and the C
API, we don't remove the associated structs from opengl_cb.h.
The parts which are still needed (in particular DRM interop) needs to be
ported to the render API.
2018-03-22 16:05:01 +00:00
|
|
|
Also, the GL_MP_MPGetNativeDisplay pseudo extension is not used by the
|
|
|
|
render API anymore, and the old opengl-cb API only handles the "x11"
|
|
|
|
and "wl" names anymore. Support for everything else has been removed.
|
|
|
|
The new render API uses proper API parameters, e.g. for X11 you pass
|
|
|
|
MPV_RENDER_PARAM_X11_DISPLAY directly.
|
2018-03-13 09:45:17 +00:00
|
|
|
- deprecate the qthelper.hpp header file. This provided some C++ helper
|
|
|
|
utility functions for Qt with use of libmpv. There is no reason to
|
|
|
|
keep this in the mpv git repository, nor to make it part of the libmpv
|
|
|
|
API. If you're using this header, you can safely copy it into your
|
|
|
|
project - it uses only libmpv public API. Alternatively, it could be
|
|
|
|
maintained in a separate repository by interested parties.
|
2018-02-12 23:49:13 +00:00
|
|
|
1.27 - make opengl-cb the default VO. This causes a subtle behavior change
|
|
|
|
if the API user called mpv_opengl_cb_init_gl(), but does not set
|
|
|
|
the "vo" option. Before, it would still have used another VO (like
|
|
|
|
on the CLI, e.g. vo=gpu). Now it'll behave as if vo=opengl-cb was
|
|
|
|
used.
|
2017-12-25 10:43:04 +00:00
|
|
|
--- mpv 0.28.0 ---
|
2017-10-23 19:11:31 +00:00
|
|
|
1.26 - remove glMPGetNativeDisplay("drm") support
|
|
|
|
- add mpv_opengl_cb_window_pos and mpv_opengl_cb_drm_params and
|
|
|
|
support via glMPGetNativeDisplay() for using it
|
2017-12-17 13:03:33 +00:00
|
|
|
- make --stop-playback-on-init-failure=no the default in libmpv (just
|
|
|
|
like in mpv CLI)
|
2017-09-13 01:40:14 +00:00
|
|
|
--- mpv 0.27.0 ---
|
2017-06-26 17:55:40 +00:00
|
|
|
1.25 - remove setting "no-" options via mpv_set_option*(). (See corresponding
|
|
|
|
deprecation in 0.23.0.)
|
2017-04-20 04:16:23 +00:00
|
|
|
--- mpv 0.25.0 ---
|
|
|
|
1.24 - add a MPV_ENABLE_DEPRECATED preprocessor symbol, which can be defined
|
|
|
|
by the user to exclude deprecated API symbols from the C headers
|
2016-11-22 13:47:50 +00:00
|
|
|
--- mpv 0.23.0 ---
|
|
|
|
1.24 - the deprecated mpv_suspend() and mpv_resume() APIs now do nothing.
|
2016-11-20 16:37:22 +00:00
|
|
|
--- mpv 0.22.0 ---
|
2016-08-31 15:28:42 +00:00
|
|
|
1.23 - deprecate setting "no-" options via mpv_set_option*(). For example,
|
|
|
|
instead of "no-video=" you should set "video=no".
|
2016-09-15 11:13:23 +00:00
|
|
|
- do not override the SIGPIPE signal handler anymore. This was done as
|
|
|
|
workaround for the FFmpeg TLS code, which has been fixed long ago.
|
2016-09-16 12:24:31 +00:00
|
|
|
- deprecate mpv_suspend() and mpv_resume(). They will be stubbed out
|
2016-11-21 19:17:41 +00:00
|
|
|
in mpv 0.23.0.
|
2016-09-21 14:19:56 +00:00
|
|
|
- make mpv_set_property() work to some degree before mpv_initialize().
|
|
|
|
It can now be used instead of mpv_set_option().
|
|
|
|
- semi-deprecate mpv_set_option()/mpv_set_option_string(). You should
|
|
|
|
use mpv_set_property() instead. There are some deprecated properties
|
|
|
|
which conflict with some options (see client.h remarks on
|
|
|
|
mpv_set_option()), for which mpv_set_option() might still be required.
|
|
|
|
In future mpv releases, the conflicting deprecated options/properties
|
|
|
|
will be removed, and mpv_set_option() will internally translate API
|
|
|
|
calls to mpv_set_property().
|
2016-09-26 14:45:55 +00:00
|
|
|
- qthelper.hpp: deprecate get_property_variant, set_property_variant,
|
2016-11-15 22:49:09 +00:00
|
|
|
set_option_variant, command_variant, and replace them with
|
|
|
|
get_property, set_property, command.
|
2016-08-31 15:28:42 +00:00
|
|
|
--- mpv 0.19.0 ---
|
2016-08-07 17:40:17 +00:00
|
|
|
1.22 - add stream_cb API for custom protocols
|
2016-07-08 12:11:52 +00:00
|
|
|
--- mpv 0.18.1 ---
|
|
|
|
---- - remove "status" log level from mpv_request_log_messages() docs. This
|
|
|
|
is 100% equivalent to "v". The behavior is still the same, thus no
|
|
|
|
actual API change.
|
2016-06-25 10:39:08 +00:00
|
|
|
--- mpv 0.18.0 ---
|
2016-04-15 09:31:24 +00:00
|
|
|
1.21 - mpv_set_property() changes behavior with MPV_FORMAT_NODE. Before this
|
|
|
|
change it rejected mpv_nodes with format==MPV_FORMAT_STRING if the
|
|
|
|
property was not a string or did not have special mechanisms in place
|
|
|
|
the function failed. Now it always invokes the option string parser,
|
|
|
|
and mpv_node with a basic data type works exactly as if the function
|
|
|
|
is invoked with that type directly. This new behavior is equivalent
|
|
|
|
to mpv_set_option().
|
|
|
|
This also affects the mp.set_property_native() Lua function.
|
2016-05-04 15:37:54 +00:00
|
|
|
- generally, setting choice options/properties with "yes"/"no" options
|
|
|
|
can now be set as MPV_FORMAT_FLAG
|
|
|
|
- reading a choice property as MPV_FORMAT_NODE will now return a
|
|
|
|
MPV_FORMAT_FLAG value if the choice is "yes" (true) or "no" (false)
|
|
|
|
This implicitly affects Lua and JSON IPC interfaces as well.
|
2016-06-05 14:56:34 +00:00
|
|
|
- big changes to vo-cmdline on vo_opengl and vo_opengl_hq (but not
|
|
|
|
vo_opengl_cb): options are now normally not reset, but applied on top
|
|
|
|
of the current options. The special undocumented value "-" still
|
|
|
|
works, but now resets all options to before any vo-cmdline command
|
|
|
|
has been called.
|
2015-09-24 19:07:16 +00:00
|
|
|
--- mpv 0.12.0 ---
|
|
|
|
1.20 - deprecate "GL_MP_D3D_interfaces"/"glMPGetD3DInterface", and introduce
|
|
|
|
"GL_MP_MPGetNativeDisplay"/"glMPGetNativeDisplay" (this is a
|
|
|
|
backwards-compatible rename)
|
2015-09-22 23:12:15 +00:00
|
|
|
--- mpv 0.11.0 ---
|
2015-09-24 19:07:16 +00:00
|
|
|
--- mpv 0.10.0 ---
|
2015-09-10 12:08:10 +00:00
|
|
|
1.19 - add "GL_MP_D3D_interfaces" pseudo extension to make it possible to
|
2015-07-03 14:37:01 +00:00
|
|
|
use DXVA2 in OpenGL fullscreen mode in some situations
|
2015-09-10 12:08:10 +00:00
|
|
|
- mpv_request_log_messages() now accepts "terminal-default" as parameter
|
2015-06-11 19:39:48 +00:00
|
|
|
1.18 - add MPV_END_FILE_REASON_REDIRECT, and change behavior of
|
|
|
|
MPV_EVENT_END_FILE accordingly
|
|
|
|
- a bunch of interface-changes.rst changes
|
2015-05-11 15:38:35 +00:00
|
|
|
1.17 - mpv_initialize() now blocks SIGPIPE (details see client.h)
|
2015-09-10 12:08:10 +00:00
|
|
|
--- mpv 0.9.0 ---
|
2015-04-09 17:30:26 +00:00
|
|
|
1.16 - add mpv_opengl_cb_report_flip()
|
2015-04-09 17:31:01 +00:00
|
|
|
- introduce mpv_opengl_cb_draw() and deprecate mpv_opengl_cb_render()
|
2015-05-11 15:38:35 +00:00
|
|
|
- add MPV_FORMAT_BYTE_ARRAY
|
2015-03-05 10:17:22 +00:00
|
|
|
1.15 - mpv_initialize() will now load config files. This requires setting
|
|
|
|
the "config" and "config-dir" options. In particular, it will load
|
|
|
|
mpv.conf.
|
2015-03-05 11:41:43 +00:00
|
|
|
- minor backwards-compatible change to the "seek" and "screenshot"
|
|
|
|
commands (new flag syntax, old additional args deprecated)
|
2015-09-10 12:08:10 +00:00
|
|
|
--- mpv 0.8.0 ---
|
2015-02-02 16:24:33 +00:00
|
|
|
1.14 - add mpv_wait_async_requests()
|
2015-02-17 22:42:25 +00:00
|
|
|
- the --msg-level option changes its native type from a flat string to
|
|
|
|
a key-value list (setting/reading the option as string still works)
|
2015-01-19 18:54:20 +00:00
|
|
|
1.13 - add MPV_EVENT_QUEUE_OVERFLOW
|
2014-12-30 21:24:57 +00:00
|
|
|
1.12 - add class Handle to qthelper.hpp
|
2014-12-31 19:32:35 +00:00
|
|
|
- improve opengl_cb.h API uninitialization behavior, and fix the qml
|
|
|
|
example
|
|
|
|
- add mpv_create_client() function
|
2014-12-09 16:47:02 +00:00
|
|
|
1.11 - add OpenGL rendering interop API - allows an application to combine
|
|
|
|
its own and mpv's OpenGL rendering
|
|
|
|
Warning: this API is not stable yet - anything in opengl_cb.h might
|
|
|
|
be changed in completely incompatible ways in minor API bumps
|
2015-09-10 12:08:10 +00:00
|
|
|
--- mpv 0.7.0 ---
|
2014-11-23 14:08:49 +00:00
|
|
|
1.10 - deprecate/disable everything directly related to script_dispatch
|
|
|
|
(most likely affects nobody)
|
2014-10-28 14:44:25 +00:00
|
|
|
1.9 - add enum mpv_end_file_reason for mpv_event_end_file.reason
|
2014-10-28 15:19:07 +00:00
|
|
|
- add MPV_END_FILE_REASON_ERROR and the mpv_event_end_file.error field
|
|
|
|
for slightly better error reporting on playback failure
|
2014-10-28 18:51:44 +00:00
|
|
|
- add --stop-playback-on-init-failure option, and make it the default
|
|
|
|
behavior for libmpv only
|
2014-10-30 10:26:31 +00:00
|
|
|
- add qthelper.hpp set_option_variant()
|
2014-11-08 08:59:38 +00:00
|
|
|
- mark the following events as deprecated:
|
|
|
|
MPV_EVENT_TRACKS_CHANGED
|
|
|
|
MPV_EVENT_TRACK_SWITCHED
|
|
|
|
MPV_EVENT_PAUSE
|
|
|
|
MPV_EVENT_UNPAUSE
|
|
|
|
MPV_EVENT_METADATA_UPDATE
|
|
|
|
MPV_EVENT_CHAPTER_CHANGE
|
|
|
|
They are handled better with mpv_observe_property() as mentioned in
|
|
|
|
the documentation comments. They are not removed and still work.
|
2014-10-13 19:38:54 +00:00
|
|
|
1.8 - add qthelper.hpp
|
2014-10-10 21:58:59 +00:00
|
|
|
1.7 - add mpv_command_node(), mpv_command_node_async()
|
2014-10-07 19:01:19 +00:00
|
|
|
1.6 - modify "core-idle" property behavior
|
2014-10-08 11:11:55 +00:00
|
|
|
- MPV_EVENT_LOG_MESSAGE now always sends complete lines
|
2014-10-08 12:15:14 +00:00
|
|
|
- introduce numeric log levels (mpv_log_level)
|
2015-09-10 12:08:10 +00:00
|
|
|
--- mpv 0.6.0 ---
|
client API, X11: change default keyboard input handling again
Commit 64b7811c tried to do the "right thing" with respect to whether
keyboard input should be enabled or not. It turns out that X11 does
something stupid by design. All modern toolkits work around this native
X11 behavior, but embedding breaks these workarounds.
The only way to handle this correctly is the XEmbed protocol. It needs
to be supported by the toolkit, and probably also some mpv support. But
Qt has inconsistent support for it. In Qt 4, a X11 specific embedding
widget was needed. Qt 5.0 doesn't support it at all. Qt 5.1 apparently
supports it via QWindow, but if it really does, I couldn't get it to
work.
So add a hack instead. The new --input-x11-keyboard option controls
whether mpv should enable keyboard input on the X11 window or not. In
the command line player, it's enabled by default, but in libmpv it's
disabled.
This hack has the same problem as all previous embedding had: move the
mouse outside of the window, and you don't get keyboard input anymore.
Likewise, mpv will steal all keyboard input from the parent application
as long as the mouse is inside of the mpv window.
Also see issue #1090.
2014-09-28 18:11:00 +00:00
|
|
|
1.5 - change in X11 and "--wid" behavior again. The previous change didn't
|
|
|
|
work as expected, and now the behavior can be explicitly controlled
|
|
|
|
with the "input-x11-keyboard" option. This is only a temporary
|
|
|
|
measure until XEmbed is implemented and confirmed working.
|
2014-10-09 16:28:37 +00:00
|
|
|
Note: in 1.6, "input-x11-keyboard" was renamed to "input-vo-keyboard",
|
|
|
|
although the old option name still works.
|
2014-08-31 12:26:31 +00:00
|
|
|
1.4 - subtle change in X11 and "--wid" behavior
|
client API, X11: change default keyboard input handling again
Commit 64b7811c tried to do the "right thing" with respect to whether
keyboard input should be enabled or not. It turns out that X11 does
something stupid by design. All modern toolkits work around this native
X11 behavior, but embedding breaks these workarounds.
The only way to handle this correctly is the XEmbed protocol. It needs
to be supported by the toolkit, and probably also some mpv support. But
Qt has inconsistent support for it. In Qt 4, a X11 specific embedding
widget was needed. Qt 5.0 doesn't support it at all. Qt 5.1 apparently
supports it via QWindow, but if it really does, I couldn't get it to
work.
So add a hack instead. The new --input-x11-keyboard option controls
whether mpv should enable keyboard input on the X11 window or not. In
the command line player, it's enabled by default, but in libmpv it's
disabled.
This hack has the same problem as all previous embedding had: move the
mouse outside of the window, and you don't get keyboard input anymore.
Likewise, mpv will steal all keyboard input from the parent application
as long as the mouse is inside of the mpv window.
Also see issue #1090.
2014-09-28 18:11:00 +00:00
|
|
|
(this change was added to 0.5.2, and broke some things, see #1090)
|
2015-09-10 12:08:10 +00:00
|
|
|
--- mpv 0.5.0 ---
|
2014-08-05 00:23:14 +00:00
|
|
|
1.3 - add MPV_MAKE_VERSION()
|
2014-07-06 17:05:59 +00:00
|
|
|
1.2 - remove "stream-time-pos" property (no replacement)
|
2014-07-02 23:24:41 +00:00
|
|
|
1.1 - remap dvdnav:// to dvd://
|
|
|
|
- add "--cache-file", "--cache-file-size"
|
|
|
|
- add "--colormatrix-primaries" (and property)
|
|
|
|
- add "primaries" sub-field to image format properties
|
|
|
|
- add "playback-time" property
|
|
|
|
- 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
|
2015-09-10 12:08:10 +00:00
|
|
|
--- mpv 0.4.0 ---
|
2014-07-02 23:24:41 +00:00
|
|
|
1.0 - the API is declared stable
|
2014-07-06 17:05:45 +00:00
|
|
|
|