DecoderAPI: stop decoder on MPD error
This commit adds the basic infrastructure for reporting bugs from DecoderAPI.cxx via DecoderThread.cxx to DecoderControl.
This commit is contained in:
parent
f1ca61d7d7
commit
4ee147ea34
@ -134,6 +134,10 @@ gcc_pure
|
||||
static DecoderCommand
|
||||
decoder_get_virtual_command(Decoder &decoder)
|
||||
{
|
||||
if (decoder.error.IsDefined())
|
||||
/* an error has occurred: stop the decoder plugin */
|
||||
return DecoderCommand::STOP;
|
||||
|
||||
const DecoderControl &dc = decoder.dc;
|
||||
assert(dc.pipe != nullptr);
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "DecoderCommand.hxx"
|
||||
#include "ReplayGainInfo.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
class PcmConvert;
|
||||
struct DecoderControl;
|
||||
@ -87,6 +88,12 @@ struct Decoder {
|
||||
*/
|
||||
unsigned replay_gain_serial;
|
||||
|
||||
/**
|
||||
* An error has occurred (in DecoderAPI.cxx), and the plugin
|
||||
* will be asked to stop.
|
||||
*/
|
||||
Error error;
|
||||
|
||||
Decoder(DecoderControl &_dc, bool _initial_seek_pending, Tag *_tag)
|
||||
:dc(_dc),
|
||||
convert(nullptr),
|
||||
|
@ -360,7 +360,12 @@ decoder_run_song(DecoderControl &dc,
|
||||
|
||||
dc.Lock();
|
||||
|
||||
if (ret)
|
||||
if (decoder.error.IsDefined()) {
|
||||
/* copy the Error from sruct Decoder to
|
||||
DecoderControl */
|
||||
dc.state = DecoderState::ERROR;
|
||||
dc.error = std::move(decoder.error);
|
||||
} else if (ret)
|
||||
dc.state = DecoderState::STOP;
|
||||
else {
|
||||
dc.state = DecoderState::ERROR;
|
||||
|
Loading…
Reference in New Issue
Block a user