fourccs.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_FORMATS_MP4_FOURCCS_H_
  5. #define MEDIA_FORMATS_MP4_FOURCCS_H_
  6. #include <string>
  7. #include "media/media_buildflags.h"
  8. namespace media {
  9. namespace mp4 {
  10. enum FourCC {
  11. FOURCC_NULL = 0,
  12. #if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
  13. FOURCC_AC3 = 0x61632d33, // "ac-3"
  14. FOURCC_EAC3 = 0x65632d33, // "ec-3"
  15. #endif
  16. #if BUILDFLAG(ENABLE_AV1_DECODER)
  17. FOURCC_AV01 = 0x61763031, // "av01"
  18. FOURCC_AV1C = 0x61763143, // "av1C"
  19. #endif
  20. FOURCC_AVC1 = 0x61766331,
  21. FOURCC_AVC3 = 0x61766333,
  22. FOURCC_AVCC = 0x61766343,
  23. FOURCC_BLOC = 0x626C6F63,
  24. FOURCC_CBCS = 0x63626373,
  25. FOURCC_CENC = 0x63656e63,
  26. FOURCC_CLLI = 0x636c6c69,
  27. FOURCC_COLL = 0x436f4c4c, // "CoLL"
  28. FOURCC_CO64 = 0x636f3634,
  29. FOURCC_COLR = 0x636f6c72,
  30. FOURCC_CTTS = 0x63747473,
  31. FOURCC_DFLA = 0x64664c61, // "dfLa"
  32. FOURCC_DINF = 0x64696e66,
  33. FOURCC_DOPS = 0x644f7073, // "dOps"
  34. #if BUILDFLAG(ENABLE_PLATFORM_DOLBY_VISION)
  35. FOURCC_DVA1 = 0x64766131,
  36. FOURCC_DVAV = 0x64766176,
  37. FOURCC_DVCC = 0x64766343,
  38. FOURCC_DVVC = 0x64767643,
  39. #if BUILDFLAG(ENABLE_PLATFORM_HEVC)
  40. FOURCC_DVH1 = 0x64766831,
  41. FOURCC_DVHE = 0x64766865,
  42. #endif
  43. #endif
  44. FOURCC_EDTS = 0x65647473,
  45. FOURCC_EMSG = 0x656d7367,
  46. FOURCC_ELST = 0x656c7374,
  47. FOURCC_ENCA = 0x656e6361,
  48. FOURCC_ENCV = 0x656e6376,
  49. FOURCC_ESDS = 0x65736473,
  50. FOURCC_FLAC = 0x664c6143, // "fLaC"
  51. FOURCC_FREE = 0x66726565,
  52. FOURCC_FRMA = 0x66726d61,
  53. FOURCC_FTYP = 0x66747970,
  54. FOURCC_HDLR = 0x68646c72,
  55. FOURCC_HINT = 0x68696e74,
  56. #if BUILDFLAG(ENABLE_PLATFORM_HEVC)
  57. FOURCC_HEV1 = 0x68657631,
  58. FOURCC_HVC1 = 0x68766331,
  59. FOURCC_HVCC = 0x68766343,
  60. #endif
  61. FOURCC_ID32 = 0x49443332,
  62. FOURCC_IODS = 0x696f6473,
  63. FOURCC_MDAT = 0x6d646174,
  64. FOURCC_MDCV = 0x6d646376,
  65. FOURCC_MDHD = 0x6d646864,
  66. FOURCC_MDIA = 0x6d646961,
  67. FOURCC_MECO = 0x6d65636f,
  68. FOURCC_MEHD = 0x6d656864,
  69. FOURCC_META = 0x6d657461,
  70. FOURCC_MFHD = 0x6d666864,
  71. FOURCC_MFRA = 0x6d667261,
  72. #if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
  73. FOURCC_MHM1 = 0x6d686d31,
  74. FOURCC_MHA1 = 0x6d686131,
  75. #endif
  76. FOURCC_MINF = 0x6d696e66,
  77. FOURCC_MOOF = 0x6d6f6f66,
  78. FOURCC_MOOV = 0x6d6f6f76,
  79. FOURCC_MP4A = 0x6d703461,
  80. FOURCC_MP4V = 0x6d703476,
  81. FOURCC_MVEX = 0x6d766578,
  82. FOURCC_MVHD = 0x6d766864,
  83. FOURCC_NCLX = 0x6e636c78,
  84. FOURCC_OPUS = 0x4f707573, // "Opus"
  85. FOURCC_PASP = 0x70617370,
  86. FOURCC_PDIN = 0x7064696e,
  87. FOURCC_PRFT = 0x70726674,
  88. FOURCC_PSSH = 0x70737368,
  89. FOURCC_SAIO = 0x7361696f,
  90. FOURCC_SAIZ = 0x7361697a,
  91. FOURCC_SBGP = 0x73626770,
  92. FOURCC_SBTL = 0x7362746c,
  93. FOURCC_SCHI = 0x73636869,
  94. FOURCC_SCHM = 0x7363686d,
  95. FOURCC_SDTP = 0x73647470,
  96. FOURCC_SEIG = 0x73656967,
  97. FOURCC_SENC = 0x73656e63,
  98. FOURCC_SGPD = 0x73677064,
  99. FOURCC_SIDX = 0x73696478,
  100. FOURCC_SINF = 0x73696e66,
  101. FOURCC_SKIP = 0x736b6970,
  102. FOURCC_SMDM = 0x536d446d, // "SmDm"
  103. FOURCC_SMHD = 0x736d6864,
  104. FOURCC_SOUN = 0x736f756e,
  105. FOURCC_SSIX = 0x73736978,
  106. FOURCC_STBL = 0x7374626c,
  107. FOURCC_STCO = 0x7374636f,
  108. FOURCC_STSC = 0x73747363,
  109. FOURCC_STSD = 0x73747364,
  110. FOURCC_STSS = 0x73747373,
  111. FOURCC_STSZ = 0x7374737a,
  112. FOURCC_STTS = 0x73747473,
  113. FOURCC_STYP = 0x73747970,
  114. FOURCC_SUBT = 0x73756274,
  115. FOURCC_TENC = 0x74656e63,
  116. FOURCC_TEXT = 0x74657874,
  117. FOURCC_TFDT = 0x74666474,
  118. FOURCC_TFHD = 0x74666864,
  119. FOURCC_TKHD = 0x746b6864,
  120. FOURCC_TRAF = 0x74726166,
  121. FOURCC_TRAK = 0x7472616b,
  122. FOURCC_TREX = 0x74726578,
  123. FOURCC_TRUN = 0x7472756e,
  124. FOURCC_UDTA = 0x75647461,
  125. FOURCC_UUID = 0x75756964,
  126. FOURCC_VIDE = 0x76696465,
  127. FOURCC_VMHD = 0x766d6864,
  128. FOURCC_VP09 = 0x76703039,
  129. FOURCC_VPCC = 0x76706343,
  130. FOURCC_WIDE = 0x77696465,
  131. #if BUILDFLAG(USE_PROPRIETARY_CODECS) && BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
  132. FOURCC_DTSC = 0x64747363, // "dtsc"
  133. FOURCC_DTSX = 0x64747378, // "dtsx"
  134. FOURCC_DDTS = 0x64647473, // "ddts"
  135. FOURCC_UDTS = 0x75647473, // "udts"
  136. #endif // BUILDFLAG(USE_PROPRIETARY_CODECS) &&
  137. // BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
  138. };
  139. const inline std::string FourCCToString(FourCC fourcc) {
  140. char buf[5];
  141. buf[0] = (fourcc >> 24) & 0xff;
  142. buf[1] = (fourcc >> 16) & 0xff;
  143. buf[2] = (fourcc >> 8) & 0xff;
  144. buf[3] = (fourcc) & 0xff;
  145. buf[4] = 0;
  146. // Return hex itself if characters can not be printed. Any character within
  147. // the "C" locale is considered printable.
  148. for (int i = 0; i < 4; ++i) {
  149. if (!(buf[i] > 0x1f && buf[i] < 0x7f)) {
  150. std::stringstream hex_string;
  151. hex_string << "0x" << std::hex << fourcc;
  152. return hex_string.str();
  153. }
  154. }
  155. return std::string(buf);
  156. }
  157. } // namespace mp4
  158. } // namespace media
  159. #endif // MEDIA_FORMATS_MP4_FOURCCS_H_