summaryrefslogtreecommitdiff
path: root/shared-module/audiomp3/MP3File.h
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2019-12-12 08:44:15 -0600
committerJeff Epler <jepler@gmail.com>2019-12-12 08:44:15 -0600
commit1cdac3f16a9244c992e8494a7246ab643cdb47c0 (patch)
treebc50ab0a7659defa75b867027330192c802fd1c5 /shared-module/audiomp3/MP3File.h
parent8c841af9461eba6252690c38bc3e726f2fd09e8b (diff)
MP3File: Fix stereo playback on samd AudioOut
There were several problems with the way this worked -- the read_count approach was too complicated and I made a mistake "simplifying" it from WaveFile. And when the right channel was returned, it was off by 1 byte, making it into static. Instead, directly track which is the "other" channel that has data available, and by using the right data type make the "+ channel" arithmetic give the right result. This requires a double cast (int16_t*)(void*) due to an alignment warning; the alignment is now ensured manually, but the compiler doesn't make the necessary inference that the low address bit must be clear.
Diffstat (limited to 'shared-module/audiomp3/MP3File.h')
-rw-r--r--shared-module/audiomp3/MP3File.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/shared-module/audiomp3/MP3File.h b/shared-module/audiomp3/MP3File.h
index 12649ac1a..9d99e8d1f 100644
--- a/shared-module/audiomp3/MP3File.h
+++ b/shared-module/audiomp3/MP3File.h
@@ -39,7 +39,7 @@ typedef struct {
uint8_t* inbuf;
uint32_t inbuf_length;
uint32_t inbuf_offset;
- uint8_t* buffers[2];
+ int16_t* buffers[2];
uint32_t len;
uint32_t frame_buffer_size;
@@ -50,8 +50,8 @@ typedef struct {
uint8_t channel_count;
bool eof;
- uint16_t read_count;
- uint16_t channel_read_count[2];
+ int8_t other_channel;
+ int8_t other_buffer_index;
} audiomp3_mp3file_obj_t;
// These are not available from Python because it may be called in an interrupt.