summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2019-12-16 01:47:06 +0100
committerwm4 <wm4@nowhere>2019-12-16 01:47:06 +0100
commitaa5f234b439f69c66e66fa033f443edc3055f185 (patch)
tree74bcbf31b142edcb5f201699e6e89a5eae4533db
parent76a92fd30b0fc12da024eb1187756d6432f8ab13 (diff)
downloadmpv-aa5f234b439f69c66e66fa033f443edc3055f185.tar.bz2
mpv-aa5f234b439f69c66e66fa033f443edc3055f185.tar.xz
command: change "edition" property behavior
See manpage/changelog changes. The purpose of this change is to removes another case of inconsistent property behavior. At first I wanted to make this go through deprecation before making a technically incompatible change, but then I considered this feature too obscure as that anyone would care.
-rw-r--r--DOCS/interface-changes.rst5
-rw-r--r--DOCS/man/input.rst17
-rw-r--r--player/command.c29
3 files changed, 36 insertions, 15 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index 59e00130c4..e3f197ab33 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -62,6 +62,11 @@ Interface changes
- remove old Apple Remote support, including --input-appleremote
- add MediaPlayer support and remove the old Media Key event tap on macOS.
this possibly also re-adds the Apple Remote support
+ - the "edition" property now strictly returns the value of the option,
+ instead of the runtime value. The new "current-edition" property needs to
+ be queried to read the runtime-chosen edition. This is a breaking change
+ for any users which expected "edition" to return the runtime-chosen
+ edition at default settings (--edition=auto).
--- mpv 0.30.0 ---
- add `--d3d11-output-format` to enable explicit selection of a D3D11
swap chain format.
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 3d9263ee3f..fbfede5869 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -1525,6 +1525,18 @@ Property list
Current MKV edition number. Setting this property to a different value will
restart playback. The number of the first edition is 0.
+ Before mpv 0.31.0, this showed the actual edition selected at runtime, if
+ you didn't set the option or property manually. With mpv 0.31.0 and later,
+ this strictly returns the user-set option or property value, and the
+ ``current-edition`` property was added to return the runtime selected
+ edition (this matters with ``--edition=auto``, the default).
+
+``current-edition``
+ Currently selected edition. This property is unavailable if no file is
+ loaded, or the file has no editions. (Matroska files make a difference
+ between having no editions and a single edition, which will be reflected by
+ the property, although in practice it does not matter.)
+
``chapters``
Number of chapters.
@@ -2714,11 +2726,6 @@ caveats with some properties (due to historical reasons):
*iff* video (for ``vf``) or audio (for ``af``) was active. If playback was
not active, the behavior was the same as the current behavior.
-``edition``
- While a file is loaded, the property will always return the effective
- edition, and setting the ``auto`` value will show somewhat strange behavior
- (the property eventually switching to whatever is the default edition).
-
``playlist``
The property is read-only and returns the current internal playlist. The
option is for loading playlist during command line parsing. For client API
diff --git a/player/command.c b/player/command.c
index 1a7d5a6d20..901326b498 100644
--- a/player/command.c
+++ b/player/command.c
@@ -1040,24 +1040,32 @@ static int mp_property_list_chapters(void *ctx, struct m_property *prop,
return m_property_read_list(action, arg, count, get_chapter_entry, mpctx);
}
+static int mp_property_current_edition(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ struct demuxer *demuxer = mpctx->demuxer;
+ if (!demuxer || demuxer->num_editions <= 0)
+ return M_PROPERTY_UNAVAILABLE;
+ return m_property_int_ro(action, arg, demuxer->edition);
+}
+
static int mp_property_edition(void *ctx, struct m_property *prop,
int action, void *arg)
{
MPContext *mpctx = ctx;
struct demuxer *demuxer = mpctx->demuxer;
- if (!mpctx->playback_initialized || !demuxer || demuxer->num_editions <= 0)
- return mp_property_generic_option(mpctx, prop, action, arg);
- switch (action) {
- case M_PROPERTY_GET:
- *(int *)arg = demuxer->edition;
+ if (action == M_PROPERTY_GET_CONSTRICTED_TYPE && demuxer) {
+ *(struct m_option *)arg = (struct m_option){
+ .type = CONF_TYPE_INT,
+ .flags = M_OPT_RANGE,
+ .min = 0,
+ .max = demuxer->num_editions - 1,
+ };
return M_PROPERTY_OK;
- case M_PROPERTY_GET_CONSTRICTED_TYPE: {
- int r = mp_property_generic_option(mpctx, prop, M_PROPERTY_GET_TYPE, arg);
- ((struct m_option *)arg)->max = demuxer->num_editions - 1;
- return r;
- }
}
+
return mp_property_generic_option(mpctx, prop, action, arg);
}
@@ -3273,6 +3281,7 @@ static const struct m_property mp_properties_base[] = {
{"playback-time", mp_property_playback_time},
{"chapter", mp_property_chapter},
{"edition", mp_property_edition},
+ {"current-edition", mp_property_current_edition},
{"chapters", mp_property_chapters},
{"editions", mp_property_editions},
{"metadata", mp_property_metadata},