summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-07-31 04:19:41 +0200
committerwm4 <wm4@nowhere>2014-07-31 04:19:41 +0200
commitb4f24544bbfdd2bec765db08f5d745fadeb4d111 (patch)
treeba6aa91bdd52a0e8309af331c75a896fee23c7d1 /player
parentaaa90e1a337dac7f1ef0e8e289d50950a67c90a1 (diff)
downloadmpv-b4f24544bbfdd2bec765db08f5d745fadeb4d111.tar.bz2
mpv-b4f24544bbfdd2bec765db08f5d745fadeb4d111.tar.xz
client API: make "cache" property and similar observable
Achieve this by polling. Will be used by the OSC. Basically a bad hack - but the point is that the mpv core itself is in the best position to improve this later.
Diffstat (limited to 'player')
-rw-r--r--player/command.c1
-rw-r--r--player/command.h3
-rw-r--r--player/core.h1
-rw-r--r--player/playloop.c12
4 files changed, 17 insertions, 0 deletions
diff --git a/player/command.c b/player/command.c
index eedbc0bbc7..27fcadcb29 100644
--- a/player/command.c
+++ b/player/command.c
@@ -2792,6 +2792,7 @@ static const char *const *const mp_event_property_change[] = {
"samplerate", "channels", "audio"),
E(MPV_EVENT_METADATA_UPDATE, "metadata"),
E(MPV_EVENT_CHAPTER_CHANGE, "chapter", "chapter-metadata"),
+ E(MP_EVENT_CACHE_UPDATE, "cache", "cache-free", "cache-used"),
};
#undef E
diff --git a/player/command.h b/player/command.h
index 846067b3bf..c9a07ff733 100644
--- a/player/command.h
+++ b/player/command.h
@@ -39,4 +39,7 @@ int mp_find_property_index(const char *property);
void mp_notify(struct MPContext *mpctx, int event, void *arg);
void mp_notify_property(struct MPContext *mpctx, const char *property);
+#define INTERNAL_EVENT_BASE 24
+#define MP_EVENT_CACHE_UPDATE (INTERNAL_EVENT_BASE + 0)
+
#endif /* MPLAYER_COMMAND_H */
diff --git a/player/core.h b/player/core.h
index 6b3cf55f8b..dd5d975038 100644
--- a/player/core.h
+++ b/player/core.h
@@ -306,6 +306,7 @@ typedef struct MPContext {
double next_heartbeat;
double last_idle_tick;
+ double next_cache_update;
double sleeptime; // number of seconds to sleep before next iteration
diff --git a/player/playloop.c b/player/playloop.c
index 90d46cc178..b1d3efeecf 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -541,6 +541,18 @@ static void handle_pause_on_low_cache(struct MPContext *mpctx)
opts->pause = prev_paused_user;
}
}
+ // Also update cache properties.
+ if (cache_kb > 0 || mpctx->next_cache_update > 0) {
+ double now = mp_time_sec();
+ if (mpctx->next_cache_update <= now) {
+ mpctx->next_cache_update = cache_kb > 0 ? now + 0.25 : 0;
+ mp_notify(mpctx, MP_EVENT_CACHE_UPDATE, NULL);
+ }
+ if (mpctx->next_cache_update > 0) {
+ mpctx->sleeptime =
+ MPMIN(mpctx->sleeptime, mpctx->next_cache_update - now);
+ }
+ }
}
static void handle_heartbeat_cmd(struct MPContext *mpctx)