From 9f79c05e431806c5023f6d1537c90b4decf413a1 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 9 Mar 2009 19:15:14 +0100 Subject: player_thread: moved code to player_song_border() Moved some more cruft out of do_play(). --- src/player_thread.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/player_thread.c b/src/player_thread.c index 9b9787261..2a3580da6 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -459,6 +459,24 @@ play_next_chunk(struct player *player) return true; } +/** + * This is called at the border between two songs: the audio output + * has consumed all chunks of the current song, and we should start + * sending chunks from the next one. + * + * @return true on success, false on error (playback will be stopped) + */ +static bool +player_song_border(struct player *player) +{ + player->xfade = XFADE_UNKNOWN; + + music_pipe_free(player->pipe); + player->pipe = dc.pipe; + + return player_wait_for_decoder(player); +} + static void do_play(void) { struct player player = { @@ -572,12 +590,7 @@ static void do_play(void) } else if (dc.pipe != NULL && dc.pipe != player.pipe) { /* at the beginning of a new song */ - player.xfade = XFADE_UNKNOWN; - - music_pipe_free(player.pipe); - player.pipe = dc.pipe; - - if (!player_wait_for_decoder(&player)) + if (!player_song_border(&player)) break; } else if (decoder_is_idle()) { break; -- cgit v1.2.3