[vlc-devel] [PATCH] medialib: Widen stored playback position for long videos

Mikhail Gusarov dottedmag at dottedmag.net
Sun Dec 15 19:21:52 CET 2019


Existing logic of storing playback position excludes positions within last 5%.

This heuristic is fine for short videos, but for a longer, say 6-hour hones, it
means that the position is not stored for the last 18 minutes, which is a
nuisance.

This change adds an upper limit for the size of excluded positions and makes it
symmetric, so that a video that was stopped just after the start will be
restarted from the beginning.

This is a continuation of a macOS-specific patch that landed as
e3e32ab0119edfd762718ecd9a084aeaef873e2f in branch 3.0

Signed-off-by: Mikhail Gusarov <dottedmag at dottedmag.net>
---
 src/player/medialib.c | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/src/player/medialib.c b/src/player/medialib.c
index c079870ab1..35cce91f2c 100644
--- a/src/player/medialib.c
+++ b/src/player/medialib.c
@@ -109,6 +109,26 @@ vlc_player_input_RestoreMlStates(struct vlc_player_input* input,
     vlc_ml_release(media);
 }
 
+static const float beginning_of_media_percent = .5f;
+static const int64_t beginning_of_media_sec = 60;
+
+static int
+beginning_of_media(struct vlc_player_input *input)
+{
+    return input->position <= beginning_of_media_percent &&
+        input->time < VLC_TICK_FROM_SEC(beginning_of_media_sec);
+}
+
+static const float end_of_media_percent = .95f;
+static const int64_t end_of_media_sec = 60;
+
+static int
+end_of_media(struct vlc_player_input *input)
+{
+    return input->position >= end_of_media_percent &&
+        input->length - input->time < VLC_TICK_FROM_SEC(end_of_media_sec);
+}
+
 void
 vlc_player_UpdateMLStates(vlc_player_t *player, struct vlc_player_input* input)
 {
@@ -134,12 +154,13 @@ vlc_player_UpdateMLStates(vlc_player_t *player, struct vlc_player_input* input)
             return;
     }
 
-    /* If we reached 95% of the media or have less than 10s remaining, bump the
-     * play count & the media in the history */
-    if (input->position >= .95f ||
-        input->length - input->time < VLC_TICK_FROM_SEC(10))
-    {
+    /* If we reached end of the media, bump the play count & the media in the
+     * history */
+    if (end_of_media(input))
         vlc_ml_media_increase_playcount(ml, media->i_id);
+
+    if (beginning_of_media(input) || end_of_media(input))
+    {
         /* Ensure we remove any previously saved position to allow the playback
          * of this media to restart from the begining */
         if (input->ml.states.progress >= .0f )
-- 
2.24.0



More information about the vlc-devel mailing list