// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_FORMATS_MP4_FOURCCS_H_
#define MEDIA_FORMATS_MP4_FOURCCS_H_

#include <string>

#include "media/base/media_export.h"
#include "media/media_buildflags.h"

namespace media::mp4 {

enum FourCC {
  FOURCC_NULL = 0,
#if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
  FOURCC_AC3 = 0x61632d33,   // "ac-3"
  FOURCC_DAC3 = 0x64616333,  // "dac3"
  FOURCC_EAC3 = 0x65632d33,  // "ec-3"
  FOURCC_DEC3 = 0x64656333,  // "dec3"
#endif
#if BUILDFLAG(ENABLE_PLATFORM_AC4_AUDIO)
  FOURCC_AC4 = 0x61632d34,   // "ac-4"
  FOURCC_DAC4 = 0x64616334,  // "dac4"
#endif
  FOURCC_AV01 = 0x61763031,  // "av01"
  FOURCC_AV1C = 0x61763143,  // "av1C"
  FOURCC_AVC1 = 0x61766331,
  FOURCC_AVC3 = 0x61766333,
  FOURCC_AVCC = 0x61766343,
  FOURCC_BLOC = 0x626C6F63,
  FOURCC_BTRT = 0x62747274,
  FOURCC_CBCS = 0x63626373,
  FOURCC_CENC = 0x63656e63,
  FOURCC_CLLI = 0x636c6c69,
  FOURCC_COLL = 0x436f4c4c,  // "CoLL"
  FOURCC_CO64 = 0x636f3634,
  FOURCC_COLR = 0x636f6c72,
  FOURCC_CTTS = 0x63747473,
  FOURCC_DFLA = 0x64664c61,  // "dfLa"
  FOURCC_DINF = 0x64696e66,
  FOURCC_DOPS = 0x644f7073,  // "dOps"
  FOURCC_DVA1 = 0x64766131,
  FOURCC_DVAV = 0x64766176,
  FOURCC_DVCC = 0x64766343,
  FOURCC_DVVC = 0x64767643,
#if BUILDFLAG(ENABLE_PLATFORM_HEVC)
  FOURCC_DVH1 = 0x64766831,
  FOURCC_DVHE = 0x64766865,
#endif
  FOURCC_DAV1 = 0x64617631,
  FOURCC_DREF = 0x64726566,
  FOURCC_EDTS = 0x65647473,
  FOURCC_EMSG = 0x656d7367,
  FOURCC_ELST = 0x656c7374,
  FOURCC_ENCA = 0x656e6361,
  FOURCC_ENCV = 0x656e6376,
  FOURCC_ESDS = 0x65736473,
  FOURCC_FLAC = 0x664c6143,  // "fLaC"
  FOURCC_FREE = 0x66726565,
  FOURCC_FRMA = 0x66726d61,
  FOURCC_FTYP = 0x66747970,
  FOURCC_HDLR = 0x68646c72,
  FOURCC_HINT = 0x68696e74,
#if BUILDFLAG(ENABLE_PLATFORM_HEVC)
  FOURCC_HEV1 = 0x68657631,
  FOURCC_HVC1 = 0x68766331,
  FOURCC_HVCC = 0x68766343,
#endif
#if BUILDFLAG(ENABLE_PLATFORM_IAMF_AUDIO) || BUILDFLAG(ENABLE_IAMF_TOOLS)
  FOURCC_IACB = 0x69616362,
  FOURCC_IAMF = 0x69616d66,
#endif  // BUILDFLAG(ENABLE_PLATFORM_IAMF_AUDIO) || ...
  FOURCC_ID32 = 0x49443332,
  FOURCC_IODS = 0x696f6473,
  FOURCC_ISO2 = 0x69736f32,
  FOURCC_ISO6 = 0x69736f36,
  FOURCC_ISOM = 0x69736f6d,
  FOURCC_IT35 = 0x69743335,
  FOURCC_MDAT = 0x6d646174,
  FOURCC_MDCV = 0x6d646376,
  FOURCC_MDHD = 0x6d646864,
  FOURCC_MDIA = 0x6d646961,
  FOURCC_MECO = 0x6d65636f,
  FOURCC_MEHD = 0x6d656864,
  FOURCC_META = 0x6d657461,
  FOURCC_MFHD = 0x6d666864,
  FOURCC_MFRA = 0x6d667261,
  FOURCC_MFRO = 0x6d66726f,
#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
  FOURCC_MHM1 = 0x6d686d31,
  FOURCC_MHA1 = 0x6d686131,
#endif
  FOURCC_MINF = 0x6d696e66,
  FOURCC_MOOF = 0x6d6f6f66,
  FOURCC_MOOV = 0x6d6f6f76,
  FOURCC_MP41 = 0x6d703431,
  FOURCC_MP4A = 0x6d703461,
  FOURCC_MP4V = 0x6d703476,
  FOURCC_MVEX = 0x6d766578,
  FOURCC_MVHD = 0x6d766864,
  FOURCC_NCLX = 0x6e636c78,
  FOURCC_OPUS = 0x4f707573,  // "Opus"
  FOURCC_PASP = 0x70617370,
  FOURCC_PDIN = 0x7064696e,
  FOURCC_PRFT = 0x70726674,
  FOURCC_PSSH = 0x70737368,
  FOURCC_RNDR = 0x726e6472,
  FOURCC_SAIO = 0x7361696f,
  FOURCC_SAIZ = 0x7361697a,
  FOURCC_SBGP = 0x73626770,
  FOURCC_SBTL = 0x7362746c,
  FOURCC_SCHI = 0x73636869,
  FOURCC_SCHM = 0x7363686d,
  FOURCC_SDTP = 0x73647470,
  FOURCC_SEIG = 0x73656967,
  FOURCC_SENC = 0x73656e63,
  FOURCC_SGPD = 0x73677064,
  FOURCC_SIDX = 0x73696478,
  FOURCC_SINF = 0x73696e66,
  FOURCC_SKIP = 0x736b6970,
  FOURCC_SMDM = 0x536d446d,  // "SmDm"
  FOURCC_SMHD = 0x736d6864,
  FOURCC_SOUN = 0x736f756e,
  FOURCC_SSIX = 0x73736978,
  FOURCC_STBL = 0x7374626c,
  FOURCC_STCO = 0x7374636f,
  FOURCC_STSC = 0x73747363,
  FOURCC_STSD = 0x73747364,
  FOURCC_STSS = 0x73747373,
  FOURCC_STSZ = 0x7374737a,
  FOURCC_STTS = 0x73747473,
  FOURCC_STYP = 0x73747970,
  FOURCC_SUBT = 0x73756274,
  FOURCC_TENC = 0x74656e63,
  FOURCC_TEXT = 0x74657874,
  FOURCC_TFDT = 0x74666474,
  FOURCC_TFRA = 0x74667261,
  FOURCC_TFHD = 0x74666864,
  FOURCC_TKHD = 0x746b6864,
  FOURCC_TRAF = 0x74726166,
  FOURCC_TRAK = 0x7472616b,
  FOURCC_TREX = 0x74726578,
  FOURCC_TREF = 0x74726566,
  FOURCC_TRUN = 0x7472756e,
  FOURCC_UDTA = 0x75647461,
  FOURCC_URL = 0x75726c20,  // "url "
  FOURCC_UUID = 0x75756964,
  FOURCC_VIDE = 0x76696465,
  FOURCC_VMHD = 0x766d6864,
  FOURCC_VP09 = 0x76703039,
  FOURCC_VPCC = 0x76706343,
  FOURCC_WIDE = 0x77696465,
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
  FOURCC_DTSC = 0x64747363,  // "dtsc"
  FOURCC_DTSE = 0x64747365,  // "dtse"
  FOURCC_DTSX = 0x64747378,  // "dtsx"
  FOURCC_DDTS = 0x64647473,  // "ddts"
  FOURCC_UDTS = 0x75647473,  // "udts"
#endif                       // BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
  FOURCC_ST3D = 0x73743364,  // "st3d"
  FOURCC_SV3D = 0x73763364,  // "sv3d"
  FOURCC_SVHD = 0x73766864,  // "svhd"
  FOURCC_PROJ = 0x70726f6a,  // "proj"
  FOURCC_PRHD = 0x70726864,  // "prhd"
  FOURCC_EQUI = 0x65717569,  // "equi"
  FOURCC_CBMP = 0x63626d70,  // "cbmp"
  FOURCC_MSHP = 0x6d736870,  // "mshp"
  FOURCC_YTMP = 0x79746d70,  // "ytmp"
  FOURCC_MESH = 0x6d657368,  // "mesh"
  FOURCC_DFL8 = 0x64666c38,  // "dfl8"
  FOURCC_RAW = 0x72617720,   // "raw "
};

MEDIA_EXPORT std::string FourCCToString(FourCC fourcc);

}  // namespace media::mp4

#endif  // MEDIA_FORMATS_MP4_FOURCCS_H_
