示例#1
0
        internal static EditListBox load(Mp4Reader reader)
        {
            Debug.Assert(reader.currentBox == eBoxType.edts);
            foreach (eBoxType boxType in reader.readChildren())
            {
                switch (boxType)
                {
                case eBoxType.elst:
                {
                    var h      = reader.readStructure <BoxHeader>();
                    int length = h.entriesCount;
                    if (length <= 0)
                    {
                        return(null);
                    }
                    switch (h.version)
                    {
                    case 0:
                        return(load32(reader, length));

                    case 0x1000000:
                        return(load64(reader, length));
                    }
                }
                break;

                default:
                    reader.skipCurrentBox();
                    break;
                }
            }
            return(null);
        }
示例#2
0
        public ITagReader GetReader()
        {
            Mp4Reader reader   = null;
            string    fileName = _file.Name;

            if (_file.Exists)
            {
#if !SILVERLIGHT
                if (log.IsDebugEnabled)
                {
                    log.Debug("File size: " + _file.Length);
                }
#endif
                reader = new Mp4Reader(_file);
            }
            else
            {
#if !SILVERLIGHT
                log.Info("Creating new file: " + fileName);
#endif
                using (FileStream fs = _file.Create()) { }
                _file.Refresh();
                reader = new Mp4Reader(_file);
            }
            return(reader);
        }
示例#3
0
        static EditListBox load64(Mp4Reader reader, int length)
        {
            var entries = new Entry64[length];
            var bytes   = entries.AsSpan().asBytes();

            reader.read(bytes);

            Span <ulong> integers = bytes.cast <ulong>();

            for (int i = 0; i < integers.Length; i++)
            {
                integers[i] = BinaryPrimitives.ReverseEndianness(integers[i]);
            }

            int rate = reader.readStructure <int>().endian();

            return(new EditListBox(entries, rate));
        }