decoder/Client: new interface which wraps struct Decoder
Prepare for a Decoder API redesign based on an abstract class with virtual methods.
This commit is contained in:
@@ -142,25 +142,25 @@ flac_decoder_initialize(FlacDecoder *data, FLAC__StreamDecoder *sd)
|
||||
static void
|
||||
flac_decoder_loop(FlacDecoder *data, FLAC__StreamDecoder *flac_dec)
|
||||
{
|
||||
Decoder &decoder = *data->GetDecoder();
|
||||
DecoderClient &client = *data->GetClient();
|
||||
|
||||
while (true) {
|
||||
DecoderCommand cmd;
|
||||
if (!data->tag.IsEmpty()) {
|
||||
cmd = decoder_tag(decoder, data->GetInputStream(),
|
||||
cmd = decoder_tag(client, data->GetInputStream(),
|
||||
std::move(data->tag));
|
||||
data->tag.Clear();
|
||||
} else
|
||||
cmd = decoder_get_command(decoder);
|
||||
cmd = decoder_get_command(client);
|
||||
|
||||
if (cmd == DecoderCommand::SEEK) {
|
||||
FLAC__uint64 seek_sample =
|
||||
decoder_seek_where_frame(decoder);
|
||||
decoder_seek_where_frame(client);
|
||||
if (FLAC__stream_decoder_seek_absolute(flac_dec, seek_sample)) {
|
||||
data->position = 0;
|
||||
decoder_command_finished(decoder);
|
||||
decoder_command_finished(client);
|
||||
} else
|
||||
decoder_seek_error(decoder);
|
||||
decoder_seek_error(client);
|
||||
} else if (cmd == DecoderCommand::STOP)
|
||||
break;
|
||||
|
||||
@@ -198,7 +198,7 @@ flac_decoder_loop(FlacDecoder *data, FLAC__StreamDecoder *flac_dec)
|
||||
}
|
||||
|
||||
if (!FLAC__stream_decoder_process_single(flac_dec) &&
|
||||
decoder_get_command(decoder) == DecoderCommand::NONE) {
|
||||
decoder_get_command(client) == DecoderCommand::NONE) {
|
||||
/* a failure that was not triggered by a
|
||||
decoder command */
|
||||
flacPrintErroredState(FLAC__stream_decoder_get_state(flac_dec));
|
||||
@@ -264,7 +264,7 @@ FlacInitAndDecode(FlacDecoder &data, FLAC__StreamDecoder *sd, bool is_ogg)
|
||||
}
|
||||
|
||||
static void
|
||||
flac_decode_internal(Decoder &decoder,
|
||||
flac_decode_internal(DecoderClient &client,
|
||||
InputStream &input_stream,
|
||||
bool is_ogg)
|
||||
{
|
||||
@@ -272,15 +272,15 @@ flac_decode_internal(Decoder &decoder,
|
||||
if (!flac_dec)
|
||||
return;
|
||||
|
||||
FlacDecoder data(decoder, input_stream);
|
||||
FlacDecoder data(client, input_stream);
|
||||
|
||||
FlacInitAndDecode(data, flac_dec.get(), is_ogg);
|
||||
}
|
||||
|
||||
static void
|
||||
flac_decode(Decoder &decoder, InputStream &input_stream)
|
||||
flac_decode(DecoderClient &client, InputStream &input_stream)
|
||||
{
|
||||
flac_decode_internal(decoder, input_stream, false);
|
||||
flac_decode_internal(client, input_stream, false);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -322,9 +322,9 @@ oggflac_scan_stream(InputStream &is,
|
||||
}
|
||||
|
||||
static void
|
||||
oggflac_decode(Decoder &decoder, InputStream &input_stream)
|
||||
oggflac_decode(DecoderClient &client, InputStream &input_stream)
|
||||
{
|
||||
if (ogg_codec_detect(&decoder, input_stream) != OGG_CODEC_FLAC)
|
||||
if (ogg_codec_detect(&client, input_stream) != OGG_CODEC_FLAC)
|
||||
return;
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
@@ -334,7 +334,7 @@ oggflac_decode(Decoder &decoder, InputStream &input_stream)
|
||||
} catch (const std::runtime_error &) {
|
||||
}
|
||||
|
||||
flac_decode_internal(decoder, input_stream, true);
|
||||
flac_decode_internal(client, input_stream, true);
|
||||
}
|
||||
|
||||
static const char *const oggflac_suffixes[] = { "ogg", "oga", nullptr };
|
||||
|
Reference in New Issue
Block a user