Commit 723e54f7 authored by Max Kellermann's avatar Max Kellermann

decoder/Client: add OpenUri(), replacing decoder_open_uri()

parent 1a8c96a3
......@@ -23,6 +23,7 @@
#include "check.h"
#include "DecoderCommand.hxx"
#include "Chrono.hxx"
#include "input/Ptr.hxx"
#include "Compiler.h"
#include <stdint.h>
......@@ -31,7 +32,6 @@ struct AudioFormat;
struct Tag;
struct ReplayGainInfo;
class MixRampInfo;
class InputStream;
/**
* An interface between the decoder plugin and the MPD core.
......@@ -90,6 +90,15 @@ public:
virtual void SeekError() = 0;
/**
* Open a new #InputStream and wait until it's ready.
*
* Throws #StopDecoder if DecoderCommand::STOP was received.
*
* Throws std::runtime_error on error.
*/
virtual InputStreamPtr OpenUri(const char *uri) = 0;
/**
* Sets the time stamp for the next data chunk [seconds]. The MPD
* core automatically counts it up, and a decoder plugin only needs to
* use this function if it thinks that adding to the time stamp based
......
......@@ -251,14 +251,11 @@ Decoder::SeekError()
}
InputStreamPtr
decoder_open_uri(DecoderClient &client, const char *uri)
Decoder::OpenUri(const char *uri)
{
auto &decoder = (Decoder &)client;
assert(decoder.dc.state == DecoderState::START ||
decoder.dc.state == DecoderState::DECODE);
assert(dc.state == DecoderState::START ||
dc.state == DecoderState::DECODE);
DecoderControl &dc = decoder.dc;
Mutex &mutex = dc.mutex;
Cond &cond = dc.cond;
......
......@@ -55,16 +55,6 @@ class DecoderClient;
class StopDecoder {};
/**
* Open a new #InputStream and wait until it's ready.
*
* Throws #StopDecoder if DecoderCommand::STOP was received.
*
* Throws std::runtime_error on error.
*/
InputStreamPtr
decoder_open_uri(DecoderClient &decoder, const char *uri);
/**
* Blocking read from the input stream.
*
* @param decoder the decoder object
......
......@@ -124,6 +124,7 @@ struct Decoder final : DecoderClient {
SongTime GetSeekTime() override;
uint64_t GetSeekFrame() override;
void SeekError() override;
InputStreamPtr OpenUri(const char *uri) override;
void SubmitTimestamp(double t) override;
DecoderCommand SubmitData(InputStream *is,
const void *data, size_t length,
......
......@@ -496,7 +496,7 @@ wavpack_open_wvc(DecoderClient &client, const char *uri)
};
try {
return decoder_open_uri(client, uri);
return client.OpenUri(uri);
} catch (const std::runtime_error &) {
return nullptr;
}
......
......@@ -74,10 +74,9 @@ FakeDecoder::SeekError()
}
InputStreamPtr
decoder_open_uri(DecoderClient &client, const char *uri)
FakeDecoder::OpenUri(const char *uri)
{
auto &decoder = (FakeDecoder &)client;
return InputStream::OpenReady(uri, decoder.mutex, decoder.cond);
return InputStream::OpenReady(uri, mutex, cond);
}
size_t
......
......@@ -39,6 +39,7 @@ struct FakeDecoder final : DecoderClient {
SongTime GetSeekTime() override;
uint64_t GetSeekFrame() override;
void SeekError() override;
InputStreamPtr OpenUri(const char *uri) override;
void SubmitTimestamp(double t) override;
DecoderCommand SubmitData(InputStream *is,
const void *data, size_t length,
......
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