diff options
| -rw-r--r-- | nncmpp.c | 8 | 
1 files changed, 7 insertions, 1 deletions
| @@ -609,7 +609,7 @@ static struct app_context  	struct str_map playback_info;       ///< Current song info  	struct poller_timer elapsed_event;  ///< Seconds elapsed event -	int64_t elapsed_since;              ///< Time of the next tick +	int64_t elapsed_since;              ///< Time of the last tick  	// TODO: initialize these to -1  	int song;                           ///< Current song index @@ -3410,7 +3410,9 @@ mpd_update_playback_state (void)  	poller_timer_reset (&g.elapsed_event);  	if (g.state == PLAYER_PLAYING)  	{ +		// Set a timer for when the next round second of playback happens  		poller_timer_set (&g.elapsed_event, 1000 - msec_past_second); +		// Remember when the last round second was, relative to monotonic time  		g.elapsed_since = clock_msec (CLOCK_BEST) - msec_past_second;  	} @@ -3540,12 +3542,16 @@ static void  mpd_on_tick (void *user_data)  {  	(void) user_data; + +	// Compute how much time has elapsed since the last round second  	int64_t diff_msec = clock_msec (CLOCK_BEST) - g.elapsed_since;  	int elapsed_sec = diff_msec / 1000;  	int elapsed_msec = diff_msec % 1000;  	g.song_elapsed += elapsed_sec;  	g.elapsed_since += elapsed_sec * 1000; + +	// Try to get called on the next round second of playback  	poller_timer_set (&g.elapsed_event, 1000 - elapsed_msec);  	app_invalidate (); | 
