summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-10-07 21:01:19 +0200
committerwm4 <wm4@nowhere>2014-10-07 21:01:19 +0200
commit128bb68d290107c15f2c5b38593048da6e321f40 (patch)
tree084aca6e7a42206593e486033339f1fcd192aa04
parent9541537e32ce220bb6b603ad505217a904d3bf50 (diff)
downloadmpv-128bb68d290107c15f2c5b38593048da6e321f40.tar.bz2
mpv-128bb68d290107c15f2c5b38593048da6e321f40.tar.xz
client API: clarify pause/unpause events, modify core-idle property
Whether you consider the semantics weird or not depends on your use case, but I suppose it's a bit confusing anyway. At this point, we keep MPV_EVENT_PAUSE/UNPAUSE for compatibility only. Make the "core-idle" property somewhat more useful in this context.
-rw-r--r--DOCS/client-api-changes.rst2
-rw-r--r--DOCS/man/input.rst4
-rw-r--r--libmpv/client.h21
-rw-r--r--player/command.c3
4 files changed, 24 insertions, 6 deletions
diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst
index be6d86cd46..605d55fa47 100644
--- a/DOCS/client-api-changes.rst
+++ b/DOCS/client-api-changes.rst
@@ -25,6 +25,8 @@ API changes
::
+ 1.6 - modify "core-idle" property behavior
+ --- mpv 0.6.0 is released ---
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
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index ae3454c51f..89be9dcaec 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -828,6 +828,10 @@ Property list
be different ``pause`` in special situations, such as when the player
pauses itself due to low network cache.
+ This also returns ``yes`` if playback is restarting or if nothing is
+ playing at all. In other words, it's only ``no`` if there's actually
+ video playing. (Behavior since mpv 0.7.0.)
+
``cache``
Network cache fill state (0-100.0).
diff --git a/libmpv/client.h b/libmpv/client.h
index 9e8909ec56..54b4718155 100644
--- a/libmpv/client.h
+++ b/libmpv/client.h
@@ -162,7 +162,7 @@ extern "C" {
* relational operators (<, >, <=, >=).
*/
#define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL)
-#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 5)
+#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 6)
/**
* Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with.
@@ -892,10 +892,21 @@ typedef enum mpv_event_id {
*/
MPV_EVENT_IDLE = 11,
/**
- * Playback was paused. This indicates the logical pause state (like the
- * property "pause" as opposed to the "core-idle" propetty). This event
- * is sent whenever any pause state changes, not only the logical state,
- * so you might get multiple MPV_EVENT_PAUSE events in a row.
+ * Playback was paused. This indicates the user pause state.
+ *
+ * The user pause state is the state the user requested (changed with the
+ * "pause" property). There is an internal pause state too, which is entered
+ * if e.g. the network is too slow (the "core-idle" property generally
+ * indicates whether the core is playing or waiting).
+ *
+ * This event is sent whenever any pause states change, not only the user
+ * state. You might get multiple events in a row while these states change
+ * independently. But the event ID sent always indicates the user pause
+ * state.
+ *
+ * If you don't want to deal with this, use mpv_observe_property() on the
+ * "pause" property and ignore MPV_EVENT_PAUSE/UNPAUSE. Likewise, the
+ * "core-idle" property tells you whether video is actually playing or not.
*/
MPV_EVENT_PAUSE = 12,
/**
diff --git a/player/command.c b/player/command.c
index 8d4e3170a9..4b1f37288c 100644
--- a/player/command.c
+++ b/player/command.c
@@ -1020,7 +1020,8 @@ static int mp_property_core_idle(void *ctx, struct m_property *prop,
int action, void *arg)
{
MPContext *mpctx = ctx;
- return m_property_flag_ro(action, arg, mpctx->paused);
+ bool idle = mpctx->paused || !mpctx->restart_complete || !mpctx->playing;
+ return m_property_flag_ro(action, arg, idle);
}
static int mp_property_eof_reached(void *ctx, struct m_property *prop,