[vlc-commits] [Git][videolan/vlc][master] clock: fix resume from pause + reset

Thomas Guillem (@tguillem) gitlab at videolan.org
Fri Nov 28 08:52:58 UTC 2025



Thomas Guillem pushed to branch master at VideoLAN / VLC


Commits:
4174da77 by Thomas Guillem at 2025-11-28T08:24:45+00:00
clock: fix resume from pause + reset

Reset the pause_date on reset/flush, so save the paused state in a new
variable.

Fixes #29468

- - - - -


1 changed file:

- src/clock/clock.c


Changes:

=====================================
src/clock/clock.c
=====================================
@@ -85,6 +85,7 @@ struct vlc_clock_main_t
     vlc_tick_t delay;
     struct vlc_clock_context *context;
 
+    bool paused;
     vlc_tick_t pause_date;
 
     unsigned wait_sync_ref_priority;
@@ -393,6 +394,7 @@ static void vlc_clock_main_reset(vlc_clock_main_t *main_clock)
     AvgResetAndFill(&main_clock->coeff_avg, ctx->coeff);
 
     main_clock->wait_sync_ref_priority = UINT_MAX;
+    main_clock->pause_date = VLC_TICK_INVALID;
     vlc_cond_broadcast(&main_clock->cond);
 }
 
@@ -604,7 +606,7 @@ vlc_clock_input_start(vlc_clock_t *clock,
     struct vlc_clock_context *context
         = main_clock->context;
 
-    struct vlc_clock_context *last_context = 
+    struct vlc_clock_context *last_context =
         vlc_list_last_entry_or_null(&main_clock->prev_contexts, struct vlc_clock_context, node);
 
     if (last_context != NULL)
@@ -925,7 +927,7 @@ bool vlc_clock_IsPaused(const vlc_clock_t *clock)
     AssertLocked(clock);
 
     vlc_clock_main_t *main_clock = clock->owner;
-    return main_clock->pause_date != VLC_TICK_INVALID;
+    return main_clock->paused;
 }
 
 int vlc_clock_Wait(vlc_clock_t *clock, vlc_tick_t deadline)
@@ -975,6 +977,7 @@ vlc_clock_main_t *vlc_clock_main_New(struct vlc_logger *parent_logger, struct vl
     ctx->start_time =
         clock_point_Create(VLC_TICK_INVALID, VLC_TICK_INVALID);
 
+    main_clock->paused = false;
     main_clock->pause_date = VLC_TICK_INVALID;
     main_clock->input_dejitter = DEFAULT_PTS_DELAY;
     main_clock->output_dejitter = AOUT_MAX_PTS_ADVANCE * 2;
@@ -1049,7 +1052,8 @@ void vlc_clock_main_ChangePause(vlc_clock_main_t *main_clock, vlc_tick_t now,
 {
     vlc_mutex_assert(&main_clock->lock);
 
-    assert(paused == (main_clock->pause_date == VLC_TICK_INVALID));
+    assert(paused != main_clock->paused);
+    main_clock->paused = paused;
 
     if (paused)
     {
@@ -1057,6 +1061,10 @@ void vlc_clock_main_ChangePause(vlc_clock_main_t *main_clock, vlc_tick_t now,
         return;
     }
 
+    /* Reset was called before resume from Pause */
+    if (main_clock->pause_date == VLC_TICK_INVALID)
+        return;
+
     struct vlc_clock_context *ctx = main_clock->context;
     /**
      * Only apply a delay if the clock has a reference point to avoid
@@ -1267,7 +1275,7 @@ vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock)
     struct vlc_clock_context *ctx = main_clock->context;
 
     /* The master has always the 0 priority */
-    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, "input", true, 
+    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, "input", true,
                                                0, NULL, NULL);
     if (!clock)
         return NULL;



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/4174da77cfa04d3c653e9e533ae1a0aefa4d57d6

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/4174da77cfa04d3c653e9e533ae1a0aefa4d57d6
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list