diff options
Diffstat (limited to 'src/decoder/DecoderControl.cxx')
-rw-r--r-- | src/decoder/DecoderControl.cxx | 17 |
1 files changed, 14 insertions, 3 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 |