MpegDashTypes.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #ifndef BELL_MPEG_DASH_TYPES_H
  2. #define BELL_MPEG_DASH_TYPES_H
  3. #include <vector>
  4. #include <memory>
  5. namespace bell::mpeg
  6. {
  7. struct Tkhd
  8. {
  9. int trackId;
  10. long duration;
  11. short bVolume;
  12. int bWidth;
  13. int bHeight;
  14. std::vector<uint8_t> matrix;
  15. short bLayer;
  16. short bAlternateGroup;
  17. };
  18. struct Elst
  19. {
  20. long mediaTime;
  21. int bMediaRate;
  22. };
  23. struct Trex
  24. {
  25. int trackId;
  26. int defaultSampleDescriptionIndex;
  27. int defaultSampleDuration;
  28. int defaultSampleSize;
  29. int defaultSampleFlags;
  30. };
  31. struct Mvhd
  32. {
  33. long timeScale;
  34. long nextTrackId;
  35. };
  36. struct Hdlr
  37. {
  38. int type;
  39. int subType;
  40. std::vector<uint8_t> bReserved;
  41. };
  42. struct Minf
  43. {
  44. std::vector<uint8_t> dinf;
  45. std::vector<uint8_t> stblStsd;
  46. std::vector<uint8_t> mhd;
  47. };
  48. struct Tfhd
  49. {
  50. int bFlags;
  51. int trackId;
  52. int defaultSampleDuration;
  53. int defaultSampleSize;
  54. int defaultSampleFlags;
  55. };
  56. struct TrunEntry
  57. {
  58. int sampleDuration;
  59. int sampleSize;
  60. int sampleFlags;
  61. int sampleCompositionTimeOffset;
  62. bool hasCompositionTimeOffset;
  63. bool isKeyframe;
  64. };
  65. struct Trun
  66. {
  67. int chunkDuration;
  68. int chunkSize;
  69. int bFlags;
  70. int bFirstSampleFlags;
  71. int dataOffset;
  72. int entryCount;
  73. std::vector<uint8_t> bEntries;
  74. int entriesRowSize;
  75. };
  76. struct Traf
  77. {
  78. std::unique_ptr<Tfhd> tfhd;
  79. long tfdt = -1;
  80. std::unique_ptr<Trun> trun;
  81. };
  82. struct Moof
  83. {
  84. int mfgdSequenceNumber;
  85. std::unique_ptr<Traf> traf;
  86. };
  87. struct Chunk
  88. {
  89. std::vector<uint8_t> data = std::vector<uint8_t>();
  90. std::unique_ptr<Moof> moof;
  91. int i = 0;
  92. int size = 0;
  93. int sampleRead = 0;
  94. };
  95. struct Mp4DashSample
  96. {
  97. std::unique_ptr<TrunEntry> info;
  98. std::vector<uint8_t> data = std::vector<uint8_t>();
  99. };
  100. struct Mdia
  101. {
  102. int mhdTimeScale;
  103. std::vector<uint8_t> mdhd;
  104. std::unique_ptr<Hdlr> hdlr;
  105. std::unique_ptr<Minf> minf;
  106. };
  107. struct Trak
  108. {
  109. std::unique_ptr<Tkhd> tkhd;
  110. std::unique_ptr<Elst> edstElst;
  111. std::unique_ptr<Mdia> mdia;
  112. };
  113. struct Mp4Track
  114. {
  115. std::unique_ptr<Trak> trak;
  116. };
  117. struct Moov
  118. {
  119. std::unique_ptr<Mvhd> mvhd;
  120. std::vector<std::unique_ptr<Trak>> trak;
  121. std::vector<Trex> mvexTrex;
  122. };
  123. struct MpegBox
  124. {
  125. long size = 0;
  126. int32_t type = 0;
  127. long offset;
  128. };
  129. }
  130. #define ATOM_MOOF 0x6D6F6F66
  131. #define ATOM_MFHD 0x6D666864
  132. #define ATOM_TRAF 0x74726166
  133. #define ATOM_TFHD 0x74666864
  134. #define ATOM_TFDT 0x74666474
  135. #define ATOM_TRUN 0x7472756E
  136. #define ATOM_MDIA 0x6D646961
  137. #define ATOM_FTYP 0x66747970
  138. #define ATOM_SIDX 0x73696478
  139. #define ATOM_MOOV 0x6D6F6F76
  140. #define ATOM_MDAT 0x6D646174
  141. #define ATOM_MVHD 0x6D766864
  142. #define ATOM_TRAK 0x7472616B
  143. #define ATOM_MVEX 0x6D766578
  144. #define ATOM_TREX 0x74726578
  145. #define ATOM_TKHD 0x746B6864
  146. #define ATOM_MFRA 0x6D667261
  147. #define ATOM_MDHD 0x6D646864
  148. #define ATOM_EDTS 0x65647473
  149. #define ATOM_ELST 0x656C7374
  150. #define ATOM_HDLR 0x68646C72
  151. #define ATOM_MINF 0x6D696E66
  152. #define ATOM_DINF 0x64696E66
  153. #define ATOM_STBL 0x7374626C
  154. #define ATOM_STSD 0x73747364
  155. #define ATOM_VMHD 0x766D6864
  156. #define ATOM_SMHD 0x736D6864
  157. #endif