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 "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.
@ -89,6 +89,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

View File

@ -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(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;
Cond &cond = dc.cond;

View File

@ -54,16 +54,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.
*

View File

@ -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,

View File

@ -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;
}

View File

@ -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

View File

@ -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,