summaryrefslogtreecommitdiff
path: root/src/codecs/foxenflac.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-07-31 11:00:17 +1000
committerjacqueline <me@jacqueline.id.au>2023-07-31 11:06:27 +1000
commitcdaa2ac97ac663de7c0c2b0361871c97269b1675 (patch)
treec7ac2908d9294613db6f11138fc54786f4d78dab /src/codecs/foxenflac.cpp
parent0a8d2fd12e0781c32d23b67dd938e3ba8caf782e (diff)
downloadtangara-fw-cdaa2ac97ac663de7c0c2b0361871c97269b1675.tar.gz
Add duration for flacs
Diffstat (limited to 'src/codecs/foxenflac.cpp')
-rw-r--r--src/codecs/foxenflac.cpp22
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,