diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-08-10 22:24:47 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-08-10 22:24:47 +1000 |
| commit | 06283e07140f39a9f3db636c8a4ff8fcbc56a290 (patch) | |
| tree | fcf0ec2555ffa0db3060100d16b653d3a39e36e7 /src/audio/audio_task.cpp | |
| parent | c37ccb985125f5efdf7600989331085f60d8a973 (diff) | |
| download | tangara-fw-06283e07140f39a9f3db636c8a4ff8fcbc56a290.tar.gz | |
Fix issues with timing stereo streams
Diffstat (limited to 'src/audio/audio_task.cpp')
| -rw-r--r-- | src/audio/audio_task.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp index baa0a52d..05a06ad1 100644 --- a/src/audio/audio_task.cpp +++ b/src/audio/audio_task.cpp @@ -56,18 +56,20 @@ static const char* kTag = "audio_dec"; static constexpr std::size_t kCodecBufferLength = 240 * 4; -Timer::Timer(uint32_t sample_rate, uint32_t total_samples) - : sample_rate_(sample_rate), +Timer::Timer(const codecs::ICodec::OutputFormat& format) + : format_(format), current_seconds_(0), current_sample_in_second_(0), - total_duration_seconds_(total_samples / sample_rate) {} + total_duration_seconds_(format.total_samples.value_or(0) / + format.num_channels / format.sample_rate_hz) {} auto Timer::AddSamples(std::size_t samples) -> void { bool incremented = false; current_sample_in_second_ += samples; - while (current_sample_in_second_ >= sample_rate_) { + while (current_sample_in_second_ >= + format_.sample_rate_hz * format_.num_channels) { current_seconds_++; - current_sample_in_second_ -= sample_rate_; + current_sample_in_second_ -= format_.sample_rate_hz * format_.num_channels; incremented = true; } @@ -138,8 +140,7 @@ auto AudioTask::BeginDecoding(std::shared_ptr<codecs::IStream> stream) -> bool { } if (open_res->total_samples) { - timer_.reset( - new Timer(open_res->sample_rate_hz, open_res->total_samples.value())); + timer_.reset(new Timer(open_res.value())); } else { timer_.reset(); } |
