diff options
Diffstat (limited to 'libass/ass.c')
-rw-r--r-- | libass/ass.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libass/ass.c b/libass/ass.c index 6cfa361..14264dc 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -57,6 +57,7 @@ struct parser_priv { // contains bitmap of ReadOrder IDs of all read events uint32_t *read_order_bitmap; int read_order_elems; // size in uint32_t units of read_order_bitmap + int check_readorder; }; #define ASS_STYLES_ALLOC 20 @@ -899,6 +900,11 @@ static int check_duplicate_event(ASS_Track *track, int ReadOrder) return 0; } +void ass_set_check_readorder(ASS_Track *track, int check_readorder) +{ + track->parser_priv->check_readorder = check_readorder == 1; +} + /** * \brief Process a chunk of subtitle stream data. In Matroska, this contains exactly 1 event (or a commentary). * \param track track @@ -915,8 +921,9 @@ void ass_process_chunk(ASS_Track *track, char *data, int size, char *p; char *token; ASS_Event *event; + int check_readorder = track->parser_priv->check_readorder; - if (!track->parser_priv->read_order_bitmap) { + if (check_readorder && !track->parser_priv->read_order_bitmap) { for (int i = 0; i < track->n_events; i++) { if (test_and_set_read_order_bit(track, track->events[i].ReadOrder) < 0) break; @@ -944,7 +951,7 @@ void ass_process_chunk(ASS_Track *track, char *data, int size, do { NEXT(p, token); event->ReadOrder = atoi(token); - if (check_duplicate_event(track, event->ReadOrder)) + if (check_readorder && check_duplicate_event(track, event->ReadOrder)) break; NEXT(p, token); @@ -1332,6 +1339,7 @@ ASS_Track *ass_new_track(ASS_Library *library) free(track); return NULL; } + track->parser_priv->check_readorder = 1; return track; } |