diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-07-31 11:00:17 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-07-31 11:06:27 +1000 |
| commit | cdaa2ac97ac663de7c0c2b0361871c97269b1675 (patch) | |
| tree | c7ac2908d9294613db6f11138fc54786f4d78dab /src/codecs/foxenflac.cpp | |
| parent | 0a8d2fd12e0781c32d23b67dd938e3ba8caf782e (diff) | |
| download | tangara-fw-cdaa2ac97ac663de7c0c2b0361871c97269b1675.tar.gz | |
Add duration for flacs
Diffstat (limited to 'src/codecs/foxenflac.cpp')
| -rw-r--r-- | src/codecs/foxenflac.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/codecs/foxenflac.cpp b/src/codecs/foxenflac.cpp index ce18975c..3a727ce2 100644 --- a/src/codecs/foxenflac.cpp +++ b/src/codecs/foxenflac.cpp @@ -6,6 +6,7 @@ #include "foxenflac.hpp" #include <stdint.h> +#include <sys/_stdint.h> #include <cstdlib> @@ -44,13 +45,20 @@ auto FoxenFlacDecoder::BeginStream(const cpp::span<const std::byte> input) return {bytes_used, cpp::fail(Error::kMalformedData)}; } - return {bytes_used, - OutputFormat{ - .num_channels = static_cast<uint8_t>(channels), - .bits_per_sample = 32, // libfoxenflac output is fixed-size. - .sample_rate_hz = static_cast<uint32_t>(fs), - .duration_seconds = {}, - }}; + OutputFormat format{ + .num_channels = static_cast<uint8_t>(channels), + .bits_per_sample = 32, // libfoxenflac output is fixed-size. + .sample_rate_hz = static_cast<uint32_t>(fs), + .duration_seconds = {}, + .bits_per_second = {}, + }; + + uint64_t num_samples = fx_flac_get_streaminfo(flac_, FLAC_KEY_N_SAMPLES); + if (num_samples > 0) { + format.duration_seconds = num_samples / fs; + } + + return {bytes_used, format}; } auto FoxenFlacDecoder::ContinueStream(cpp::span<const std::byte> input, |
