diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/player/Thread.cxx | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx index 7a9715f1b..9a5732ada 100644 --- a/src/player/Thread.cxx +++ b/src/player/Thread.cxx @@ -575,6 +575,9 @@ Player::SeekDecoder() /* re-start the decoder */ StartDecoder(*pipe); ActivateDecoder(); + + if (!WaitDecoderStartup()) + return false; } else { if (!IsDecoderAtCurrentSong()) { /* the decoder is already decoding the "next" song, @@ -585,29 +588,31 @@ Player::SeekDecoder() delete pc.next_song; pc.next_song = nullptr; queued = false; - } - /* wait for the decoder to complete initialization */ + /* wait for the decoder to complete initialization + (just in case that happens to be still in + progress) */ - if (!WaitDecoderStartup()) - return false; + if (!WaitDecoderStartup()) + return false; - /* send the SEEK command */ + /* send the SEEK command */ - SongTime where = pc.seek_time; - if (!pc.total_time.IsNegative()) { - const SongTime total_time(pc.total_time); - if (where > total_time) - where = total_time; - } + SongTime where = pc.seek_time; + if (!pc.total_time.IsNegative()) { + const SongTime total_time(pc.total_time); + if (where > total_time) + where = total_time; + } - if (!dc.Seek(where + start_time)) { - /* decoder failure */ - pc.LockCommandFinished(); - return false; - } + if (!dc.Seek(where + start_time)) { + /* decoder failure */ + pc.LockCommandFinished(); + return false; + } - elapsed_time = where; + elapsed_time = where; + } pc.LockCommandFinished(); |