Example #1
0
        private List <(ElementDescriptor Element, ulong Position)> ReadSeekHeads(EbmlReader ebmlReader)
        {
            List <(ElementDescriptor, ulong)> availableElements = null;
            ElementDescriptor desc;
            ElementDescriptor availDesc = null;
            ulong             pos       = 0;

            ebmlReader.EnterContainer();
            while (ebmlReader.ReadNext())
            {
                if (_descriptorsMap.TryGetValue(ebmlReader.ElementId.EncodedValue, out desc))
                {
                    if (desc.Name == "Seek")
                    {
                        ebmlReader.EnterContainer();
                        try
                        {
                            while (ebmlReader.ReadNext())
                            {
                                if (_descriptorsMap.TryGetValue(ebmlReader.ElementId.EncodedValue, out desc))
                                {
                                    if (desc.Name == "SeekID")
                                    {
                                        byte[] data = new byte[ebmlReader.ElementSize];
                                        ebmlReader.ReadBinary(data, 0, data.Length);
                                        MemoryStream mem  = new MemoryStream(data);
                                        byte[]       temp = new byte[data.Length];
                                        VInt         id   = VInt.Read(mem, data.Length, temp);
                                        _descriptorsMap.TryGetValue(id.EncodedValue, out availDesc);
                                    }
                                    else if (desc.Name == "SeekPosition")
                                    {
                                        pos = ebmlReader.ReadUInt();
                                    }
                                }
                            }

                            if (availableElements == null)
                            {
                                availableElements = new List <(ElementDescriptor, ulong)>();
                            }
                            if (availDesc != null && pos > 0)
                            {
                                availableElements.Add((availDesc, pos));
                            }
                        }
                        catch { }
                    }
                    ebmlReader.LeaveContainer();
                }
            }
            ebmlReader.LeaveContainer();
            return(availableElements);
        }