DataReferenceBox.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Diagnostics;
  7. namespace MatrixIO.IO.Bmff.Boxes
  8. {
  9. /// <summary>
  10. /// Data Reference Box ("dref")
  11. /// </summary>
  12. [Box("dref", "Data Reference Box")]
  13. public class DataReferenceBox : FullBox, ISuperBox
  14. {
  15. public DataReferenceBox() : base() { }
  16. public DataReferenceBox(Stream stream) : base(stream) { }
  17. internal override ulong CalculateSize()
  18. {
  19. return base.CalculateSize() + 4;
  20. }
  21. protected override void LoadFromStream(Stream stream)
  22. {
  23. base.LoadFromStream(stream);
  24. _EntryCount = stream.ReadBEUInt32();
  25. }
  26. protected override void SaveToStream(Stream stream)
  27. {
  28. base.SaveToStream(stream);
  29. stream.WriteBEUInt32((uint)_Children.Count);
  30. }
  31. protected override void LoadChildrenFromStream(Stream stream)
  32. {
  33. base.LoadChildrenFromStream(stream);
  34. if (_EntryCount != _Children.Count) Trace.WriteLine("DataReferenceBox's EntryCount didn't match the number of children we read.", "WARNING");
  35. }
  36. private uint _EntryCount;
  37. private IList<Box> _Children = Portability.CreateList<Box>();
  38. public IList<Box> Children
  39. {
  40. get { return _Children; }
  41. }
  42. public IEnumerator<Box> GetEnumerator()
  43. {
  44. return Children.GetEnumerator();
  45. }
  46. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
  47. {
  48. return Children.GetEnumerator();
  49. }
  50. }
  51. }