diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/player_thread.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/player_thread.c b/src/player_thread.c index 10b9a8769..b55fba338 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -35,10 +35,9 @@ enum xfade_state { struct player { /** - * number of chunks which have to be decoded before playing - * starts + * are we waiting for buffered_before_play? */ - unsigned int buffered_before_play; + bool buffering; /** * true if the decoder is starting and did not provide data @@ -178,7 +177,10 @@ static void processDecodeInput(struct player *player) dropBufferedAudio(); if (decodeSeek(player) == 0) { player->xfade = XFADE_UNKNOWN; - player->buffered_before_play = 0; + + /* abort buffering when the user has requested + a seek */ + player->buffering = false; } break; @@ -225,14 +227,13 @@ static int playChunk(ob_chunk * chunk, static void do_play(void) { struct player player = { - .buffered_before_play = pc.buffered_before_play, + .buffering = true, .decoder_starting = false, .paused = false, .queued = false, .xfade = XFADE_UNKNOWN, .next_song_chunk = -1, }; - int buffering = 1; unsigned int crossFadeChunks = 0; /** the position of the next cross-faded chunk in the next song */ @@ -262,14 +263,14 @@ static void do_play(void) break; } - if (buffering) { - if (ob_available() < player.buffered_before_play) { + if (player.buffering) { + if (ob_available() < pc.buffered_before_play) { /* not enough decoded buffer space yet */ notify_wait(&pc.notify); continue; } else { /* buffering is complete */ - buffering = 0; + player.buffering = false; ob_set_lazy(true); } } |