From 7b13776f2dd2feeb4bd28e8cf023ec81474e4eaa Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 11 Nov 2009 19:25:15 +0100 Subject: decoder/flac: store the whole stream info object, not duration We don't want to work with floating point values if possible. Get the integer number of frames from the FLAC__StreamMetadata_StreamInfo object, and convert it into a float duration on demand. This patch adds a check if the STREAMINFO packet has been received yet. --- src/decoder/flac_plugin.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/decoder/flac_plugin.c') diff --git a/src/decoder/flac_plugin.c b/src/decoder/flac_plugin.c index 98bcd64d3..7a4f11451 100644 --- a/src/decoder/flac_plugin.c +++ b/src/decoder/flac_plugin.c @@ -400,6 +400,11 @@ flac_decoder_initialize(struct flac_data *data, FLAC__StreamDecoder *sd, return false; } + if (!data->have_stream_info) { + g_warning("no STREAMINFO packet found"); + return false; + } + if (!audio_format_valid(&data->audio_format)) { g_warning("Invalid audio format: %u:%u:%u\n", data->audio_format.sample_rate, @@ -408,12 +413,13 @@ flac_decoder_initialize(struct flac_data *data, FLAC__StreamDecoder *sd, return false; } - if (duration != 0) - data->total_time = (float)duration / - (float)data->audio_format.sample_rate; + if (duration == 0) + duration = data->stream_info.total_samples; decoder_initialized(data->decoder, &data->audio_format, - seekable, data->total_time); + seekable, + (float)duration / + (float)data->audio_format.sample_rate); return true; } -- cgit v1.2.3