|
20 | 20 | #include "shared-module/audiomp3/MP3Decoder.h"
|
21 | 21 | #include "supervisor/background_callback.h"
|
22 | 22 | #include "lib/mp3/src/mp3common.h"
|
| 23 | +#include "lib/mp3/src/coder.h" |
23 | 24 |
|
24 | 25 | #define MAX_BUFFER_LEN (MAX_NSAMP * MAX_NGRAN * MAX_NCHAN * sizeof(int16_t))
|
25 | 26 |
|
@@ -360,6 +361,17 @@ void common_hal_audiomp3_mp3file_set_file(audiomp3_mp3file_obj_t *self, mp_obj_t
|
360 | 361 | // get_buffer() that I didn't understand.
|
361 | 362 | memset(self->pcm_buffer[0], 0, MAX_BUFFER_LEN);
|
362 | 363 | memset(self->pcm_buffer[1], 0, MAX_BUFFER_LEN);
|
| 364 | + |
| 365 | + /* important to do this - DSP primitives assume a bunch of state variables are 0 on first use */ |
| 366 | + struct _MP3DecInfo *decoder = self->decoder; |
| 367 | + memset(decoder->FrameHeaderPS, 0, sizeof(FrameHeader)); |
| 368 | + memset(decoder->SideInfoPS, 0, sizeof(SideInfo)); |
| 369 | + memset(decoder->ScaleFactorInfoPS, 0, sizeof(ScaleFactorInfo)); |
| 370 | + memset(decoder->HuffmanInfoPS, 0, sizeof(HuffmanInfo)); |
| 371 | + memset(decoder->DequantInfoPS, 0, sizeof(DequantInfo)); |
| 372 | + memset(decoder->IMDCTInfoPS, 0, sizeof(IMDCTInfo)); |
| 373 | + memset(decoder->SubbandInfoPS, 0, sizeof(SubbandInfo)); |
| 374 | + |
363 | 375 | MP3FrameInfo fi;
|
364 | 376 | bool result = mp3file_get_next_frame_info(self, &fi, true);
|
365 | 377 | background_callback_allow();
|
|
0 commit comments