From 3b71e2abefd50dbb6548712f13aea28701e72317 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 5 Nov 2015 00:41:54 +0100 Subject: player/Thread: call DecoderCommand::SEEK only on existing decoder If the decoder was just started, it already seeks to the desired position. --- src/player/Thread.cxx | 39 ++++++++++++++++++++++----------------- 1 file 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(); -- cgit v1.2.3