You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 rivejä
1.9 KiB

  1. using JT1078.FMp4.Interfaces;
  2. using JT1078.FMp4.MessagePack;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. namespace JT1078.FMp4
  7. {
  8. /// <summary>
  9. /// ctts
  10. /// </summary>
  11. public class CompositionOffsetBox : FullBox, IFMp4MessagePackFormatter
  12. {
  13. /// <summary>
  14. /// ctts
  15. /// </summary>
  16. /// <param name="version"></param>
  17. /// <param name="flags"></param>
  18. public CompositionOffsetBox(byte version=0, uint flags=0) : base("ctts", version, flags)
  19. {
  20. }
  21. public uint EntryCount { get; set; }
  22. public List<CompositionOffsetInfo> CompositionOffsetInfos { get; set; }
  23. public void ToBuffer(ref FMp4MessagePackWriter writer)
  24. {
  25. Start(ref writer);
  26. WriterFullBoxToBuffer(ref writer);
  27. if(CompositionOffsetInfos!=null && CompositionOffsetInfos.Count > 0)
  28. {
  29. writer.WriteUInt32((uint)CompositionOffsetInfos.Count);
  30. foreach(var item in CompositionOffsetInfos)
  31. {
  32. if (Version == 0)
  33. {
  34. writer.WriteUInt32(item.SampleCount);
  35. writer.WriteUInt32(item.SampleOffset);
  36. }
  37. else
  38. {
  39. writer.WriteUInt32(item.SampleCount);
  40. writer.WriteInt32(item.SignedSampleOffset);
  41. }
  42. }
  43. }
  44. else
  45. {
  46. writer.WriteUInt32(0);
  47. }
  48. End(ref writer);
  49. }
  50. public class CompositionOffsetInfo
  51. {
  52. public uint SampleCount { get; set; }
  53. public uint SampleOffset { get; set; }
  54. /// <summary>
  55. /// version == 1
  56. /// </summary>
  57. public int SignedSampleOffset { get; set; }
  58. }
  59. }
  60. }