summaryrefslogtreecommitdiffstats
path: root/libass/ass.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass.c')
-rw-r--r--libass/ass.c12
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;
}