decoder/API: add class StopDecoder

This commit is contained in:
Max Kellermann 2016-05-13 13:12:21 +02:00
parent 662e477028
commit 0709878b4c
3 changed files with 10 additions and 1 deletions

View File

@ -46,6 +46,13 @@
class Error;
/**
* Throw an instance of this class to stop decoding the current song
* (successfully). It can be used to jump out of all of a decoder's
* stack frames.
*/
class StopDecoder {};
/**
* Notify the player thread that it has finished initialization and
* that it has read the song's meta data.

View File

@ -356,6 +356,8 @@ try {
return !path_fs.IsNull()
? decoder_run_file(decoder, real_uri, path_fs)
: decoder_run_stream(decoder, real_uri);
} catch (StopDecoder) {
return true;
} catch (const std::runtime_error &e) {
/* copy the exception to decoder.error */

View File

@ -310,7 +310,7 @@ MPDOpusDecoder::HandleEOS()
return decoder_get_command(decoder);
}
return DecoderCommand::STOP;
throw StopDecoder();
}
inline DecoderCommand