[Matroska-devel] Several (minor) issues or underspecified areas in the MKV spec

Michael Bradshaw mjbshaw at google.com
Mon Oct 5 18:47:06 CEST 2015

On Mon, Oct 5, 2015 at 8:03 AM, Dave Rice <dave at dericed.com> wrote:

> I'm working on the EBML specification (the one being drafted on GitHub)
> quite a bit. What are the questions to EBML?

Preface: some of these are weird corner cases that are extremely unlikely
to occur for anyone doing anything sane. That said, I think parsers should
consistently (or even gracefully) handle the insane, and in order to do
that I think these corner cases should be clarified in the spec.

   - Shouldn't EBMLMaxIDLength have a range of > 3 (given that the EBML
   element has an ID length of 4)?
   - Shouldn't EBMLMaxSizeLength have a range of > 0?
   - Can a global element (i.e. Void, CRC-32) occur before an EBML element?
   If so, are they considered part of the document (as is, it seems like an
   EBML document is implicitly defined as everything between an EBML header
   and then next EBML header (or EOF), in which case they are not considered
   part of the EBML document)?
   - How should a EBMLMaxSizeLength > 8 be handled if it occurs after the
   element that needs it (specific edge case: DocType has a size length of 9,
   but DocType occurs before EBMLMaxSizeLength in the header; how should that
   be handled?) (alternate edge case: a Void element occurring in (or before)
   an EBML element with a size length is > 8 and occurring
   before EBMLMaxSizeLength). Should the spec explicitly require parsers to
   parse as if EBMLMaxSizeLength is 8 unless and until explicitly told
   - Do the limitations of EBMLMaxSizeLength apply to the document
   immediately? That is, if EBMLMaxSizeLength is 1, does that apply to
   elements in the EBML header immediately after it is encountered, meaning
   that if DocType followed it it must have a length < 127?
   - Typo in the EBML spec in the Length definition for the Binary data
   type: “A Master-element” should be “A Byte Element”
   - The EBML spec says that the Reserved ID (all bits set to 1) is the
   only ID that may change the Length Descriptor (the count of leading zeroes
   + 1). What exactly does it mean to "change the Length Descriptor?" Does
   this mean a Length Descriptor can be > 4 (even if EBMLMaxIDLength = 4) iff
   the ID is the Reserved ID?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.matroska.org/pipermail/matroska-devel/attachments/20151005/a21e5b2b/attachment.html>

More information about the Matroska-devel mailing list