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

This commit is contained in:
Max Kellermann 2016-11-18 12:34:04 +01:00
parent 1a8c96a3f0
commit 723e54f74e
7 changed files with 18 additions and 21 deletions

View File

@ -23,6 +23,7 @@
#include "check.h" #include "check.h"
#include "DecoderCommand.hxx" #include "DecoderCommand.hxx"
#include "Chrono.hxx" #include "Chrono.hxx"
#include "input/Ptr.hxx"
#include "Compiler.h" #include "Compiler.h"
#include <stdint.h> #include <stdint.h>
@ -31,7 +32,6 @@ struct AudioFormat;
struct Tag; struct Tag;
struct ReplayGainInfo; struct ReplayGainInfo;
class MixRampInfo; class MixRampInfo;
class InputStream;
/** /**
* An interface between the decoder plugin and the MPD core. * An interface between the decoder plugin and the MPD core.
@ -89,6 +89,15 @@ public:
*/ */
virtual void SeekError() = 0; 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 * Sets the time stamp for the next data chunk [seconds]. The MPD
* core automatically counts it up, and a decoder plugin only needs to * core automatically counts it up, and a decoder plugin only needs to

View File

@ -251,14 +251,11 @@ Decoder::SeekError()
} }
InputStreamPtr InputStreamPtr
decoder_open_uri(DecoderClient &client, const char *uri) Decoder::OpenUri(const char *uri)
{ {
auto &decoder = (Decoder &)client; assert(dc.state == DecoderState::START ||
dc.state == DecoderState::DECODE);
assert(decoder.dc.state == DecoderState::START ||
decoder.dc.state == DecoderState::DECODE);
DecoderControl &dc = decoder.dc;
Mutex &mutex = dc.mutex; Mutex &mutex = dc.mutex;
Cond &cond = dc.cond; Cond &cond = dc.cond;

View File

@ -54,16 +54,6 @@ class DecoderClient;
*/ */
class StopDecoder {}; 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. * Blocking read from the input stream.
* *

View File

@ -124,6 +124,7 @@ struct Decoder final : DecoderClient {
SongTime GetSeekTime() override; SongTime GetSeekTime() override;
uint64_t GetSeekFrame() override; uint64_t GetSeekFrame() override;
void SeekError() override; void SeekError() override;
InputStreamPtr OpenUri(const char *uri) override;
void SubmitTimestamp(double t) override; void SubmitTimestamp(double t) override;
DecoderCommand SubmitData(InputStream *is, DecoderCommand SubmitData(InputStream *is,
const void *data, size_t length, const void *data, size_t length,

View File

@ -496,7 +496,7 @@ wavpack_open_wvc(DecoderClient &client, const char *uri)
}; };
try { try {
return decoder_open_uri(client, uri); return client.OpenUri(uri);
} catch (const std::runtime_error &) { } catch (const std::runtime_error &) {
return nullptr; return nullptr;
} }

View File

@ -74,10 +74,9 @@ FakeDecoder::SeekError()
} }
InputStreamPtr InputStreamPtr
decoder_open_uri(DecoderClient &client, const char *uri) FakeDecoder::OpenUri(const char *uri)
{ {
auto &decoder = (FakeDecoder &)client; return InputStream::OpenReady(uri, mutex, cond);
return InputStream::OpenReady(uri, decoder.mutex, decoder.cond);
} }
size_t size_t

View File

@ -39,6 +39,7 @@ struct FakeDecoder final : DecoderClient {
SongTime GetSeekTime() override; SongTime GetSeekTime() override;
uint64_t GetSeekFrame() override; uint64_t GetSeekFrame() override;
void SeekError() override; void SeekError() override;
InputStreamPtr OpenUri(const char *uri) override;
void SubmitTimestamp(double t) override; void SubmitTimestamp(double t) override;
DecoderCommand SubmitData(InputStream *is, DecoderCommand SubmitData(InputStream *is,
const void *data, size_t length, const void *data, size_t length,