diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-22 09:40:46 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-22 09:40:46 +1000 |
| commit | cde8002df4a86a2a6efd4aa0b5c174b2f39f7bf7 (patch) | |
| tree | 58f7281b56539eee5a5b12e981b59349511c3c2c /src/audio/audio_task.cpp | |
| parent | b58b072d2d42cc1a9dab3e6b27f2f3ae70fe7610 (diff) | |
| download | tangara-fw-cde8002df4a86a2a6efd4aa0b5c174b2f39f7bf7.tar.gz | |
Fix (i think?) mysterious overly large reads in libmad
Diffstat (limited to 'src/audio/audio_task.cpp')
| -rw-r--r-- | src/audio/audio_task.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp index d4c1d27a..24bc7be7 100644 --- a/src/audio/audio_task.cpp +++ b/src/audio/audio_task.cpp @@ -173,11 +173,11 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) { float samples_sunk = bytes_sunk; samples_sunk /= pcm.channels; - int8_t bps = pcm.bits_per_sample; - if (bps == 24) { - bps = 32; - } - samples_sunk /= (bps / 8); + // Samples must be aligned to 16 bits. The number of actual bytes per + // sample is therefore the bps divided by 16, rounded up (align to word), + // times two (convert to bytes). + uint8_t bytes_per_sample = ((pcm.bits_per_sample + 16 - 1) / 16) * 2; + samples_sunk /= bytes_per_sample; current_sample_in_second += samples_sunk; while (current_sample_in_second >= pcm.sample_rate) { |
