FullBox.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Collections;
  7. namespace MatrixIO.IO.Bmff
  8. {
  9. public abstract class FullBox : Box
  10. {
  11. public byte Version { get; set; }
  12. protected uint _Flags;
  13. public BitArray Flags
  14. {
  15. get
  16. {
  17. byte[] flagBytes32 = BitConverter.GetBytes(_Flags.HostToNetworkOrder());
  18. byte[] flagBytes24 = new byte[3];
  19. Buffer.BlockCopy(flagBytes32, 1, flagBytes24, 0, 3);
  20. return new BitArray(flagBytes24);
  21. }
  22. }
  23. protected FullBox() : this(0) { }
  24. protected FullBox(byte version, uint flags = 0) : base()
  25. {
  26. if ((flags & 0xFF000000) > 0) throw new FormatException("Box flags must be 24 bits.");
  27. Version = version;
  28. _Flags = flags;
  29. }
  30. protected FullBox(Stream stream) : base(stream) { }
  31. internal override ulong CalculateSize()
  32. {
  33. return base.CalculateSize() + 4;
  34. }
  35. protected override void LoadFromStream(Stream stream)
  36. {
  37. base.LoadFromStream(stream);
  38. Version = stream.ReadOneByte();
  39. _Flags = stream.ReadBEUInt24();
  40. }
  41. protected override void SaveToStream(Stream stream)
  42. {
  43. base.SaveToStream(stream);
  44. stream.WriteOneByte(Version);
  45. stream.WriteBEUInt24(_Flags);
  46. }
  47. }
  48. }