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:
Max Kellermann
2016-11-18 07:13:35 +01:00
parent 595d1942cb
commit fd77acc217
46 changed files with 460 additions and 407 deletions

View File

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