diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-02-05 20:30:20 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-02-05 20:30:20 +1100 |
| commit | f2df12836f10719f65e9eefa1e17aa600edf49c2 (patch) | |
| tree | f3934ad5781fe18ed3cb9b3ca69f2db7107b4e93 | |
| parent | f4d8b2b04afe0cfd025e4ea0f574f906cb79a840 (diff) | |
| download | tangara-fw-f2df12836f10719f65e9eefa1e17aa600edf49c2.tar.gz | |
tweak pipeline buffers rather than i2s dma buffer
this maintains the bluetooth changes to buffer sizes, but keeps the most
important i2s buffer the same size
| -rw-r--r-- | src/audio/audio_converter.cpp | 2 | ||||
| -rw-r--r-- | src/audio/audio_decoder.cpp | 2 | ||||
| -rw-r--r-- | src/drivers/include/i2s_dac.hpp | 10 |
3 files changed, 8 insertions, 6 deletions
diff --git a/src/audio/audio_converter.cpp b/src/audio/audio_converter.cpp index 77773c5b..dc2fef95 100644 --- a/src/audio/audio_converter.cpp +++ b/src/audio/audio_converter.cpp @@ -25,7 +25,7 @@ [[maybe_unused]] static constexpr char kTag[] = "mixer"; static constexpr std::size_t kSampleBufferLength = - drivers::kI2SBufferLengthFrames * sizeof(sample::Sample) * 2; + drivers::kI2SBufferLengthFrames * sizeof(sample::Sample); static constexpr std::size_t kSourceBufferLength = kSampleBufferLength * 2; namespace audio { diff --git a/src/audio/audio_decoder.cpp b/src/audio/audio_decoder.cpp index 5b057240..bd728e5a 100644 --- a/src/audio/audio_decoder.cpp +++ b/src/audio/audio_decoder.cpp @@ -48,7 +48,7 @@ namespace audio { [[maybe_unused]] static const char* kTag = "audio_dec"; static constexpr std::size_t kCodecBufferLength = - drivers::kI2SBufferLengthFrames * sizeof(sample::Sample) * 2; + drivers::kI2SBufferLengthFrames * sizeof(sample::Sample); Timer::Timer(std::shared_ptr<Track> t, const codecs::ICodec::OutputFormat& format) diff --git a/src/drivers/include/i2s_dac.hpp b/src/drivers/include/i2s_dac.hpp index fdd7e976..bd837ca0 100644 --- a/src/drivers/include/i2s_dac.hpp +++ b/src/drivers/include/i2s_dac.hpp @@ -27,10 +27,12 @@ namespace drivers { -// We normalise to 2-channel, 16 bit audio, which gives us a max of 4092 / 2 / 2 -// (16 bits) frames. This in turn means that at 48kHz, we have about 10ms of -// budget to fill each buffer. -constexpr size_t kI2SBufferLengthFrames = 512; +// DMA max buffer size for I2S is 4092. We normalise to 2-channel, 16 bit +// audio, which gives us a max of 4092 / 2 / 2 (16 bits) frames. This in turn +// means that at 48kHz, we have about 21ms of budget to fill each buffer. +// We base this off of the maximum DMA size in order to minimise the amount of +// work the CPU has to do to service the DMA callbacks. +constexpr size_t kI2SBufferLengthFrames = 1024; /** * Interface for a DAC that receives PCM samples over I2S. |
