diff options
author | Max Kellermann <max@duempel.org> | 2015-11-11 17:20:27 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-11-11 19:56:08 +0100 |
commit | faca8bc02a67ed06e60a4d827d5d7bb69027b4f3 (patch) | |
tree | 7ee84be6f74ed503dfa9468487026a121b6891ee /src/decoder/DecoderControl.cxx | |
parent | 5e93c05095eff2385f02fa946fdb2e97353b1843 (diff) | |
download | mpd-faca8bc02a67ed06e60a4d827d5d7bb69027b4f3.tar.gz mpd-faca8bc02a67ed06e60a4d827d5d7bb69027b4f3.tar.xz mpd-faca8bc02a67ed06e60a4d827d5d7bb69027b4f3.zip |
decoder/Control: Seek() returns Error information
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 |