From 29af78721760e426b920904d44566de482e30709 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 24 Dec 2017 01:56:09 +0100 Subject: player: update duration based on highest timestamp demuxed This will help with things like livestreams. As a minor detail, subtitles are excluded, because they sometimes have "unused" events after video and audio ends. To avoid this annoying corner case, just ignore them. --- player/command.c | 1 + player/command.h | 1 + player/loadfile.c | 2 ++ 3 files changed, 4 insertions(+) (limited to 'player') diff --git a/player/command.c b/player/command.c index 974c61769e..6288106bee 100644 --- a/player/command.c +++ b/player/command.c @@ -4117,6 +4117,7 @@ static const char *const *const mp_event_property_change[] = { "estimated-display-fps", "vsync-jitter", "sub-text", "audio-bitrate", "video-bitrate", "sub-bitrate", "decoder-frame-drop-count", "frame-drop-count", "video-frame-info"), + E(MP_EVENT_DURATION_UPDATE, "duration"), E(MPV_EVENT_VIDEO_RECONFIG, "video-out-params", "video-params", "video-format", "video-codec", "video-bitrate", "dwidth", "dheight", "width", "height", "fps", "aspect", "vo-configured", "current-vo", diff --git a/player/command.h b/player/command.h index 0ab746b1d2..478bc8c737 100644 --- a/player/command.h +++ b/player/command.h @@ -57,6 +57,7 @@ enum { MP_EVENT_WIN_STATE, MP_EVENT_CHANGE_PLAYLIST, MP_EVENT_CORE_IDLE, + MP_EVENT_DURATION_UPDATE, }; bool mp_hook_test_completion(struct MPContext *mpctx, char *type); diff --git a/player/loadfile.c b/player/loadfile.c index 8139c06f3f..d2e26c1ba4 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -212,6 +212,8 @@ void update_demuxer_properties(struct MPContext *mpctx) mpctx->filtered_tags = info; mp_notify(mpctx, MPV_EVENT_METADATA_UPDATE, NULL); } + if (events & DEMUX_EVENT_DURATION) + mp_notify(mpctx, MP_EVENT_DURATION_UPDATE, NULL); demuxer->events = 0; } -- cgit v1.2.3