123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- namespace MatrixIO.IO.Bmff.Boxes
- {
- /// <summary>
- /// Track Extends Box ("trex")
- /// </summary>
- [Box("trex", "Track Extends Box")]
- public class TrackExtendsBox : FullBox
- {
- public TrackExtendsBox() : base() { }
- public TrackExtendsBox(Stream stream) : base(stream) { }
- internal override ulong CalculateSize()
- {
- return base.CalculateSize() + (5 * 4);
- }
- protected override void LoadFromStream(Stream stream)
- {
- base.LoadFromStream(stream);
- TrackID = stream.ReadBEUInt32();
- DefaultSampleDescriptionIndex = stream.ReadBEUInt32();
- DefaultSampleDuration = stream.ReadBEUInt32();
- DefaultSampleSize = stream.ReadBEUInt32();
- DefaultSampleFlags._flags = stream.ReadBEUInt32();
- }
- protected override void SaveToStream(Stream stream)
- {
- base.SaveToStream(stream);
- stream.WriteBEUInt32(TrackID);
- stream.WriteBEUInt32(DefaultSampleDescriptionIndex);
- stream.WriteBEUInt32(DefaultSampleDuration);
- stream.WriteBEUInt32(DefaultSampleSize);
- stream.WriteBEUInt32(DefaultSampleFlags._flags);
- }
- public uint TrackID { get; set; }
- public uint DefaultSampleDescriptionIndex { get; set; }
- public uint DefaultSampleDuration { get; set; }
- public uint DefaultSampleSize { get; set; }
- private SampleFlags DefaultSampleFlags = new SampleFlags();
- public byte DefaultSampleDependsOn
- {
- get
- {
- return DefaultSampleFlags.SampleDependsOn;
- }
- set
- {
- DefaultSampleFlags.SampleDependsOn = value;
- }
- }
- public byte DefaultSampleIsDependedOn
- {
- get
- {
- return DefaultSampleFlags.SampleIsDependedOn;
- }
- set
- {
- DefaultSampleFlags.SampleIsDependedOn = value;
- }
- }
- public byte DefaultSampleHasRedundancy
- {
- get
- {
- return DefaultSampleFlags.SampleHasRedundancy;
- }
- set
- {
- DefaultSampleFlags.SampleHasRedundancy = value;
- }
- }
- public byte DefaultSamplePaddingValue
- {
- get
- {
- return DefaultSampleFlags.SamplePaddingValue;
- }
- set
- {
- DefaultSampleFlags.SamplePaddingValue = value;
- }
- }
- public bool DefaultSampleIsDifferenceValue
- {
- get
- {
- return DefaultSampleFlags.SampleIsDifferenceValue;
- }
- set
- {
- DefaultSampleFlags.SampleIsDifferenceValue = value;
- }
- }
- public ushort DefaultDegredationPriority
- {
- get
- {
- return DefaultSampleFlags.DegredationPriority;
- }
- set
- {
- DefaultSampleFlags.DegredationPriority = value;
- }
- }
- }
- public class SampleFlags
- {
- internal uint _flags;
- public SampleFlags() {}
- public SampleFlags(uint value)
- {
- _flags = value;
- }
- public byte SampleDependsOn // 2 bits -- Defined in Independent and Disposable Samples Box
- {
- get
- {
- return (byte)((_flags & 0x3000000) >> 24);
- }
- set
- {
- if (value > 3) throw new ArgumentOutOfRangeException("SampleDependsOn is a 2 bit field and only accepts values 0 through 4.");
- _flags = (_flags & 0xFCFFFFFF) | (((uint)value) << 24);
- }
- }
- public byte SampleIsDependedOn // 2 bits -- Defined in Independent and Disposable Samples Box
- {
- get
- {
- return (byte)((_flags & 0x00C00000) >> 22);
- }
- set
- {
- if (value > 3) throw new ArgumentOutOfRangeException("SampleIsDependedOn is a 2 bit field and only accepts values 0 through 4.");
- _flags = (_flags & 0xFF3FFFFF) | (((uint)value) << 22);
- }
- }
- public byte SampleHasRedundancy // 2 bits -- Defined in Independent and Disposable Samples Box
- {
- get
- {
- return (byte)((_flags & 0x00300000) >> 20);
- }
- set
- {
- if (value > 3) throw new ArgumentOutOfRangeException("SampleHasRedundancy is a 2 bit field and only accepts values 0 through 4.");
- _flags = (_flags & 0xFFCFFFFF) | (((uint)value) << 20);
- }
- }
- public byte SamplePaddingValue // 3 bits -- Defined in degredation priority table
- {
- get
- {
- return (byte)((_flags & 0x000E0000) >> 17);
- }
- set
- {
- if (value > 7) throw new ArgumentOutOfRangeException("SamplePaddingValue is a 3 bit field and only accepts values 0 through 7.");
- _flags = (_flags & 0xFFF1FFFF) | (((uint)value) << 17);
- }
- }
- public bool SampleIsDifferenceValue // 1 bit
- {
- get
- {
- return (_flags & 0x00010000) == 0x00010000;
- }
- set
- {
- _flags |= 0x00010000;
- }
- }
- public ushort DegredationPriority // 16 bits
- {
- get
- {
- return (ushort)(_flags & 0x0000FFFF);
- }
- set
- {
- _flags = (_flags & 0xFFFF0000) | value;
- }
- }
- }
- }
|