1
0
mirror of https://github.com/mpv-player/mpv synced 2025-01-30 03:32:50 +00:00

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.
This commit is contained in:
wm4 2014-07-31 04:19:41 +02:00
parent aaa90e1a33
commit b4f24544bb
5 changed files with 18 additions and 0 deletions

View File

@ -983,6 +983,7 @@ typedef enum mpv_event_id {
* Happens when the current chapter changes.
*/
MPV_EVENT_CHAPTER_CHANGE = 23
// Internal note: adjust INTERNAL_EVENT_BASE when adding new events.
} mpv_event_id;
/**

View File

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

View File

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

View File

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

View File

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