Example #1
0
        /// <summary>
        ///     Construct a <see cref="AudioTrack" /> reading information from
        ///     provided file data.
        ///     Parsing will be done reading from _file at position references by
        ///     parent element's data section.
        /// </summary>
        /// <param name="_file"><see cref="File" /> instance to read from.</param>
        /// <param name="element">Parent <see cref="EBMLreader" />.</param>
        public AudioTrack(File _file, EBMLreader element)
            : base(_file, element)
        {
            MatroskaID matroska_id;

            // Here we handle the unknown elements we know, and store the rest
            foreach (var elem in base.UnknownElements)
            {
                matroska_id = elem.ID;

                switch (matroska_id)
                {
                case MatroskaID.TrackAudio:
                {
                    ulong i = 0;

                    while (i < elem.DataSize)
                    {
                        var child = new EBMLreader(_file, elem.DataOffset + i);

                        matroska_id = child.ID;

                        switch (matroska_id)
                        {
                        case MatroskaID.AudioChannels:
                            channels = child.ReadULong();
                            break;

                        case MatroskaID.AudioBitDepth:
                            depth = child.ReadULong();
                            break;

                        case MatroskaID.AudioSamplingFreq:
                            rate = child.ReadDouble();
                            break;

                        default:
                            UnknownElements.Add(child);
                            break;
                        }

                        i += child.Size;
                    }

                    break;
                }

                default:
                    UnknownElements.Add(elem);
                    break;
                }
            }
        }
Example #2
0
        private void ReadCreateSegmentInfo(EBMLreader element, EBMLelement ebml_sinfo)
        {
            ulong i = 0;

            while (i < element.DataSize)
            {
                var child       = new EBMLreader(element, element.DataOffset + i);
                var matroska_id = child.ID;

                switch (matroska_id)
                {
                case MatroskaID.Duration:
                    duration_unscaled = child.ReadDouble();
                    if (time_scale > 0)
                    {
                        duration = TimeSpan.FromMilliseconds(duration_unscaled * time_scale / 1000000);
                    }

                    break;

                case MatroskaID.TimeCodeScale:
                    time_scale = child.ReadULong();
                    if (duration_unscaled > 0)
                    {
                        duration = TimeSpan.FromMilliseconds(duration_unscaled * time_scale / 1000000);
                    }

                    break;

                case MatroskaID.Title:
                    break;
                }

                i += child.Size;
            }
        }
Example #3
0
        /// <summary>
        ///     Constructs a <see cref="VideoTrack" /> parsing from provided
        ///     file data.
        ///     Parsing will be done reading from _file at position references by
        ///     parent element's data section.
        /// </summary>
        /// <param name="_file"><see cref="File" /> instance to read from.</param>
        /// <param name="element">Parent <see cref="EBMLreader" />.</param>
        public VideoTrack(File _file, EBMLreader element)
            : base(_file, element)
        {
            MatroskaID matroska_id;

            // Here we handle the unknown elements we know, and store the rest
            foreach (var elem in base.UnknownElements)
            {
                matroska_id = elem.ID;

                switch (matroska_id)
                {
                case MatroskaID.TrackVideo:
                {
                    ulong i = 0;

                    while (i < elem.DataSize)
                    {
                        var child = new EBMLreader(_file, elem.DataOffset + i);

                        matroska_id = child.ID;

                        switch (matroska_id)
                        {
                        case MatroskaID.VideoDisplayWidth:
                            disp_width = child.ReadULong();
                            break;

                        case MatroskaID.VideoDisplayHeight:
                            disp_height = child.ReadULong();
                            break;

                        case MatroskaID.VideoPixelWidth:
                            width = child.ReadULong();
                            break;

                        case MatroskaID.VideoPixelHeight:
                            height = child.ReadULong();
                            break;

                        case MatroskaID.VideoFrameRate:
                            framerate = child.ReadDouble();
                            break;

                        case MatroskaID.VideoFlagInterlaced:
                            interlaced = child.ReadBool();
                            break;

                        case MatroskaID.VideoAspectRatioType:
                            ratio_type = (VideoAspectRatioType)child.ReadULong();
                            break;

                        case MatroskaID.VideoColourSpace:
                            fourcc = child.ReadBytes();
                            break;

                        default:
                            UnknownElements.Add(child);
                            break;
                        }

                        i += child.Size;
                    }

                    break;
                }

                case MatroskaID.TrackDefaultDuration:
                    var tmp = elem.ReadULong();
                    framerate = 1000000000.0 / tmp;
                    break;

                default:
                    UnknownElements.Add(elem);
                    break;
                }
            }
        }