diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-05-20 20:14:45 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-05-20 20:14:45 +0000 |
| commit | 9d12276bc2f11c0140f0d30a2f108bae7fd51ea9 (patch) | |
| tree | bec365e82b5572703ee626c758af21567181200b /src/plugins/Input | |
| parent | ba6d239f2bc533cbed1d1cb3ec85e0c15acd03f1 (diff) | |
| download | qmmp-9d12276bc2f11c0140f0d30a2f108bae7fd51ea9.tar.gz qmmp-9d12276bc2f11c0140f0d30a2f108bae7fd51ea9.tar.bz2 qmmp-9d12276bc2f11c0140f0d30a2f108bae7fd51ea9.zip | |
flac: fixed bitrate calculation (#916)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7186 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input')
| -rw-r--r-- | src/plugins/Input/flac/decoder_flac.cpp | 22 | ||||
| -rw-r--r-- | src/plugins/Input/flac/decoder_flac.h | 4 |
2 files changed, 17 insertions, 9 deletions
diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp index 8e4b8bb5f..43124ec5f 100644 --- a/src/plugins/Input/flac/decoder_flac.cpp +++ b/src/plugins/Input/flac/decoder_flac.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2016 by Ilya Kotov * + * Copyright (C) 2006-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -122,7 +122,6 @@ static FLAC__StreamDecoderReadStatus flac_callback_read (const FLAC__StreamDecod { DecoderFLAC *dflac = (DecoderFLAC *) client_data; qint64 res = dflac->data()->input->read((char *)buffer, *bytes); - dflac->data()->last_bytes += res; if (res > 0) { @@ -139,7 +138,7 @@ static FLAC__StreamDecoderReadStatus flac_callback_read (const FLAC__StreamDecod } -static FLAC__StreamDecoderWriteStatus flac_callback_write (const FLAC__StreamDecoder *, +static FLAC__StreamDecoderWriteStatus flac_callback_write (const FLAC__StreamDecoder *d, const FLAC__Frame *frame, const FLAC__int32* const buffer[], void *client_data) @@ -150,9 +149,16 @@ static FLAC__StreamDecoderWriteStatus flac_callback_write (const FLAC__StreamDec if (dflac->data()->abort) return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; - dflac->data()->bitrate = dflac->data()->last_bytes * 8.0 * frame->header.sample_rate / - frame->header.blocksize / 1000.0; - dflac->data()->last_bytes = 0; + //bitrate calculation + FLAC__uint64 decode_position = 0; + if(FLAC__stream_decoder_get_decode_position(d, &decode_position) && + decode_position > dflac->data()->last_decode_position) + { + dflac->data()->bitrate = (decode_position - dflac->data()->last_decode_position) * 8.0 * frame->header.sample_rate / + frame->header.blocksize / 1000.0; + } + + dflac->data()->last_decode_position = decode_position; dflac->data()->sample_buffer_fill = pack_pcm_signed ( dflac->data()->sample_buffer, @@ -210,6 +216,8 @@ static void flac_callback_metadata (const FLAC__StreamDecoder *, dflac->data()->channels = metadata->data.stream_info.channels; dflac->data()->sample_rate = metadata->data.stream_info.sample_rate; dflac->data()->length = dflac->data()->total_samples * 1000 / dflac->data()->sample_rate; + dflac->data()->bitrate = dflac->data()->input->size() * 8 * metadata->data.stream_info.sample_rate / + metadata->data.stream_info.total_samples / 1000; } } @@ -319,7 +327,7 @@ bool DecoderFLAC::initialize() m_data->bitrate = -1; m_data->abort = 0; m_data->sample_buffer_fill = 0; - m_data->last_bytes = 0; + m_data->last_decode_position = 0; if (!m_data->decoder) { qDebug("DecoderFLAC: creating FLAC__StreamDecoder"); diff --git a/src/plugins/Input/flac/decoder_flac.h b/src/plugins/Input/flac/decoder_flac.h index 5502001dc..ad0203f66 100644 --- a/src/plugins/Input/flac/decoder_flac.h +++ b/src/plugins/Input/flac/decoder_flac.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2016 by Ilya Kotov * + * Copyright (C) 2006-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -50,7 +50,7 @@ struct flac_data unsigned sample_rate; unsigned channels; - FLAC__uint64 last_bytes; + FLAC__uint64 last_decode_position; int ok; /* was this stream successfully opened? */ //struct decoder_error error; |
