// Copyright 2014 The Chromium Authors. All rights reserved.
// 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/media_buildflags.h"

namespace media {
namespace mp4 {

enum FourCC {
  FOURCC_NULL = 0,
#if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
  FOURCC_AC3 = 0x61632d33,   // "ac-3"
  FOURCC_EAC3 = 0x65632d33,  // "ec-3"
#endif
#if BUILDFLAG(ENABLE_AV1_DECODER)
  FOURCC_AV01 = 0x61763031,  // "av01"
  FOURCC_AV1C = 0x61763143,  // "av1C"
#endif
  FOURCC_AVC1 = 0x61766331,
  FOURCC_AVC3 = 0x61766333,
  FOURCC_AVCC = 0x61766343,
  FOURCC_BLOC = 0x626C6F63,
  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"
#if BUILDFLAG(ENABLE_PLATFORM_DOLBY_VISION)
  FOURCC_DVA1 = 0x64766131,
  FOURCC_DVAV = 0x64766176,
  FOURCC_DVCC = 0x64766343,
  FOURCC_DVVC = 0x64767643,
#if BUILDFLAG(ENABLE_PLATFORM_HEVC)
  FOURCC_DVH1 = 0x64766831,
  FOURCC_DVHE = 0x64766865,
#endif
#endif
  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
  FOURCC_ID32 = 0x49443332,
  FOURCC_IODS = 0x696f6473,
  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,
#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
  FOURCC_MHM1 = 0x6d686d31,
  FOURCC_MHA1 = 0x6d686131,
#endif
  FOURCC_MINF = 0x6d696e66,
  FOURCC_MOOF = 0x6d6f6f66,
  FOURCC_MOOV = 0x6d6f6f76,
  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_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_TFHD = 0x74666864,
  FOURCC_TKHD = 0x746b6864,
  FOURCC_TRAF = 0x74726166,
  FOURCC_TRAK = 0x7472616b,
  FOURCC_TREX = 0x74726578,
  FOURCC_TRUN = 0x7472756e,
  FOURCC_UDTA = 0x75647461,
  FOURCC_UUID = 0x75756964,
  FOURCC_VIDE = 0x76696465,
  FOURCC_VMHD = 0x766d6864,
  FOURCC_VP09 = 0x76703039,
  FOURCC_VPCC = 0x76706343,
  FOURCC_WIDE = 0x77696465,
};

const inline std::string FourCCToString(FourCC fourcc) {
  char buf[5];
  buf[0] = (fourcc >> 24) & 0xff;
  buf[1] = (fourcc >> 16) & 0xff;
  buf[2] = (fourcc >> 8) & 0xff;
  buf[3] = (fourcc) & 0xff;
  buf[4] = 0;

  // Return hex itself if characters can not be printed. Any character within
  // the "C" locale is considered printable.
  for (int i = 0; i < 4; ++i) {
    if (!(buf[i] > 0x1f && buf[i] < 0x7f)) {
      std::stringstream hex_string;
      hex_string << "0x" << std::hex << fourcc;
      return hex_string.str();
    }
  }

  return std::string(buf);
}

}  // namespace mp4
}  // namespace media

#endif  // MEDIA_FORMATS_MP4_FOURCCS_H_
