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.
This commit is contained in:
Max Kellermann
2009-11-11 19:25:15 +01:00
parent f937ec9a7c
commit 7b13776f2d
4 changed files with 36 additions and 7 deletions

View File

@@ -35,6 +35,7 @@ flac_data_init(struct flac_data *data, struct decoder * decoder,
{
pcm_buffer_init(&data->buffer);
data->have_stream_info = false;
data->next_frame = 0;
data->time = 0;
@@ -65,9 +66,11 @@ void flac_metadata_common_cb(const FLAC__StreamMetadata * block,
switch (block->type) {
case FLAC__METADATA_TYPE_STREAMINFO:
data->stream_info = block->data.stream_info;
data->have_stream_info = true;
audio_format_init(&data->audio_format, si->sample_rate,
si->bits_per_sample, si->channels);
data->total_time = ((float)si->total_samples) / (si->sample_rate);
break;
case FLAC__METADATA_TYPE_VORBIS_COMMENT:
if (data->replay_gain_info)