Re: Question about Test Suite

Vignesh Venkatasubramanian <[email protected]>
Newsgroups gmane.comp.multimedia.matroska.devel
Message-ID <CAOJaEPJjqcLbDC0f9u8N1fUGzXco-Zi0PAg3FCYXKTTjOvQxqw@mail.gmail.com>
On Wed, Jul 29, 2015 at 11:05 PM, Steve Lhomme <[email protected]> wrote:
> When encountering invalid data you should read untilyou find something
> valid for that level, reach the end of the current Master or is the
> start of an upper level.
>
> Also note that invalid data is different than unknown data. Unknown
> data would be valid EBML ID + Length but not known to your EBML
> semantic. You should should ignore and skip such data.

Right, that's exactly my point. When you begin parsing at 451451, you
see 0XEA which is a valid EBML ID (albeit unknown). So the parser
would naturally try to read the length of the unknown EBML element
from position 451452 until it finds a valid length. Correct? But
that's not what mkvinfo seem to do here. Somehow it skips 451451 and
parses the next EBML ID at 451452.

>
> On Mon, Jul 27, 2015 at 9:36 PM, Vignesh Venkatasubramanian
> <[email protected]> wrote:
>> On Mon, Jul 27, 2015 at 12:14 PM, wm4 <[email protected]> wrote:
>>> On Mon, 27 Jul 2015 09:58:40 -0700
>>> Vignesh Venkatasubramanian <[email protected]> wrote:
>>>
>>>> On Fri, Jul 24, 2015 at 12:00 AM, Moritz Bunkus <[email protected]> wrote:
>>>> > Hey,
>>>> >
>>>> >> How does mkvinfo get to 451452 to begin reading the next element
>>>> >> instead?
>>>> >
>>>> > mkvinfo uses libebml's EbmlMaster::Read() function for reading a cluster
>>>> > en bloc and then outputs which elements libebml has found.
>>>> >
>>>> > EbmlMaster::Read() uses EbmlEmenet::FindNextElement() under the hood
>>>> > for finding the next ID. And that function reads as many bytes as
>>>> > needed for forming a valid ID.
>>>> >
>>>> > So if the byte at position 451451 happens to be 0 (which I haven't
>>>> > verified, mind you) then it will probably be skipped as an EBML ID's
>>>> > first byte is never 0. Similar reasoning for other values for the
>>>> > first byte, e.g. anything smaller than 0x10 would be invalid as EBML
>>>> > IDs can only be four bytes long, and the position of first bit set to
>>>> > 1 determines the size of the EBML ID.
>>>>
>>>> Thanks for the explanation. But the problem is, the byte at position
>>>> 451451 is 0xEA which is a valid EBML ID right? How does mkvinfo skip
>>>> just that byte? FYI, here are the 100 bytes starting from position
>>>> 451417: http://pastebin.com/jKxthKwF
>>>>
>>>> I ran the file through ffmpeg's matroska parser. That resyncs to the
>>>> next level 1 element as soon as it sees the invalid track number (i.e.
>>>> position 451518) by doing a byte-by-byte search. So it merely ignores
>>>> the value at 451451 as it is not a valid level 1 id.
>>>
>>> Yes, it probably tries "resyncing" by trying the next cluster. Some
>>> examples:
>>>
>>> http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/matroskadec.c;h=b54679811854ba7fb42225bf086d8b737d0f2d4a;hb=HEAD#l661
>>>
>>> https://github.com/mpv-player/mpv/blob/master/demux/ebml.c#L225
>>>
>>> http://git.1f0.de/gitweb?p=ffmpeg.git;a=blob;f=libavformat/MatroskaParser.c;h=094fc4f282562702ddafb8fc5765e6facd7ce28c;hb=8b3deb5221b265723fc356add5d06a066bc8e50e#l2482
>>>
>>
>> At what point should i give up and try re-syncing? As soon as i see
>> the invalid track number 87 (at position 451418)? It looks like that's
>> what ffmpeg does. Whereas mkvinfo does not re-sync to the next Cluster
>> at all. It somehow manages to show the other (albeit unknown/dummy
>> IDs) which i think should be the intended behavior rather than
>> resync'ing to the next Cluster.
>>
>>> _______________________________________________
>>> Matroska-devel mailing list
>>> [email protected]
>>> http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-devel
>>> Read Matroska-Devel on GMane: http://dir.gmane.org/gmane.comp.multimedia.matroska.devel
>>
>>
>>
>> --
>> Vignesh
>> _______________________________________________
>> Matroska-devel mailing list
>> [email protected]
>> http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-devel
>> Read Matroska-Devel on GMane: http://dir.gmane.org/gmane.comp.multimedia.matroska.devel
>
>
>
> --
> Steve Lhomme
> Matroska association Chairman
> _______________________________________________
> Matroska-devel mailing list
> [email protected]
> http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-devel
> Read Matroska-Devel on GMane: http://dir.gmane.org/gmane.comp.multimedia.matroska.devel



-- 
Vignesh
_______________________________________________
Matroska-devel mailing list
[email protected]
http://lists.matroska.org/cgi-bin/mailman/listinfo/matroska-devel
Read Matroska-Devel on GMane: http://dir.gmane.org/gmane.comp.multimedia.matroska.devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.