public MovieExtendsBox(MovieMetadataBox inParent, List <IsochronousTrackInfo> trackInfos) : this(inParent) { MovieExtendsHeaderBox = new MovieExtendsHeaderBox((uint)0); // initial duration should be zero. prev: trackInfos[0].MovieDuration); this.Size += MovieExtendsHeaderBox.Size; if (TrackExtendBoxes == null) { TrackExtendBoxes = new TrackExtendsBox[trackInfos.Count]; } //TrackBox[] tracks = parent.TrackBoxes; int i = 0; foreach (IsochronousTrackInfo tri in trackInfos) { if (tri.GetType() == typeof(RawAudioTrackInfo)) { RawAudioTrackInfo rati = (RawAudioTrackInfo)tri; TrackExtendBoxes[i] = new TrackExtendsBox((uint)(i + 1), 1, 0, 0, 0); // trackID for audio is 1, sample description index within audio track is 1 this.Size += TrackExtendBoxes[i].Size; } else if (tri.GetType() == typeof(RawVideoTrackInfo)) { RawVideoTrackInfo rvti = (RawVideoTrackInfo)tri; TrackExtendBoxes[i] = new TrackExtendsBox((uint)(i + 1), 1, 0, 0, 0); // trackID for video is 2, sample description index within video track is 1 this.Size += TrackExtendBoxes[i].Size; } i++; } }
public MovieExtendsBox(MovieMetadataBox inParent, List<IsochronousTrackInfo> trackInfos) : this(inParent) { MovieExtendsHeaderBox = new MovieExtendsHeaderBox((uint)0); // initial duration should be zero. prev: trackInfos[0].MovieDuration); this.Size += MovieExtendsHeaderBox.Size; if (TrackExtendBoxes == null) TrackExtendBoxes = new TrackExtendsBox[trackInfos.Count]; //TrackBox[] tracks = parent.TrackBoxes; int i = 0; foreach (IsochronousTrackInfo tri in trackInfos) { if (tri.GetType() == typeof(RawAudioTrackInfo)) { RawAudioTrackInfo rati = (RawAudioTrackInfo)tri; TrackExtendBoxes[i] = new TrackExtendsBox((uint)(i + 1), 1, 0, 0, 0); // trackID for audio is 1, sample description index within audio track is 1 this.Size += TrackExtendBoxes[i].Size; } else if (tri.GetType() == typeof(RawVideoTrackInfo)) { RawVideoTrackInfo rvti = (RawVideoTrackInfo)tri; TrackExtendBoxes[i] = new TrackExtendsBox((uint)(i + 1), 1, 0, 0, 0); // trackID for video is 2, sample description index within video track is 1 this.Size += TrackExtendBoxes[i].Size; } i++; } }
public override void Write(BoxWriter writer) { using (new SizeCalculator(this, writer)) { base.Write(writer); if (MovieExtendsHeaderBox != null) { MovieExtendsHeaderBox.Write(writer); } foreach (TrackExtendsBox teb in TrackExtendBoxes) { teb.Write(writer); } } }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); // Apple either omits the header, or puts it after the TrackExtendBoxes BoxType boxType = reader.PeekNextBoxType(); if (boxType == BoxTypes.MovieExtendsHeader) { MovieExtendsHeaderBox = new MovieExtendsHeaderBox(); MovieExtendsHeaderBox.Read(reader); } // Apple puts the MovieExtendsBoxes BEFORE TrackBoxes, so TrackBoxes may be NULL below. if (parent.TrackBoxes != null) { TrackExtendBoxes = new TrackExtendsBox[parent.TrackBoxes.Length]; for (int i = 0; i < parent.TrackBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } else { // get the size of a TrackExtendsBox, then use that to determine the size of the array Box test = new Box(BoxTypes.Any); test.Read(reader); reader.BaseStream.Position = (long)test.Offset; if (MovieExtendsHeaderBox == null) { TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8) / test.Size]; } else { TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8 - MovieExtendsHeaderBox.Size) / test.Size]; } for (int i = 0; i < TrackExtendBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } } }
public override string ToString() { StringBuilder xml = new StringBuilder(); xml.Append(base.ToString()); if (MovieExtendsHeaderBox != null) { xml.Append(MovieExtendsHeaderBox.ToString()); } xml.Append("<TrackExtendBoxes>"); for (int i = 0; i < TrackExtendBoxes.Length; i++) { xml.Append(TrackExtendBoxes[i].ToString()); } xml.Append("</TrackExtendBoxes>"); xml.Append("</box>"); return(xml.ToString()); }
public override void Read(BoxReader reader) { using (new SizeChecker(this, reader)) { base.Read(reader); // Apple either omits the header, or puts it after the TrackExtendBoxes BoxType boxType = reader.PeekNextBoxType(); if (boxType == BoxTypes.MovieExtendsHeader) { MovieExtendsHeaderBox = new MovieExtendsHeaderBox(); MovieExtendsHeaderBox.Read(reader); } // Apple puts the MovieExtendsBoxes BEFORE TrackBoxes, so TrackBoxes may be NULL below. if (parent.TrackBoxes != null) { TrackExtendBoxes = new TrackExtendsBox[parent.TrackBoxes.Length]; for (int i = 0; i < parent.TrackBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } else { // get the size of a TrackExtendsBox, then use that to determine the size of the array Box test = new Box(BoxTypes.Any); test.Read(reader); reader.BaseStream.Position = (long)test.Offset; if (MovieExtendsHeaderBox == null) TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8) / test.Size]; else TrackExtendBoxes = new TrackExtendsBox[(this.Size - 8 - MovieExtendsHeaderBox.Size) / test.Size]; for (int i = 0; i < TrackExtendBoxes.Length; i++) { TrackExtendBoxes[i] = new TrackExtendsBox(); TrackExtendBoxes[i].Read(reader); } } } }