[vlc-devel] [PATCH] medialib: Widen stored playback position for long videos
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Thu Dec 19 17:49:48 CET 2019
On Sun, Dec 15, 2019, at 7:21 PM, Mikhail Gusarov wrote:
> 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 )
LGTM, thanks!
--
Hugo Beauzée-Luyssen
hugo at beauzee.fr
More information about the vlc-devel
mailing list