avformat/matroskadec: Allow multiple Tags elements

The Matroska specification allows multiple (level 1) Tags elements per
file, yet our demuxer didn't: While it parsed any amount of Tags
elements it found in front of the Clusters (albeit with warnings because
of duplicate elements), it would treat any Tags element only referenced
via a SeekHead entry as already parsed if any Tags element has already
been parsed; therefore this Tags element would not be parsed at all.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
pull/338/head
Andreas Rheinhardt 5 years ago
parent 7e9103535a
commit ff4da60fb8
  1. 4
      libavformat/matroskadec.c

@ -1147,11 +1147,11 @@ static MatroskaLevel1Element *matroska_find_level1_elem(MatroskaDemuxContext *ma
if (id == MATROSKA_ID_CLUSTER) if (id == MATROSKA_ID_CLUSTER)
return NULL; return NULL;
// There can be multiple seekheads. // There can be multiple SeekHeads and Tags.
for (i = 0; i < matroska->num_level1_elems; i++) { for (i = 0; i < matroska->num_level1_elems; i++) {
if (matroska->level1_elems[i].id == id) { if (matroska->level1_elems[i].id == id) {
if (matroska->level1_elems[i].pos == pos || if (matroska->level1_elems[i].pos == pos ||
id != MATROSKA_ID_SEEKHEAD) id != MATROSKA_ID_SEEKHEAD && id != MATROSKA_ID_TAGS)
return &matroska->level1_elems[i]; return &matroska->level1_elems[i];
} }
} }

Loading…
Cancel
Save