diff options
author | wm4 <wm4@nowhere> | 2016-05-04 17:37:54 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-05-04 17:37:54 +0200 |
commit | b2646911a900cf3cb9c6e90aa28066c7be91abaf (patch) | |
tree | 8e867f0a82e73b9f336e437ba6a4d372600bdd49 | |
parent | 833375f88d0392cac49b30ee3a4704fbab58e814 (diff) | |
download | mpv-b2646911a900cf3cb9c6e90aa28066c7be91abaf.tar.bz2 mpv-b2646911a900cf3cb9c6e90aa28066c7be91abaf.tar.xz |
client API: access choices as flags if appropriate
Options/properties that are choices, and which include "yes" or "no"
values (or both) can now be read and written as MPV_FORMAT_FLAG.
For write access, rejecting flags in these cases was obnoxiously
unintuitive and inconvenient.
For read access, the value of this is less convincing, and actually it's
a major API change. At this point I probably have to admit that the
finer details of the client API are very unstable.
-rw-r--r-- | DOCS/client-api-changes.rst | 5 | ||||
-rw-r--r-- | DOCS/interface-changes.rst | 4 | ||||
-rw-r--r-- | options/m_option.c | 17 |
3 files changed, 24 insertions, 2 deletions
diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst index 44490ea79d..8fcdf83e32 100644 --- a/DOCS/client-api-changes.rst +++ b/DOCS/client-api-changes.rst @@ -41,6 +41,11 @@ API changes 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. + - 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. --- mpv 0.12.0 --- 1.20 - deprecate "GL_MP_D3D_interfaces"/"glMPGetD3DInterface", and introduce "GL_MP_MPGetNativeDisplay"/"glMPGetNativeDisplay" (this is a diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst index 5ca7f19639..58197d7a70 100644 --- a/DOCS/interface-changes.rst +++ b/DOCS/interface-changes.rst @@ -28,6 +28,10 @@ Interface changes - add "hwdec-interop" and "hwdec-current" properties - deprecated "hwdec-active" and "hwdec-detected" properties (to be removed in mpv 0.19.0) + - choice option/property values that are "yes" or "no" will now be returned + as booleans when using the mpv_node functions in the client API, the + "native" property accessors in Lua, and the JSON API. They can be set as + such as well. --- mpv 0.17.0 --- - deprecate "track-list/N/audio-channels" property (use "track-list/N/demux-channel-count" instead) diff --git a/options/m_option.c b/options/m_option.c index 1d8b1d0bf6..85bdf91cf4 100644 --- a/options/m_option.c +++ b/options/m_option.c @@ -672,6 +672,8 @@ static int choice_set(const m_option_t *opt, void *dst, struct mpv_node *src) src_str = buf; } else if (src->format == MPV_FORMAT_STRING) { src_str = src->u.string; + } else if (src->format == MPV_FORMAT_FLAG) { + src_str = src->u.flag ? "yes" : "no"; } if (!src_str) return M_OPT_UNKNOWN; @@ -713,8 +715,19 @@ static int choice_get(const m_option_t *opt, void *ta_parent, alt = NULL; } if (alt) { - dst->format = MPV_FORMAT_STRING; - dst->u.string = talloc_strdup(ta_parent, alt->name); + int b = -1; + if (strcmp(alt->name, "yes") == 0) { + b = 1; + } else if (strcmp(alt->name, "no") == 0) { + b = 0; + } + if (b >= 0) { + dst->format = MPV_FORMAT_FLAG; + dst->u.flag = b; + } else { + dst->format = MPV_FORMAT_STRING; + dst->u.string = talloc_strdup(ta_parent, alt->name); + } } else { dst->format = MPV_FORMAT_INT64; dst->u.int64 = ival; |