diff options
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/DecoderControl.cxx | 17 | ||||
-rw-r--r-- | src/decoder/DecoderControl.hxx | 2 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/decoder/DecoderControl.cxx b/src/decoder/DecoderControl.cxx index c41165d1e..fc3ab7ad8 100644 --- a/src/decoder/DecoderControl.cxx +++ b/src/decoder/DecoderControl.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "DecoderControl.hxx" +#include "DecoderError.hxx" #include "MusicPipe.hxx" #include "DetachedSong.hxx" @@ -105,7 +106,7 @@ DecoderControl::Stop() } bool -DecoderControl::Seek(SongTime t) +DecoderControl::Seek(SongTime t, Error &error_r) { assert(state != DecoderState::START); assert(state != DecoderState::ERROR); @@ -116,20 +117,30 @@ DecoderControl::Seek(SongTime t) gcc_unreachable(); case DecoderState::STOP: + /* TODO: if this happens, the caller should be given a + chance to restart the decoder */ + error_r.Set(decoder_domain, "Decoder is dead"); return false; case DecoderState::DECODE: break; } - if (!seekable) + if (!seekable) { + error_r.Set(decoder_domain, "Not seekable"); return false; + } seek_time = t; seek_error = false; LockSynchronousCommand(DecoderCommand::SEEK); - return !seek_error; + if (seek_error) { + error_r.Set(decoder_domain, "Decoder failed to seek"); + return false; + } + + return true; } void diff --git a/src/decoder/DecoderControl.hxx b/src/decoder/DecoderControl.hxx index a8e675bba..4147f5acc 100644 --- a/src/decoder/DecoderControl.hxx +++ b/src/decoder/DecoderControl.hxx @@ -365,7 +365,7 @@ public: void Stop(); - bool Seek(SongTime t); + bool Seek(SongTime t, Error &error_r); void Quit(); |