aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2010-01-02 21:16:51 +0100
committerMax Kellermann <max@duempel.org>2010-01-02 21:16:51 +0100
commit915182bcb855f114703ddbf8849047c1a9ca43c1 (patch)
tree99d56534e65b5184a9f5f103e9bc42140f2bab05 /src
parentd3b763a48c09a60a0c0b5ccb6cccd9376875c470 (diff)
output_all: reset elapsed_time at song border
Another quirk fixed: after the last chunk of a song has been played, the "elapsed_time" variable is set to the chunk's time stamp. When the client receives the PLAYER idle event and asks MPD for the current time stamp, MPD will return the last time stamp of the previous song when it hasn't played the first chunk of the current song yet.
Diffstat (limited to 'src')
-rw-r--r--src/output_all.c8
-rw-r--r--src/output_all.h6
-rw-r--r--src/player_thread.c2
3 files changed, 16 insertions, 0 deletions
diff --git a/src/output_all.c b/src/output_all.c
index aee496e8..4b770114 100644
--- a/src/output_all.c
+++ b/src/output_all.c
@@ -558,6 +558,14 @@ audio_output_all_close(void)
audio_output_all_elapsed_time = -1.0;
}
+void
+audio_output_all_song_border(void)
+{
+ /* clear the elapsed_time pointer at the beginning of a new
+ song */
+ audio_output_all_elapsed_time = 0.0;
+}
+
float
audio_output_all_get_elapsed_time(void)
{
diff --git a/src/output_all.h b/src/output_all.h
index 603cb30a..8c3f1e80 100644
--- a/src/output_all.h
+++ b/src/output_all.h
@@ -142,6 +142,12 @@ void
audio_output_all_cancel(void);
/**
+ * Indicate that a new song will begin now.
+ */
+void
+audio_output_all_song_border(void);
+
+/**
* Returns the "elapsed_time" stamp of the most recently finished
* chunk. A negative value is returned when no chunk has been
* finished yet.
diff --git a/src/player_thread.c b/src/player_thread.c
index 37b4ed5b..3e234c4f 100644
--- a/src/player_thread.c
+++ b/src/player_thread.c
@@ -736,6 +736,8 @@ player_song_border(struct player *player)
music_pipe_free(player->pipe);
player->pipe = player->dc->pipe;
+ audio_output_all_song_border();
+
if (!player_wait_for_decoder(player))
return false;