Commit 78ec7d0f authored by Max Kellermann's avatar Max Kellermann

decoder/Thread: throw StopDecoder on DecoderCommand::STOP

parent a1e9678b
...@@ -49,14 +49,11 @@ static constexpr Domain decoder_thread_domain("decoder_thread"); ...@@ -49,14 +49,11 @@ static constexpr Domain decoder_thread_domain("decoder_thread");
/** /**
* Opens the input stream with InputStream::Open(), and waits until * Opens the input stream with InputStream::Open(), and waits until
* the stream gets ready. If a decoder STOP command is received * the stream gets ready.
* during that, it cancels the operation (but does not close the
* stream).
* *
* Unlock the decoder before calling this function. * Unlock the decoder before calling this function.
* *
* @return an InputStream on success or if #DecoderCommand::STOP is * @return an InputStream on success, nullptr on error
* received, nullptr on error
*/ */
static InputStreamPtr static InputStreamPtr
decoder_input_stream_open(DecoderControl &dc, const char *uri, Error &error) decoder_input_stream_open(DecoderControl &dc, const char *uri, Error &error)
...@@ -73,7 +70,7 @@ decoder_input_stream_open(DecoderControl &dc, const char *uri, Error &error) ...@@ -73,7 +70,7 @@ decoder_input_stream_open(DecoderControl &dc, const char *uri, Error &error)
is->Update(); is->Update();
while (!is->IsReady()) { while (!is->IsReady()) {
if (dc.command == DecoderCommand::STOP) if (dc.command == DecoderCommand::STOP)
return nullptr; throw StopDecoder();
dc.Wait(); dc.Wait();
...@@ -117,7 +114,7 @@ decoder_stream_decode(const DecoderPlugin &plugin, ...@@ -117,7 +114,7 @@ decoder_stream_decode(const DecoderPlugin &plugin,
FormatDebug(decoder_thread_domain, "probing plugin %s", plugin.name); FormatDebug(decoder_thread_domain, "probing plugin %s", plugin.name);
if (decoder.dc.command == DecoderCommand::STOP) if (decoder.dc.command == DecoderCommand::STOP)
return true; throw StopDecoder();
/* rewind the stream, so each plugin gets a fresh start */ /* rewind the stream, so each plugin gets a fresh start */
input_stream.Rewind(IgnoreError()); input_stream.Rewind(IgnoreError());
...@@ -157,7 +154,7 @@ decoder_file_decode(const DecoderPlugin &plugin, ...@@ -157,7 +154,7 @@ decoder_file_decode(const DecoderPlugin &plugin,
FormatDebug(decoder_thread_domain, "probing plugin %s", plugin.name); FormatDebug(decoder_thread_domain, "probing plugin %s", plugin.name);
if (decoder.dc.command == DecoderCommand::STOP) if (decoder.dc.command == DecoderCommand::STOP)
return true; throw StopDecoder();
{ {
const ScopeUnlock unlock(decoder.dc.mutex); const ScopeUnlock unlock(decoder.dc.mutex);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment