vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Wed Dec 9 16:59:54 2020 +0100| [3f2ff6df81cb7c7d70464e9ff98bd7ea3f3212fb] | committer: Francois Cartegnie
player: refactor UpdateTimerState > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3f2ff6df81cb7c7d70464e9ff98bd7ea3f3212fb --- src/player/timer.c | 59 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/src/player/timer.c b/src/player/timer.c index 1be28b22f0..b2b9faa31a 100644 --- a/src/player/timer.c +++ b/src/player/timer.c @@ -178,43 +178,46 @@ vlc_player_UpdateTimerState(vlc_player_t *player, vlc_es_id_t *es_source, { vlc_mutex_lock(&player->timer.lock); - if (state == VLC_PLAYER_TIMER_STATE_DISCONTINUITY) - { - assert(system_date == VLC_TICK_INVALID); + /* Discontinuity is signalled by all output clocks and the input. + * discard the event if it was already signalled or not on the good + * es_source. */ + bool notify = false; + struct vlc_player_timer_source *bestsource = &player->timer.best_source; - /* Discontinuity is signalled by all output clocks and the input. - * discard the event if it was already signalled or not on the good - * es_source. */ - bool signal_discontinuity = false; - for (size_t i = 0; i < VLC_PLAYER_TIMER_TYPE_COUNT; ++i) - { - struct vlc_player_timer_source *source = &player->timer.sources[i]; - if (source->es == es_source - && source->point.system_date != VLC_TICK_INVALID) + switch(state) + { + case VLC_PLAYER_TIMER_STATE_DISCONTINUITY: + assert(system_date == VLC_TICK_INVALID); + for (size_t i = 0; i < VLC_PLAYER_TIMER_TYPE_COUNT; ++i) { - source->point.system_date = VLC_TICK_INVALID; + struct vlc_player_timer_source *source = &player->timer.sources[i]; + if (source->es != es_source) + continue; /* signal discontinuity only on best source */ - if (i == VLC_PLAYER_TIMER_TYPE_BEST) - signal_discontinuity = true; + if (source->point.system_date != VLC_TICK_INVALID) + notify = bestsource->es == es_source; + source->point.system_date = VLC_TICK_INVALID; } - } - if (!signal_discontinuity) - { - vlc_mutex_unlock(&player->timer.lock); - return; - } - } - else - { - assert(state == VLC_PLAYER_TIMER_STATE_PAUSED); - assert(system_date != VLC_TICK_INVALID); + break; + + case VLC_PLAYER_TIMER_STATE_PAUSED: + default: + assert(state == VLC_PLAYER_TIMER_STATE_PAUSED); + notify = true; + assert(system_date != VLC_TICK_INVALID); + break; } player->timer.state = state; - struct vlc_player_timer_source *source = &player->timer.best_source; + if (!notify) + { + vlc_mutex_unlock(&player->timer.lock); + return; + } + vlc_player_timer_id *timer; - vlc_list_foreach(timer, &source->listeners, node) + vlc_list_foreach(timer, &bestsource->listeners, node) { timer->last_update_date = VLC_TICK_INVALID; timer->cbs->on_discontinuity(system_date, timer->data); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits