summaryrefslogtreecommitdiff
path: root/src/audio/audio_decoder.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-07 13:19:45 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-07 13:19:45 +1000
commit1f903accd95361735c841c87fdc6494ad3331b40 (patch)
tree5b69bd0548c06a93852a576fa90a170fa303a15e /src/audio/audio_decoder.cpp
parent2a568846bd8f1c9e23e86e7570557eed6f18cf9f (diff)
downloadtangara-fw-1f903accd95361735c841c87fdc6494ad3331b40.tar.gz
Flesh out audio state machine for playback
Also fix mono playback
Diffstat (limited to 'src/audio/audio_decoder.cpp')
-rw-r--r--src/audio/audio_decoder.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/audio/audio_decoder.cpp b/src/audio/audio_decoder.cpp
index 5a2c75c7..af026262 100644
--- a/src/audio/audio_decoder.cpp
+++ b/src/audio/audio_decoder.cpp
@@ -98,27 +98,27 @@ auto AudioDecoder::Process(const std::vector<InputStream>& inputs,
while (true) {
if (has_samples_to_send_) {
- if (!current_output_format_) {
- auto format = current_codec_->GetOutputFormat();
+ auto format = current_codec_->GetOutputFormat();
+ if (format.has_value()) {
current_output_format_ = StreamInfo::Pcm{
- .channels = format.num_channels,
- .bits_per_sample = format.bits_per_sample,
- .sample_rate = format.sample_rate_hz,
+ .channels = format->num_channels,
+ .bits_per_sample = format->bits_per_sample,
+ .sample_rate = format->sample_rate_hz,
};
- }
- if (!output->prepare(*current_output_format_)) {
- break;
- }
+ if (!output->prepare(*current_output_format_)) {
+ break;
+ }
- auto write_res = current_codec_->WriteOutputSamples(output->data());
- output->add(write_res.first);
- has_samples_to_send_ = !write_res.second;
+ auto write_res = current_codec_->WriteOutputSamples(output->data());
+ output->add(write_res.first);
+ has_samples_to_send_ = !write_res.second;
- if (has_samples_to_send_) {
- // We weren't able to fit all the generated samples into the output
- // buffer. Stop trying; we'll finish up during the next pass.
- break;
+ if (has_samples_to_send_) {
+ // We weren't able to fit all the generated samples into the output
+ // buffer. Stop trying; we'll finish up during the next pass.
+ break;
+ }
}
}