diff options
author | Max Kellermann <max@duempel.org> | 2009-11-11 19:52:14 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-11 19:52:14 +0100 |
commit | d35efddd65934e5adebe0c01ab7953c9a34082ed (patch) | |
tree | b30c23cfeb9d644a36e3450c9602ad3e41ef255f /src/decoder/flac_plugin.c | |
parent | 7b13776f2dd2feeb4bd28e8cf023ec81474e4eaa (diff) | |
download | mpd-d35efddd65934e5adebe0c01ab7953c9a34082ed.tar.gz mpd-d35efddd65934e5adebe0c01ab7953c9a34082ed.tar.xz mpd-d35efddd65934e5adebe0c01ab7953c9a34082ed.zip |
decoder/flac: calculate bit rate in flac_common_write()
Removed the "bit_rate" attribute from the flac_data struct. Pass the
number of bytes since the last call to flac_common_write(), and let
it calculate the bit rate.
Diffstat (limited to 'src/decoder/flac_plugin.c')
-rw-r--r-- | src/decoder/flac_plugin.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/decoder/flac_plugin.c b/src/decoder/flac_plugin.c index 7a4f11451..afc134077 100644 --- a/src/decoder/flac_plugin.c +++ b/src/decoder/flac_plugin.c @@ -194,22 +194,23 @@ flac_write_cb(const FLAC__StreamDecoder *dec, const FLAC__Frame *frame, FLAC__uint32 samples = frame->header.blocksize; struct flac_data *data = (struct flac_data *) vdata; float timeChange; - FLAC__uint64 newPosition = 0; + FLAC__uint64 nbytes = 0; timeChange = ((float)samples) / frame->header.sample_rate; data->time += timeChange; - FLAC__stream_decoder_get_decode_position(dec, &newPosition); - if (data->position && newPosition >= data->position) { - assert(timeChange >= 0); - - data->bit_rate = - ((newPosition - data->position) * 8.0 / timeChange) - / 1000 + 0.5; - } - data->position = newPosition; + if (FLAC__stream_decoder_get_decode_position(dec, &nbytes)) { + if (data->position > 0 && nbytes > data->position) { + nbytes -= data->position; + data->position += nbytes; + } else { + data->position = nbytes; + nbytes = 0; + } + } else + nbytes = 0; - return flac_common_write(data, frame, buf); + return flac_common_write(data, frame, buf, nbytes); } static struct tag * |