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.
This commit is contained in:
wm4 2019-12-16 01:47:06 +01:00
parent 76a92fd30b
commit aa5f234b43
3 changed files with 36 additions and 15 deletions

View File

@ -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.

View File

@ -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

View File

@ -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},