Skip to content

Commit d67acb8

Browse files
committed
MP3Decoder: Fix playback stopping issue
Closes: #5164
1 parent 162954a commit d67acb8

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

shared-module/audiomp3/MP3Decoder.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ audioio_get_buffer_result_t audiomp3_mp3file_get_buffer(audiomp3_mp3file_obj_t *
319319
uint8_t **bufptr,
320320
uint32_t *buffer_length) {
321321
if (!self->inbuf) {
322+
*buffer_length = 0;
322323
return GET_BUFFER_ERROR;
323324
}
324325
if (!single_channel_output) {
@@ -342,24 +343,26 @@ audioio_get_buffer_result_t audiomp3_mp3file_get_buffer(audiomp3_mp3file_obj_t *
342343

343344
mp3file_skip_id3v2(self);
344345
if (!mp3file_find_sync_word(self)) {
346+
*buffer_length = 0;
345347
return self->eof ? GET_BUFFER_DONE : GET_BUFFER_ERROR;
346348
}
347349
int bytes_left = BYTES_LEFT(self);
348350
uint8_t *inbuf = READ_PTR(self);
349351
int err = MP3Decode(self->decoder, &inbuf, &bytes_left, buffer, 0);
350352
CONSUME(self, BYTES_LEFT(self) - bytes_left);
351353

354+
if (err) {
355+
*buffer_length = 0;
356+
return GET_BUFFER_DONE;
357+
}
358+
352359
if (self->inbuf_offset >= 512) {
353360
background_callback_add(
354361
&self->inbuf_fill_cb,
355362
mp3file_update_inbuf_cb,
356363
self);
357364
}
358365

359-
if (err) {
360-
return GET_BUFFER_DONE;
361-
}
362-
363366
return GET_BUFFER_MORE_DATA;
364367
}
365368

0 commit comments

Comments
 (0)