decoder/Client: add OpenUri(), replacing decoder_open_uri()
This commit is contained in:
parent
1a8c96a3f0
commit
723e54f74e
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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.
|
||||||
*
|
*
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user