protected override void ReadFullBoxPropertiesFromStream(BoxBinaryReader reader) { this.ReferenceId = reader.ReadUInt32(); this.Timescale = reader.ReadUInt32(); if (this.Version == 1) { this.EarliestPresentationTime = reader.ReadUInt64(); this.FirstOffset = reader.ReadUInt64(); } else { this.EarliestPresentationTime = reader.ReadUInt32(); this.FirstOffset = reader.ReadUInt32(); } this.Reserved = reader.ReadUInt16(); this.ReferenceCount = reader.ReadUInt16(); Subsegments = new List <Subsegment>(); for (int i = 0; i < this.ReferenceCount; i++) { var subsegment = new Subsegment(); uint referenceNum = reader.ReadUInt32(); subsegment.ReferenceType = System.Convert.ToBoolean(referenceNum >> 31); // 1 bit subsegment.ReferencedSize = (referenceNum << 1) >> 1; // 31 bits subsegment.Duration = reader.ReadUInt32(); uint sapNum = reader.ReadUInt32(); subsegment.StartsWithSAP = System.Convert.ToBoolean(sapNum >> 31); // 1 bit subsegment.SAPType = System.Convert.ToUInt16((sapNum << 1) >> 29); // 3 bits subsegment.SAPDeltaTime = (sapNum << 4) >> 4; // 28 bits Subsegments.Add(subsegment); } reader.GotoEndOfBox(Offset, Size); }
protected override void ReadFullBoxPropertiesFromStream(BoxBinaryReader reader) { this.ReferenceId = reader.ReadUInt32(); this.Timescale = reader.ReadUInt32(); if (this.Version == 1) { this.EarliestPresentationTime = reader.ReadUInt64(); this.FirstOffset = reader.ReadUInt64(); } else { this.EarliestPresentationTime = reader.ReadUInt32(); this.FirstOffset = reader.ReadUInt32(); } this.Reserved = reader.ReadUInt16(); this.ReferenceCount = reader.ReadUInt16(); Subsegments = new List<Subsegment>(); for (int i = 0; i < this.ReferenceCount; i++) { var subsegment = new Subsegment(); uint referenceNum = reader.ReadUInt32(); subsegment.ReferenceType = System.Convert.ToBoolean(referenceNum >> 31); // 1 bit subsegment.ReferencedSize = (referenceNum << 1) >> 1; // 31 bits subsegment.Duration = reader.ReadUInt32(); uint sapNum = reader.ReadUInt32(); subsegment.StartsWithSAP = System.Convert.ToBoolean(sapNum >> 31); // 1 bit subsegment.SAPType = System.Convert.ToUInt16((sapNum << 1) >> 29); // 3 bits subsegment.SAPDeltaTime = (sapNum << 4) >> 4; // 28 bits Subsegments.Add(subsegment); } reader.GotoEndOfBox(Offset, Size); }