ref: a6ab0c92e0ce06c0eed7885b966f44e1816424b9
parent: a3d51712098ba68ed08c2b7c48934505d4b19b22
author: lieff <lieff@users.noreply.github.com>
date: Sun Apr 26 07:50:34 EDT 2020
Create indexes on seek with MP3D_DO_NOT_SCAN open flag.
--- a/minimp3_ex.h
+++ b/minimp3_ex.h
@@ -73,7 +73,7 @@
mp3dec_frame_info_t info;
mp3d_sample_t buffer[MINIMP3_MAX_SAMPLES_PER_FRAME];
size_t input_consumed, input_filled;
- int is_file, flags, vbr_tag_found;
+ int is_file, flags, vbr_tag_found, indexes_built;
int free_format_bytes;
int buffer_samples, buffer_consumed, to_skip, start_delay;
int last_error;
@@ -675,6 +675,8 @@
return ret;
mp3dec_init(&dec->mp3d);
dec->buffer_samples = 0;
+ dec->indexes_built = !(dec->vbr_tag_found || (flags & MP3D_DO_NOT_SCAN));
+ dec->flags &= (~MP3D_DO_NOT_SCAN);
return 0;
}
@@ -728,8 +730,9 @@
dec->to_skip = 0;
goto do_exit;
}
- if (!dec->index.frames && dec->vbr_tag_found)
- { /* no index created yet (vbr tag used to calculate track length) */
+ if (!dec->indexes_built)
+ { /* no index created yet (vbr tag used to calculate track length or MP3D_DO_NOT_SCAN open flag used) */
+ dec->indexes_built = 1;
dec->samples = 0;
dec->buffer_samples = 0;
if (dec->io)
@@ -1291,6 +1294,8 @@
return MP3D_E_IOERROR;
mp3dec_init(&dec->mp3d);
dec->buffer_samples = 0;
+ dec->indexes_built = !(dec->vbr_tag_found || (flags & MP3D_DO_NOT_SCAN));
+ dec->flags &= (~MP3D_DO_NOT_SCAN);
return 0;
}