• Andreas Rheinhardt's avatar
    avformat/matroskadec: Don't skip too much when unseekable · 51203051
    Andreas Rheinhardt authored
    The Matroska (and WebM) file format achieves forward-compability by
    insisting that demuxers ignore and skip elements they don't know about.
    Unfortunately, this complicates the detection of errors as errors
    resulting from loosing sync can't be reliably distinguished from
    unknown elements that are part of a future version of the standard.
    
    Up until now, the strategy to deal with this situation was to skip all
    unknown elements that are not obviously erroneous; if an error happened,
    it was tried to seek to the last known good position to resync from (and
    resync to level 1 elements). This is working fine if the input is
    seekable, but if it is not, then the skipped data can usually not be
    rechecked lateron. This is particularly acute if unknown-length clusters
    are in use, as the check for whether a child element exceeds the
    containing master element is ineffective in this situation.
    
    To remedy this, a new heuristic has been introduced: If an unknown
    element is encountered in non-seekable mode, an error is presumed to
    have happened based upon a combination of the length of the row of the
    already encountered unknown elements and of how far away skipping this
    element would take us.
    Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
    51203051
matroskadec.c 157 KB