package format

import (
	"github.com/wader/fq/pkg/scalar"
)

// based on ffmpeg libavformat/isom.c ff_mp4_obj_type
const (
	MPEGObjectTypeMOV_TEXT          = 0x08
	MPEGObjectTypeMPEG4             = 0x20
	MPEGObjectTypeH264              = 0x21
	MPEGObjectTypeHEVC              = 0x23
	MPEGObjectTypeAAC               = 0x40
	MPEGObjectTypeMPEG2VideoMain    = 0x61 /* MPEG-2 Main */
	MPEGObjectTypeMPEG2VideoSimple  = 0x60 /* MPEG-2 Simple */
	MPEGObjectTypeMPEG2VideoSNR     = 0x62 /* MPEG-2 SNR */
	MPEGObjectTypeMPEG2VideoSpatial = 0x63 /* MPEG-2 Spatial */
	MPEGObjectTypeMPEG2VideoHigh    = 0x64 /* MPEG-2 High */
	MPEGObjectTypeMPEG2Video422     = 0x65 /* MPEG-2 422 */
	MPEGObjectTypeAACMain           = 0x66 /* MPEG-2 AAC Main */
	MPEGObjectTypeAACLow            = 0x67 /* MPEG-2 AAC Low */
	MPEGObjectTypeAACSSR            = 0x68 /* MPEG-2 AAC SSR */
	MPEGObjectTypeMP32MP3           = 0x69 /* 13818-3 */
	MPEGObjectTypeMPEG1VIDEO        = 0x6a /* 11172-2 */
	MPEGObjectTypeMP3               = 0x6b /* 11172-3 */
	MPEGObjectTypeMJPEG             = 0x6c /* 10918-1 */
	MPEGObjectTypePNG               = 0x6d
	MPEGObjectTypeJPEG2000          = 0x6e /* 15444-1 */
	MPEGObjectTypeVC1               = 0xa3
	MPEGObjectTypeDIRAC             = 0xa4
	MPEGObjectTypeAC3               = 0xa5
	MPEGObjectTypeEAC3              = 0xa6
	MPEGObjectTypeDTS               = 0xa9 /* mp4ra.org */
	MPEGObjectTypeOPUS              = 0xad /* mp4ra.org */
	MPEGObjectTypeVP9               = 0xb1 /* mp4ra.org */
	MPEGObjectTypeFLAC              = 0xc1 /* nonstandard, update when there is a standard value */
	MPEGObjectTypeTSCC2             = 0xd0 /* nonstandard, camtasia uses it */
	MPEGObjectTypeEVRC              = 0xd1 /* nonstandard, pvAuthor uses it */
	MPEGObjectTypeVORBIS            = 0xdd /* nonstandard, gpac uses it */
	MPEGObjectTypeDVDSubtitle       = 0xe0 /* nonstandard, see unsupported-embedded-subs-2.mp4 */
	MPEGObjectTypeQCELP             = 0xe1
	MPEGObjectTypeMPEG4SYSTEMS1     = 0x01
	MPEGObjectTypeMPEG4SYSTEMS2     = 0x02
	MPEGObjectTypeNONE              = 0
)

var MpegObjectTypeNames = scalar.UintMapSymStr{
	MPEGObjectTypeMOV_TEXT:          "MPEGObjectTypeMOV_TEXT",
	MPEGObjectTypeMPEG4:             "MPEGObjectTypeMPEG4",
	MPEGObjectTypeH264:              "MPEGObjectTypeH264",
	MPEGObjectTypeHEVC:              "MPEGObjectTypeHEVC",
	MPEGObjectTypeAAC:               "MPEGObjectTypeAAC",
	MPEGObjectTypeMPEG2VideoMain:    "MPEGObjectTypeMPEG2VideoMain",
	MPEGObjectTypeMPEG2VideoSimple:  "MPEGObjectTypeMPEG2VideoSimple",
	MPEGObjectTypeMPEG2VideoSNR:     "MPEGObjectTypeMPEG2VideoSNR",
	MPEGObjectTypeMPEG2VideoSpatial: "MPEGObjectTypeMPEG2VideoSpatial",
	MPEGObjectTypeMPEG2VideoHigh:    "MPEGObjectTypeMPEG2VideoHigh",
	MPEGObjectTypeMPEG2Video422:     "MPEGObjectTypeMPEG2Video422",
	MPEGObjectTypeAACMain:           "MPEGObjectTypeAACMain",
	MPEGObjectTypeAACLow:            "MPEGObjectTypeAACLow",
	MPEGObjectTypeAACSSR:            "MPEGObjectTypeAACSSR",
	MPEGObjectTypeMP32MP3:           "MPEGObjectTypeMP32MP3",
	MPEGObjectTypeMPEG1VIDEO:        "MPEGObjectTypeMPEG1VIDEO",
	MPEGObjectTypeMP3:               "MPEGObjectTypeMP3",
	MPEGObjectTypeMJPEG:             "MPEGObjectTypeMJPEG",
	MPEGObjectTypePNG:               "MPEGObjectTypePNG",
	MPEGObjectTypeJPEG2000:          "MPEGObjectTypeJPEG2000",
	MPEGObjectTypeVC1:               "MPEGObjectTypeVC1",
	MPEGObjectTypeDIRAC:             "MPEGObjectTypeDIRAC",
	MPEGObjectTypeAC3:               "MPEGObjectTypeAC3",
	MPEGObjectTypeEAC3:              "MPEGObjectTypeEAC3",
	MPEGObjectTypeDTS:               "MPEGObjectTypeDTS",
	MPEGObjectTypeOPUS:              "MPEGObjectTypeOPUS",
	MPEGObjectTypeVP9:               "MPEGObjectTypeVP9",
	MPEGObjectTypeFLAC:              "MPEGObjectTypeFLAC",
	MPEGObjectTypeTSCC2:             "MPEGObjectTypeTSCC2",
	MPEGObjectTypeEVRC:              "MPEGObjectTypeEVRC",
	MPEGObjectTypeVORBIS:            "MPEGObjectTypeVORBIS",
	MPEGObjectTypeDVDSubtitle:       "MPEGObjectTypeDVDSubtitle",
	MPEGObjectTypeQCELP:             "MPEGObjectTypeQCELP",
	MPEGObjectTypeMPEG4SYSTEMS1:     "MPEGObjectTypeMPEG4SYSTEMS1",
	MPEGObjectTypeMPEG4SYSTEMS2:     "MPEGObjectTypeMPEG4SYSTEMS2",
	MPEGObjectTypeNONE:              "MPEGObjectTypeNONE",
}

const (
	MPEGStreamTypeUnknown = iota
	MPEGStreamTypeVideo
	MPEGStreamTypeAudio
	MPEGStreamTypeText
)

var MpegObjectTypeStreamType = map[uint64]int{
	MPEGObjectTypeMOV_TEXT:          MPEGStreamTypeText,
	MPEGObjectTypeMPEG4:             MPEGStreamTypeVideo,
	MPEGObjectTypeH264:              MPEGStreamTypeVideo,
	MPEGObjectTypeHEVC:              MPEGStreamTypeVideo,
	MPEGObjectTypeAAC:               MPEGStreamTypeAudio,
	MPEGObjectTypeMPEG2VideoMain:    MPEGStreamTypeVideo,
	MPEGObjectTypeMPEG2VideoSimple:  MPEGStreamTypeVideo,
	MPEGObjectTypeMPEG2VideoSNR:     MPEGStreamTypeVideo,
	MPEGObjectTypeMPEG2VideoSpatial: MPEGStreamTypeVideo,
	MPEGObjectTypeMPEG2VideoHigh:    MPEGStreamTypeVideo,
	MPEGObjectTypeMPEG2Video422:     MPEGStreamTypeVideo,
	MPEGObjectTypeAACMain:           MPEGStreamTypeAudio,
	MPEGObjectTypeAACLow:            MPEGStreamTypeAudio,
	MPEGObjectTypeAACSSR:            MPEGStreamTypeAudio,
	MPEGObjectTypeMP32MP3:           MPEGStreamTypeAudio,
	MPEGObjectTypeMPEG1VIDEO:        MPEGStreamTypeVideo,
	MPEGObjectTypeMP3:               MPEGStreamTypeAudio,
	MPEGObjectTypeMJPEG:             MPEGStreamTypeVideo,
	MPEGObjectTypePNG:               MPEGStreamTypeVideo,
	MPEGObjectTypeJPEG2000:          MPEGStreamTypeVideo,
	MPEGObjectTypeVC1:               MPEGStreamTypeVideo,
	MPEGObjectTypeDIRAC:             MPEGStreamTypeVideo,
	MPEGObjectTypeAC3:               MPEGStreamTypeAudio,
	MPEGObjectTypeEAC3:              MPEGStreamTypeAudio,
	MPEGObjectTypeDTS:               MPEGStreamTypeAudio,
	MPEGObjectTypeOPUS:              MPEGStreamTypeAudio,
	MPEGObjectTypeVP9:               MPEGStreamTypeAudio,
	MPEGObjectTypeFLAC:              MPEGStreamTypeAudio,
	MPEGObjectTypeTSCC2:             MPEGStreamTypeVideo,
	MPEGObjectTypeEVRC:              MPEGStreamTypeAudio,
	MPEGObjectTypeVORBIS:            MPEGStreamTypeAudio,
	MPEGObjectTypeDVDSubtitle:       MPEGStreamTypeText,
	MPEGObjectTypeQCELP:             MPEGStreamTypeAudio,
	MPEGObjectTypeMPEG4SYSTEMS1:     MPEGStreamTypeUnknown,
	MPEGObjectTypeMPEG4SYSTEMS2:     MPEGStreamTypeUnknown,
	MPEGObjectTypeNONE:              MPEGStreamTypeUnknown,
}

const (
	MPEGAudioObjectTypeMain      = 1
	MPEGAudioObjectTypeLC        = 2
	MPEGAudioObjectTypeSSR       = 3
	MPEGAudioObjectTypeLTP       = 4
	MPEGAudioObjectTypeSBR       = 5
	MPEGAudioObjectTypeER_AAC_LD = 23
	MPEGAudioObjectTypePS        = 29
)

var MPEGAudioObjectTypeNames = scalar.UintMap{
	0:                            {Sym: "mull", Description: "Null"},
	MPEGAudioObjectTypeMain:      {Sym: "aac_main", Description: "AAC Main"},
	MPEGAudioObjectTypeLC:        {Sym: "aac_lc", Description: "AAC Low Complexity"},
	MPEGAudioObjectTypeSSR:       {Sym: "aac_ssr", Description: "AAC Scalable Sample Rate"},
	MPEGAudioObjectTypeLTP:       {Sym: "aac_ltp", Description: "AAC Long Term Prediction"},
	MPEGAudioObjectTypeSBR:       {Sym: "sbr", Description: "Spectral Band Replication"},
	6:                            {Sym: "aac_scalable", Description: "AAC Scalable"},
	7:                            {Sym: "twinvq", Description: "TwinVQ"},
	8:                            {Sym: "celp", Description: "Code Excited Linear Prediction"},
	9:                            {Sym: "hxvc", Description: "Harmonic Vector eXcitation Coding"},
	10:                           {Sym: "reserved", Description: "Reserved"},
	11:                           {Sym: "reserved", Description: "Reserved"},
	12:                           {Sym: "ttsi", Description: "TTSI (Text-To-Speech Interface)"},
	13:                           {Sym: "main_synthesis", Description: "Main Synthesis"},
	14:                           {Sym: "wavetable_synthesis", Description: "Wavetable Synthesis"},
	15:                           {Sym: "general_midi", Description: "General MIDI"},
	16:                           {Sym: "algorithmic", Description: "Algorithmic Synthesis and Audio Effects"},
	17:                           {Sym: "er_aac_lc", Description: "Error Resilient AAC LC"},
	18:                           {Sym: "reserved", Description: "Reserved"},
	19:                           {Sym: "er_aac_ltp", Description: "ER AAC LTP"},
	20:                           {Sym: "er_aac_Scalable", Description: "ER AAC Scalable"},
	21:                           {Sym: "er_twinvq", Description: "ER TwinVQ"},
	22:                           {Sym: "er_bsac", Description: "ER BSAC Bit-Sliced Arithmetic Coding"},
	MPEGAudioObjectTypeER_AAC_LD: {Sym: "er_aac_ld", Description: "ER AAC LD Low Delay"},
	24:                           {Sym: "er_celp", Description: "ER CELP"},
	25:                           {Sym: "er_hvxc", Description: "ER HVXC"},
	26:                           {Sym: "er_hiln", Description: "ER HILN Harmonic and Individual Lines plus Noise"},
	27:                           {Sym: "er_parametric", Description: "ER Parametric"},
	28:                           {Sym: "ssc", Description: "SinuSoidal Coding"},
	MPEGAudioObjectTypePS:        {Sym: "ps", Description: "Parametric Stereo"},
	30:                           {Sym: "mpeg_surround", Description: "MPEG Surround"},
	31:                           {Description: "(Escape value)"},
	32:                           {Sym: "layer_1", Description: "MPEG Layer-1"},
	33:                           {Sym: "layer_2", Description: "MPEG Layer-2"},
	34:                           {Sym: "layer_3", Description: "MPEG Layer-3"},
	35:                           {Sym: "dst", Description: "Direct Stream Transfer"},
	36:                           {Sym: "als", Description: "Audio Lossless"},
	37:                           {Sym: "sls", Description: "Scalable Lossless"},
	38:                           {Sym: "sls_non_core", Description: "SLS non-core"},
	39:                           {Sym: "er_aac_eld", Description: "ER AAC ELD Enhanced Low Delay"},
	40:                           {Sym: "smr_simple", Description: "Symbolic Music Representation Simple"},
	41:                           {Sym: "smr_main", Description: "Symbolic Music Representation Main"},
	42:                           {Sym: "usac_no_sbr", Description: "Unified Speech and Audio Coding (no SBR)"},
	43:                           {Sym: "saoc", Description: "Spatial Audio Object Coding"},
	44:                           {Sym: "ld_mpeg_surround", Description: "LD MPEG Surround"},
	45:                           {Sym: "usac", Description: "USAC"},
}

// based on ffmpeg/libavutil/pixfmt.h
var ISO_23091_2_ColourPrimariesMap = scalar.UintMap{
	1:  {Sym: "bt709", Description: "ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B"},
	2:  {Sym: "unspecified", Description: "Unspecified"},
	3:  {Sym: "reserved", Description: "Reserved"},
	4:  {Sym: "bt470m", Description: "FCC Title 47 Code of Federal Regulations 73.682 (a)(20)"},
	5:  {Sym: "bt470bg", Description: "ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM"},
	6:  {Sym: "smpte170m", Description: "ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC"},
	7:  {Sym: "smpte240m", Description: "ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC"},
	8:  {Sym: "film", Description: "Illuminant C"},
	9:  {Sym: "bt2020", Description: "ITU-R BT2020"},
	10: {Sym: "smpte428", Description: "SMPTE ST 428-1 (CIE 1931 XYZ)"},
	11: {Sym: "smpte431", Description: "SMPTE ST 431-2 (2011) / DCI P3"},
	12: {Sym: "smpte432", Description: "SMPTE ST 432-1 (2010) / P3 D65 / Display P3"},
	22: {Sym: "ebu3213", Description: "EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors"},
}

var ISO_23091_2_TransferCharacteristicMap = scalar.UintMap{
	1:  {Sym: "bt709", Description: "ITU-R BT1361"},
	2:  {Sym: "unspecified", Description: "Unspecified"},
	3:  {Sym: "reserved", Description: "Reserved"},
	4:  {Sym: "gamma22", Description: "ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM"},
	5:  {Sym: "gamma28", Description: "ITU-R BT470BG"},
	6:  {Sym: "smpte170m", Description: "ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC"},
	7:  {Sym: "smpte240m"},
	8:  {Sym: "linear", Description: "Linear transfer characteristics"},
	9:  {Sym: "log", Description: "Logarithmic transfer characteristic (100:1 range)"},
	10: {Sym: "log_sqrt", Description: "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)"},
	11: {Sym: "iec61966_2_4", Description: "IEC 61966-2-4"},
	12: {Sym: "bt1361_ecg", Description: "ITU-R BT1361 Extended Colour Gamut"},
	13: {Sym: "iec61966_2_1", Description: "IEC 61966-2-1 (sRGB or sYCC)"},
	14: {Sym: "bt2020_10", Description: "ITU-R BT2020 for 10-bit system"},
	15: {Sym: "bt2020_12", Description: "ITU-R BT2020 for 12-bit system"},
	16: {Sym: "smpte2084", Description: "SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems"},
	17: {Sym: "smpte428", Description: "SMPTE ST 428-1"},
	18: {Sym: "arib_std_b67", Description: "ARIB STD-B67, known as Hybrid log-gamma"},
}

var ISO_23091_2_MatrixCoefficients = scalar.UintMap{
	0:  {Sym: "rgb", Description: "GBR, IEC 61966-2-1 (sRGB), YZX and ST 428-1"},
	1:  {Sym: "bt709", Description: "ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B"},
	2:  {Sym: "unspecified", Description: "Unspecified"},
	3:  {Sym: "reserved", Description: "Reserved"},
	4:  {Sym: "fcc", Description: "FCC Title 47 Code of Federal Regulations 73.682 (a)(20)"},
	5:  {Sym: "bt470bg", Description: "ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601"},
	6:  {Sym: "smpte170m", Description: "ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC"},
	7:  {Sym: "smpte240m", Description: "Derived from 170M primaries and D65 white point"},
	8:  {Sym: "ycgco", Description: "VC-2 and H.264 FRext"},
	9:  {Sym: "bt2020_ncl", Description: "ITU-R BT2020 non-constant luminance system"},
	10: {Sym: "bt2020_cl", Description: "ITU-R BT2020 constant luminance system"},
	11: {Sym: "smpte2085", Description: "SMPTE 2085, Y'D'zD'x"},
	12: {Sym: "chroma_derived_ncl", Description: "Chromaticity-derived non-constant luminance system"},
	13: {Sym: "chroma_derived_cl", Description: "Chromaticity-derived constant luminance system"},
	14: {Sym: "ictcp", Description: "ITU-R BT.2100-0, ICtCp"},
}

// based on ffmpeg libavformat/riff.c
const (
	WAVTagPCM_S16LE       = 0x0001
	WAVTagADPCM_MS        = 0x0002
	WAVTagPCM_F32LE       = 0x0003
	WAVTagPCM_ALAW        = 0x0006
	WAVTagPCM_MULAW       = 0x0007
	WAVTagWMAVOICE        = 0x000a
	WAVTagADPCM_IMA_OKI   = 0x0010
	WAVTagADPCM_IMA_WAV   = 0x0011
	WAVTagADPCM_IMA_OKI_2 = 0x0017
	WAVTagADPCM_YAMAHA    = 0x0020
	WAVTagTRUESPEECH      = 0x0022
	WAVTagGSM_MS          = 0x0031
	WAVTagGSM_MS_2        = 0x0032
	WAVTagAMR_NB          = 0x0038
	WAVTagG723_1          = 0x0042
	WAVTagADPCM_G726      = 0x0045
	WAVTagADPCM_G726_2    = 0x0014
	WAVTagADPCM_G726_3    = 0x0040
	WAVTagMP2             = 0x0050
	WAVTagMP3             = 0x0055
	WAVTagAMR_NB_2        = 0x0057
	WAVTagAMR_WB          = 0x0058
	WAVTagADPCM_IMA_DK4   = 0x0061
	WAVTagADPCM_IMA_DK3   = 0x0062
	WAVTagADPCM_G726_4    = 0x0064
	WAVTagADPCM_IMA_WAV_2 = 0x0069
	WAVTagMETASOUND       = 0x0075
	WAVTagG729            = 0x0083
	WAVTagAAC             = 0x00ff
	WAVTagG723_1_2        = 0x0111
	WAVTagSIPR            = 0x0130
	WAVTagACELP_KELVIN    = 0x0135
	WAVTagWMAV1           = 0x0160
	WAVTagWMAV2           = 0x0161
	WAVTagWMAPRO          = 0x0162
	WAVTagWMALOSSLESS     = 0x0163
	WAVTagXMA1            = 0x0165
	WAVTagXMA2            = 0x0166
	WAVTagFTR             = 0x0180
	WAVTagADPCM_CT        = 0x0200
	WAVTagDVAUDIO         = 0x0215
	WAVTagDVAUDIO_2       = 0x0216
	WAVTagATRAC3          = 0x0270
	WAVTagMSNSIREN        = 0x028e
	WAVTagADPCM_G722      = 0x028f
	WAVTagMISC4           = 0x0350
	WAVTagIMC             = 0x0401
	WAVTagIAC             = 0x0402
	WAVTagON2AVC          = 0x0500
	WAVTagON2AVC_2        = 0x0501
	WAVTagGSM_MS_3        = 0x1500
	WAVTagTRUESPEECH_2    = 0x1501
	WAVTagAAC_2           = 0x1600
	WAVTagAAC_LATM        = 0x1602
	WAVTagAC3             = 0x2000
	WAVTagDTS             = 0x2001
	WAVTagSONIC           = 0x2048
	WAVTagG729_2          = 0x2222
	WAVTagPCM_MULAW_2     = 0x6c75
	WAVTagAAC_3           = 0x706d
	WAVTagAAC_4           = 0x4143
	WAVTagFTR_2           = 0x4180
	WAVTagXAN_DPCM        = 0x594a
	WAVTagG729_3          = 0x729a
	WAVTagFTR_3           = 0x8180
	WAVTagG723_1_3        = 0xa100
	WAVTagAAC_5           = 0xa106
	WAVTagSPEEX           = 0xa109
	WAVTagFLAC            = 0xf1ac
	WAVTagFORMATEX        = 0xfffe
	WAVTagADPCM_SWF       = 0x5356
	WAVTagVORBIS          = 0x566f
)

var WAVTagNames = scalar.UintMapSymStr{
	WAVTagPCM_S16LE:       "pcm_s16le",
	WAVTagADPCM_MS:        "adpcm_ms",
	WAVTagPCM_F32LE:       "pcm_f32le",
	WAVTagPCM_ALAW:        "pcm_alaw",
	WAVTagPCM_MULAW:       "pcm_mulaw",
	WAVTagWMAVOICE:        "wmavoice",
	WAVTagADPCM_IMA_OKI:   "adpcm_ima_oki",
	WAVTagADPCM_IMA_WAV:   "adpcm_ima_wav",
	WAVTagADPCM_IMA_OKI_2: "adpcm_ima_oki_2",
	WAVTagADPCM_YAMAHA:    "adpcm_yamaha",
	WAVTagTRUESPEECH:      "truespeech",
	WAVTagGSM_MS:          "gsm_ms",
	WAVTagGSM_MS_2:        "gsm_ms_2",
	WAVTagAMR_NB:          "amr_nb",
	WAVTagG723_1:          "g723_1",
	WAVTagADPCM_G726:      "adpcm_g726",
	WAVTagADPCM_G726_2:    "adpcm_g726_2",
	WAVTagADPCM_G726_3:    "adpcm_g726_3",
	WAVTagMP2:             "mp2",
	WAVTagMP3:             "mp3",
	WAVTagAMR_NB_2:        "amr_nb_2",
	WAVTagAMR_WB:          "amr_wb",
	WAVTagADPCM_IMA_DK4:   "adpcm_ima_dk4",
	WAVTagADPCM_IMA_DK3:   "adpcm_ima_dk3",
	WAVTagADPCM_G726_4:    "adpcm_g726_4",
	WAVTagADPCM_IMA_WAV_2: "adpcm_ima_wav_2",
	WAVTagMETASOUND:       "metasound",
	WAVTagG729:            "g729",
	WAVTagAAC:             "aac",
	WAVTagG723_1_2:        "g723_1_2",
	WAVTagSIPR:            "sipr",
	WAVTagACELP_KELVIN:    "acelp_kelvin",
	WAVTagWMAV1:           "wmav1",
	WAVTagWMAV2:           "wmav2",
	WAVTagWMAPRO:          "wmapro",
	WAVTagWMALOSSLESS:     "wmalossless",
	WAVTagXMA1:            "xma1",
	WAVTagXMA2:            "xma2",
	WAVTagFTR:             "ftr",
	WAVTagADPCM_CT:        "adpcm_ct",
	WAVTagDVAUDIO:         "dvaudio",
	WAVTagDVAUDIO_2:       "dvaudio_2",
	WAVTagATRAC3:          "atrac3",
	WAVTagMSNSIREN:        "msnsiren",
	WAVTagADPCM_G722:      "adpcm_g722",
	WAVTagMISC4:           "misc4",
	WAVTagIMC:             "imc",
	WAVTagIAC:             "iac",
	WAVTagON2AVC:          "on2avc",
	WAVTagON2AVC_2:        "on2avc_2",
	WAVTagGSM_MS_3:        "gsm_ms_3",
	WAVTagTRUESPEECH_2:    "truespeech_2",
	WAVTagAAC_2:           "aac_2",
	WAVTagAAC_LATM:        "aac_latm",
	WAVTagAC3:             "ac3",
	WAVTagDTS:             "dts",
	WAVTagSONIC:           "sonic",
	WAVTagG729_2:          "g729_2",
	WAVTagPCM_MULAW_2:     "pcm_mulaw_2",
	WAVTagAAC_3:           "aac_3",
	WAVTagAAC_4:           "aac_4",
	WAVTagFTR_2:           "ftr_2",
	WAVTagXAN_DPCM:        "xan_dpcm",
	WAVTagG729_3:          "g729_3",
	WAVTagFTR_3:           "ftr_3",
	WAVTagG723_1_3:        "g723_1_3",
	WAVTagAAC_5:           "aac_5",
	WAVTagSPEEX:           "speex",
	WAVTagFLAC:            "flac",
	WAVTagFORMATEX:        "formatex",
	WAVTagADPCM_SWF:       "adpcm_swf",
	WAVTagVORBIS:          "vorbis",
}

// based on ffmpeg libavformat/riff.c
const (
	BMPTagH264                = "H264"
	BMPTagH264_h264           = "h264"
	BMPTagH264_X264           = "X264"
	BMPTagH264_x264           = "x264"
	BMPTagH264_avc1           = "avc1"
	BMPTagH264_DAVC           = "DAVC"
	BMPTagH264_SMV2           = "SMV2"
	BMPTagH264_VSSH           = "VSSH"
	BMPTagH264_Q264           = "Q264" // QNAP surveillance system
	BMPTagH264_V264           = "V264" // CCTV recordings
	BMPTagH264_GAVC           = "GAVC" // GeoVision camera
	BMPTagH264_UMSV           = "UMSV"
	BMPTagH264_tshd           = "tshd"
	BMPTagH264_INMC           = "INMC"
	BMPTagH263                = "H263"
	BMPTagH263_X263           = "X263"
	BMPTagH263_T263           = "T263"
	BMPTagH263_L263           = "L263"
	BMPTagH263_VX1K           = "VX1K"
	BMPTagH263_ZyGo           = "ZyGo"
	BMPTagH263_M263           = "M263"
	BMPTagH263_lsvm           = "lsvm"
	BMPTagH263P               = "H263"
	BMPTagH263I               = "I263" // Intel H.263
	BMPTagH261                = "H261"
	BMPTagH263_U263           = "U263"
	BMPTagH263_VSM4           = "VSM4" // needs -vf il=l=i:c=i
	BMPTagMPEG4               = "FMP4"
	BMPTagMPEG4_DIVX          = "DIVX"
	BMPTagMPEG4_DX50          = "DX50"
	BMPTagMPEG4_XVID          = "XVID"
	BMPTagMPEG4_MP4S          = "MP4S"
	BMPTagMPEG4_M4S2          = "M4S2"             // some broken AVIs use this
	BMPTagMPEG4_04000000      = "\x04\x00\x00\x00" // some broken AVIs use this
	BMPTagMPEG4_ZMP4          = "ZMP4"
	BMPTagMPEG4_DIV1          = "DIV1"
	BMPTagMPEG4_BLZ0          = "BLZ0"
	BMPTagMPEG4_mp4v          = "mp4v"
	BMPTagMPEG4_UMP4          = "UMP4"
	BMPTagMPEG4_WV1F          = "WV1F"
	BMPTagMPEG4_SEDG          = "SEDG"
	BMPTagMPEG4_RMP4          = "RMP4"
	BMPTagMPEG4_3IV2          = "3IV2" // WaWv MPEG-4 Video Codec
	BMPTagMPEG4_WAWV          = "WAWV"
	BMPTagMPEG4_FFDS          = "FFDS"
	BMPTagMPEG4_FVFW          = "FVFW"
	BMPTagMPEG4_DCOD          = "DCOD"
	BMPTagMPEG4_MVXM          = "MVXM"
	BMPTagMPEG4_PM4V          = "PM4V"
	BMPTagMPEG4_SMP4          = "SMP4"
	BMPTagMPEG4_DXGM          = "DXGM"
	BMPTagMPEG4_VIDM          = "VIDM"
	BMPTagMPEG4_M4T3          = "M4T3"
	BMPTagMPEG4_GEOX          = "GEOX" // flipped video
	BMPTagMPEG4_G264          = "G264" // flipped video
	BMPTagMPEG4_HDX4          = "HDX4"
	BMPTagMPEG4_DM4V          = "DM4V"
	BMPTagMPEG4_DMK2          = "DMK2"
	BMPTagMPEG4_DYM4          = "DYM4"
	BMPTagMPEG4_DIGI          = "DIGI" // Ephv MPEG-4
	BMPTagMPEG4_EPHV          = "EPHV"
	BMPTagMPEG4_EM4A          = "EM4A" // Divio MPEG-4
	BMPTagMPEG4_M4CC          = "M4CC"
	BMPTagMPEG4_SN40          = "SN40"
	BMPTagMPEG4_VSPX          = "VSPX"
	BMPTagMPEG4_ULDX          = "ULDX"
	BMPTagMPEG4_GEOV          = "GEOV" // Samsung SHR-6040
	BMPTagMPEG4_SIPP          = "SIPP"
	BMPTagMPEG4_SM4V          = "SM4V"
	BMPTagMPEG4_XVIX          = "XVIX"
	BMPTagMPEG4_DreX          = "DreX"
	BMPTagMPEG4_QMP4          = "QMP4" // QNAP Systems
	BMPTagMPEG4_PLV1          = "PLV1" // Pelco DVR MPEG-4
	BMPTagMPEG4_GLV4          = "GLV4"
	BMPTagMPEG4_GMP4          = "GMP4" // GeoVision camera
	BMPTagMPEG4_MNM4          = "MNM4" // March Networks DVR
	BMPTagMPEG4_GTM4          = "GTM4" // Telefactor
	BMPTagMSMPEG4V3           = "MP43"
	BMPTagMSMPEG4V3_DIV3      = "DIV3"
	BMPTagMSMPEG4V3_MPG3      = "MPG3"
	BMPTagMSMPEG4V3_DIV5      = "DIV5"
	BMPTagMSMPEG4V3_DIV6      = "DIV6"
	BMPTagMSMPEG4V3_DIV4      = "DIV4"
	BMPTagMSMPEG4V3_DVX3      = "DVX3"
	BMPTagMSMPEG4V3_AP41      = "AP41"
	BMPTagMSMPEG4V3_COL1      = "COL1"
	BMPTagMSMPEG4V3_COL0      = "COL0"
	BMPTagMSMPEG4V2           = "MP42"
	BMPTagMSMPEG4V2_DIV2      = "DIV2"
	BMPTagMSMPEG4V1           = "MPG4"
	BMPTagMSMPEG4V1_MP41      = "MP41"
	BMPTagWMV1                = "WMV1"
	BMPTagWMV2                = "WMV2"
	BMPTagWMV2_GXVE           = "GXVE"
	BMPTagDVVIDEO             = "dvsd"
	BMPTagDVVIDEO_dvhd        = "dvhd"
	BMPTagDVVIDEO_dvh1        = "dvh1"
	BMPTagDVVIDEO_dvsl        = "dvsl"
	BMPTagDVVIDEO_dv25        = "dv25"
	BMPTagDVVIDEO_dv50        = "dv50" // Canopus DV
	BMPTagDVVIDEO_cdvc        = "cdvc" // Canopus DV
	BMPTagDVVIDEO_CDVH        = "CDVH" // Canopus DV
	BMPTagDVVIDEO_CDV5        = "CDV5"
	BMPTagDVVIDEO_dvc         = "dvc "
	BMPTagDVVIDEO_dvcs        = "dvcs"
	BMPTagDVVIDEO_dvis        = "dvis"
	BMPTagDVVIDEO_pdvc        = "pdvc"
	BMPTagDVVIDEO_SL25        = "SL25"
	BMPTagDVVIDEO_SLDV        = "SLDV"
	BMPTagDVVIDEO_AVd1        = "AVd1"
	BMPTagMPEG1VIDEO          = "mpg1"
	BMPTagMPEG2VIDEO_mpg2     = "mpg2"
	BMPTagMPEG2VIDEO_MPEG     = "MPEG"
	BMPTagMPEG1VIDEO_PIM1     = "PIM1"
	BMPTagMPEG2VIDEO_PIM2     = "PIM2"
	BMPTagMPEG1VIDEO_VCR2     = "VCR2"
	BMPTagMPEG1VIDEO_01000016 = "\x01\x00\x00\x16"
	BMPTagMPEG2VIDEO_02000016 = "\x02\x00\x00\x16"
	BMPTagMPEG4_04000016      = "\x04\x00\x00\x16"
	BMPTagMPEG2VIDEO          = "DVR "
	BMPTagMPEG2VIDEOMMES      = "MMES" // Lead MPEG-2 in AVI
	BMPTagMPEG2VIDEOLMP2      = "LMP2"
	BMPTagMPEG2VIDEOslif      = "slif"
	BMPTagMPEG2VIDEOEM2V      = "EM2V" // Matrox MPEG-2 intra-only
	BMPTagMPEG2VIDEOM701      = "M701"
	BMPTagMPEG2VIDEOM702      = "M702"
	BMPTagMPEG2VIDEOM703      = "M703"
	BMPTagMPEG2VIDEOM704      = "M704"
	BMPTagMPEG2VIDEOM705      = "M705"
	BMPTagMPEG2VIDEOmpgv      = "mpgv"
	BMPTagMPEG1VIDEO_BW10     = "BW10"
	BMPTagMPEG1VIDEO_XMPG     = "XMPG" // Xing MPEG intra only
	BMPTagMJPEG               = "MJPG"
	BMPTagMJPEG_MSC2          = "MSC2" // Multiscope II
	BMPTagMJPEG_LJPG          = "LJPG"
	BMPTagMJPEG_dmb1          = "dmb1"
	BMPTagMJPEG_mjpa          = "mjpa"
	BMPTagMJPEG_JR24          = "JR24" // Quadrox Mjpeg
	BMPTagLJPEG               = "LJPG" // Pegasus lossless JPEG
	BMPTagMJPEG_JPGL          = "JPGL" // JPEG-LS custom FOURCC for AVI - encoder
	BMPTagJPEGLS              = "MJLS"
	BMPTagJPEGLS_MJPG         = "MJPG" // JPEG-LS custom FOURCC for AVI - decoder
	BMPTagMJPEG_MJLS          = "MJLS"
	BMPTagMJPEG_jpeg          = "jpeg"
	BMPTagMJPEG_IJPG          = "IJPG"
	BMPTagAVRN                = "AVRn"
	BMPTagMJPEG_ACDV          = "ACDV"
	BMPTagMJPEG_QIVG          = "QIVG" // SL M-JPEG
	BMPTagMJPEG_SLMJ          = "SLMJ" // Creative Webcam JPEG
	BMPTagMJPEG_CJPG          = "CJPG" // Intel JPEG Library Video Codec
	BMPTagMJPEG_IJLV          = "IJLV" // Midvid JPEG Video Codec
	BMPTagMJPEG_MVJP          = "MVJP"
	BMPTagMJPEG_AVI1          = "AVI1"
	BMPTagMJPEG_AVI2          = "AVI2"
	BMPTagMJPEG_MTSJ          = "MTSJ" // Paradigm Matrix M-JPEG Codec
	BMPTagMJPEG_ZJPG          = "ZJPG"
	BMPTagMJPEG_MMJP          = "MMJP"
	BMPTagHUFFYUV             = "HFYU"
	BMPTagFFVHUFF             = "FFVH"
	BMPTagCYUV                = "CYUV"
	BMPTagRAWVIDEO_00000000   = "\x00\x00\x00\x00"
	BMPTagRAWVIDEO_03000000   = "\x03\x00\x00\x00"
	BMPTagRAWVIDEO_I420       = "I420"
	BMPTagRAWVIDEO_YUY2       = "YUY2"
	BMPTagRAWVIDEO_Y422       = "Y422"
	BMPTagRAWVIDEO_V422       = "V422"
	BMPTagRAWVIDEO_YUNV       = "YUNV"
	BMPTagRAWVIDEO_UYNV       = "UYNV"
	BMPTagRAWVIDEO_UYNY       = "UYNY"
	BMPTagRAWVIDEO_uyv1       = "uyv1"
	BMPTagRAWVIDEO_2Vu1       = "2Vu1"
	BMPTagRAWVIDEO_2vuy       = "2vuy"
	BMPTagRAWVIDEO_yuvs       = "yuvs"
	BMPTagRAWVIDEO_yuv2       = "yuv2"
	BMPTagRAWVIDEO_P422       = "P422"
	BMPTagRAWVIDEO_YV12       = "YV12"
	BMPTagRAWVIDEO_YV16       = "YV16"
	BMPTagRAWVIDEO_YV24       = "YV24"
	BMPTagRAWVIDEO_UYVY       = "UYVY"
	BMPTagRAWVIDEO_VYUY       = "VYUY"
	BMPTagRAWVIDEO_IYUV       = "IYUV"
	BMPTagRAWVIDEO_AYUV       = "AYUV"
	BMPTagRAWVIDEO_Y800       = "Y800"
	BMPTagRAWVIDEO_Y8         = "Y8  "
	BMPTagRAWVIDEO_HDYC       = "HDYC"
	BMPTagRAWVIDEO_VDTZ       = "VDTZ"
	BMPTagRAWVIDEO_Y411       = "Y411"
	BMPTagRAWVIDEO_NV12       = "NV12"
	BMPTagRAWVIDEO_NV21       = "NV21"
	BMPTagRAWVIDEO_Y41B       = "Y41B"
	BMPTagRAWVIDEO_Y42B       = "Y42B"
	BMPTagRAWVIDEO_YUV9       = "YUV9"
	BMPTagRAWVIDEO_YVU9       = "YVU9"
	BMPTagRAWVIDEO_auv2       = "auv2"
	BMPTagRAWVIDEO_YVYU       = "YVYU"
	BMPTagRAWVIDEO_YUYV       = "YUYV"
	BMPTagRAWVIDEO_I410       = "I410"
	BMPTagRAWVIDEO_I411       = "I411"
	BMPTagRAWVIDEO_I422       = "I422"
	BMPTagRAWVIDEO_I440       = "I440"
	BMPTagRAWVIDEO_I444       = "I444"
	BMPTagRAWVIDEO_J420       = "J420"
	BMPTagRAWVIDEO_J422       = "J422"
	BMPTagRAWVIDEO_J440       = "J440"
	BMPTagRAWVIDEO_J444       = "J444"
	BMPTagRAWVIDEO_YUVA       = "YUVA"
	BMPTagRAWVIDEO_I40A       = "I40A"
	BMPTagRAWVIDEO_I42A       = "I42A"
	BMPTagRAWVIDEO_RGB2       = "RGB2"
	BMPTagRAWVIDEO_RV15       = "RV15"
	BMPTagRAWVIDEO_RV16       = "RV16"
	BMPTagRAWVIDEO_RV24       = "RV24"
	BMPTagRAWVIDEO_RV32       = "RV32"
	BMPTagRAWVIDEO_RGBA       = "RGBA"
	BMPTagRAWVIDEO_AV32       = "AV32"
	BMPTagRAWVIDEO_GREY       = "GREY"
	BMPTagRAWVIDEO_I09L       = "I09L"
	BMPTagRAWVIDEO_I09B       = "I09B"
	BMPTagRAWVIDEO_I29L       = "I29L"
	BMPTagRAWVIDEO_I29B       = "I29B"
	BMPTagRAWVIDEO_I49L       = "I49L"
	BMPTagRAWVIDEO_I49B       = "I49B"
	BMPTagRAWVIDEO_I0AL       = "I0AL"
	BMPTagRAWVIDEO_I0AB       = "I0AB"
	BMPTagRAWVIDEO_I2AL       = "I2AL"
	BMPTagRAWVIDEO_I2AB       = "I2AB"
	BMPTagRAWVIDEO_I4AL       = "I4AL"
	BMPTagRAWVIDEO_I4AB       = "I4AB"
	BMPTagRAWVIDEO_I4FL       = "I4FL"
	BMPTagRAWVIDEO_I4FB       = "I4FB"
	BMPTagRAWVIDEO_I0CL       = "I0CL"
	BMPTagRAWVIDEO_I0CB       = "I0CB"
	BMPTagRAWVIDEO_I2CL       = "I2CL"
	BMPTagRAWVIDEO_I2CB       = "I2CB"
	BMPTagRAWVIDEO_I4CL       = "I4CL"
	BMPTagRAWVIDEO_I4CB       = "I4CB"
	BMPTagRAWVIDEO_I0FL       = "I0FL"
	BMPTagRAWVIDEO_I0FB       = "I0FB"
	BMPTagFRWU                = "FRWU"
	BMPTagR10K                = "R10k"
	BMPTagR210                = "r210"
	BMPTagV210_v210           = "v210"
	BMPTagV210_C210           = "C210"
	BMPTagV308                = "v308"
	BMPTagV408                = "v408"
	BMPTagV410                = "v410"
	BMPTagYUV4                = "yuv4"
	BMPTagINDEO3_IV31         = "IV31"
	BMPTagINDEO3_IV32         = "IV32"
	BMPTagINDEO4              = "IV41"
	BMPTagINDEO5              = "IV50"
	BMPTagVP3_VP31            = "VP31"
	BMPTagVP3_VP30            = "VP30"
	BMPTagVP4                 = "VP40"
	BMPTagVP5                 = "VP50"
	BMPTagVP6_VP60            = "VP60"
	BMPTagVP6_VP61            = "VP61"
	BMPTagVP6_VP62            = "VP62"
	BMPTagVP6A                = "VP6A"
	BMPTagVP6F_VP6F           = "VP6F"
	BMPTagVP6F_FLV4           = "FLV4"
	BMPTagVP7_VP70            = "VP70"
	BMPTagVP7_VP71            = "VP71"
	BMPTagVP8                 = "VP80"
	BMPTagVP9                 = "VP90"
	BMPTagASV1                = "ASV1"
	BMPTagASV2                = "ASV2"
	BMPTagVCR1                = "VCR1"
	BMPTagFFV1                = "FFV1"
	BMPTagXAN_WC4             = "Xxan"
	BMPTagMIMIC               = "LM20"
	BMPTagMSRLE_mrle          = "mrle"
	BMPTagMSRLE_01000000      = "\x01\x00\x00\x00"
	BMPTagMSRLE_02000000      = "\x02\x00\x00\x00"
	BMPTagMSVIDEO1_MSVC       = "MSVC"
	BMPTagMSVIDEO1_msvc       = "msvc"
	BMPTagMSVIDEO1_CRAM       = "CRAM"
	BMPTagMSVIDEO1_cram       = "cram"
	BMPTagMSVIDEO1_WHAM       = "WHAM"
	BMPTagMSVIDEO1_wham       = "wham"
	BMPTagCINEPAK             = "cvid"
	BMPTagTRUEMOTION1_DUCK    = "DUCK"
	BMPTagTRUEMOTION1_PVEZ    = "PVEZ"
	BMPTagMSZH                = "MSZH"
	BMPTagZLIB                = "ZLIB"
	BMPTagSNOW                = "SNOW"
	BMPTag4XM                 = "4XMV"
	BMPTagFLV1                = "FLV1"
	BMPTagFLV1_S263           = "S263"
	BMPTagFLASHSV             = "FSV1"
	BMPTagSVQ1                = "svq1"
	BMPTagTSCC                = "tscc"
	BMPTagULTI                = "ULTI"
	BMPTagVIXL                = "VIXL"
	BMPTagQPEG                = "QPEG"
	BMPTagQPEG_Q1_0           = "Q1.0"
	BMPTagQPEG_Q1_1           = "Q1.1"
	BMPTagWMV3                = "WMV3"
	BMPTagWMV3IMAGE           = "WMVP"
	BMPTagVC1_WVC1            = "WVC1"
	BMPTagVC1_WMVA            = "WMVA"
	BMPTagVC1IMAGE            = "WVP2"
	BMPTagLOCO                = "LOCO"
	BMPTagWNV1_WNV1           = "WNV1"
	BMPTagWNV1_YUV8           = "YUV8"
	BMPTagAASC_AAS4           = "AAS4" // Autodesk 24 bit RLE compressor
	BMPTagAASC                = "AASC"
	BMPTagINDEO2              = "RT21"
	BMPTagFRAPS               = "FPS1"
	BMPTagTHEORA              = "theo"
	BMPTagTRUEMOTION2         = "TM20"
	BMPTagTRUEMOTION2RT       = "TR20"
	BMPTagCSCD                = "CSCD"
	BMPTagZMBV                = "ZMBV"
	BMPTagKMVC                = "KMVC"
	BMPTagCAVS                = "CAVS"
	BMPTagAVS2                = "AVS2"
	BMPTagJPEG2000_mjp2       = "mjp2"
	BMPTagJPEG2000_MJ2C       = "MJ2C"
	BMPTagJPEG2000_LJ2C       = "LJ2C"
	BMPTagJPEG2000_LJ2K       = "LJ2K"
	BMPTagJPEG2000_IPJ2       = "IPJ2"
	BMPTagJPEG2000_AVj2       = "AVj2" // Avid jpeg2000
	BMPTagVMNC                = "VMnc"
	BMPTagTARGA               = "tga "
	BMPTagPNG_MPNG            = "MPNG"
	BMPTagPNG_PNG1            = "PNG1"
	BMPTagPNG                 = "png " // ImageJ
	BMPTagCLJR                = "CLJR"
	BMPTagDIRAC               = "drac"
	BMPTagRPZA_azpr           = "azpr"
	BMPTagRPZA                = "RPZA"
	BMPTagRPZA_rpza           = "rpza"
	BMPTagSP5X                = "SP54"
	BMPTagAURA                = "AURA"
	BMPTagAURA2               = "AUR2"
	BMPTagDPX                 = "dpx "
	BMPTagKGV1                = "KGV1"
	BMPTagLAGARITH            = "LAGS"
	BMPTagAMV                 = "AMVF"
	BMPTagUTVIDEO_ULRA        = "ULRA"
	BMPTagUTVIDEO_ULRG        = "ULRG"
	BMPTagUTVIDEO_ULY0        = "ULY0"
	BMPTagUTVIDEO_ULY2        = "ULY2"
	BMPTagUTVIDEO_ULY4        = "ULY4" // Ut Video version 13.0.1 BT.709 codecs
	BMPTagUTVIDEO_ULH0        = "ULH0"
	BMPTagUTVIDEO_ULH2        = "ULH2"
	BMPTagUTVIDEO_ULH4        = "ULH4"
	BMPTagUTVIDEO_UQY0        = "UQY0"
	BMPTagUTVIDEO_UQY2        = "UQY2"
	BMPTagUTVIDEO_UQRA        = "UQRA"
	BMPTagUTVIDEO_UQRG        = "UQRG"
	BMPTagUTVIDEO_UMY2        = "UMY2"
	BMPTagUTVIDEO_UMH2        = "UMH2"
	BMPTagUTVIDEO_UMY4        = "UMY4"
	BMPTagUTVIDEO_UMH4        = "UMH4"
	BMPTagUTVIDEO_UMRA        = "UMRA"
	BMPTagUTVIDEO_UMRG        = "UMRG"
	BMPTagVBLE                = "VBLE"
	BMPTagESCAPE130           = "E130"
	BMPTagDXTORY              = "xtor"
	BMPTagZEROCODEC           = "ZECO"
	BMPTagY41P                = "Y41P"
	BMPTagFLIC                = "AFLC"
	BMPTagMSS1                = "MSS1"
	BMPTagMSA1                = "MSA1"
	BMPTagTSCC2               = "TSC2"
	BMPTagMTS2                = "MTS2"
	BMPTagCLLC                = "CLLC"
	BMPTagMSS2                = "MSS2"
	BMPTagSVQ3                = "SVQ3"
	BMPTag012V                = "012v"
	BMPTag012V_a12v           = "a12v"
	BMPTagG2M_G2M2            = "G2M2"
	BMPTagG2M_G2M3            = "G2M3"
	BMPTagG2M_G2M4            = "G2M4"
	BMPTagG2M_G2M5            = "G2M5"
	BMPTagFIC                 = "FICV"
	BMPTagHQX                 = "CHQX"
	BMPTagTDSC                = "TDSC"
	BMPTagHQ_HQA              = "CUVC"
	BMPTagRV40                = "RV40"
	BMPTagSCREENPRESSO        = "SPV1"
	BMPTagRSCC                = "RSCC"
	BMPTagRSCC_ISCC           = "ISCC"
	BMPTagCFHD                = "CFHD"
	BMPTagM101                = "M101"
	BMPTagM101_M102           = "M102"
	BMPTagMAGICYUV_MAGY       = "MAGY"
	BMPTagMAGICYUV_M8RG       = "M8RG"
	BMPTagMAGICYUV_M8RA       = "M8RA"
	BMPTagMAGICYUV_M8G0       = "M8G0"
	BMPTagMAGICYUV_M8Y0       = "M8Y0"
	BMPTagMAGICYUV_M8Y2       = "M8Y2"
	BMPTagMAGICYUV_M8Y4       = "M8Y4"
	BMPTagMAGICYUV_M8YA       = "M8YA"
	BMPTagMAGICYUV_M0RA       = "M0RA"
	BMPTagMAGICYUV_M0RG       = "M0RG"
	BMPTagMAGICYUV_M0G0       = "M0G0"
	BMPTagMAGICYUV_M0Y0       = "M0Y0"
	BMPTagMAGICYUV_M0Y2       = "M0Y2"
	BMPTagMAGICYUV_M0Y4       = "M0Y4"
	BMPTagMAGICYUV_M2RA       = "M2RA"
	BMPTagMAGICYUV_M2RG       = "M2RG"
	BMPTagYLC                 = "YLC0"
	BMPTagSPEEDHQ_SHQ0        = "SHQ0"
	BMPTagSPEEDHQ_SHQ1        = "SHQ1"
	BMPTagSPEEDHQ_SHQ2        = "SHQ2"
	BMPTagSPEEDHQ_SHQ3        = "SHQ3"
	BMPTagSPEEDHQ_SHQ4        = "SHQ4"
	BMPTagSPEEDHQ_SHQ5        = "SHQ5"
	BMPTagSPEEDHQ_SHQ7        = "SHQ7"
	BMPTagSPEEDHQ_SHQ9        = "SHQ9"
	BMPTagFMVC                = "FMVC"
	BMPTagSCPR                = "SCPR"
	BMPTagCLEARVIDEO          = "UCOD"
	BMPTagAV1                 = "AV01"
	BMPTagMSCC                = "MSCC"
	BMPTagSRGC                = "SRGC"
	BMPTagIMM4                = "IMM4"
	BMPTagPROSUMER            = "BT20"
	BMPTagMWSC                = "MWSC"
	BMPTagWCMV                = "WCMV"
	BMPTagRASC                = "RASC"
	BMPTagHYMT                = "HYMT"
	BMPTagARBC                = "ARBC"
	BMPTagAGM_AGM0            = "AGM0"
	BMPTagAGM_AGM1            = "AGM1"
	BMPTagAGM_AGM2            = "AGM2"
	BMPTagAGM_AGM3            = "AGM3"
	BMPTagAGM_AGM4            = "AGM4"
	BMPTagAGM_AGM5            = "AGM5"
	BMPTagAGM_AGM6            = "AGM6"
	BMPTagAGM_AGM7            = "AGM7"
	BMPTagLSCR                = "LSCR"
	BMPTagIMM5                = "IMM5"
	BMPTagMVDV                = "MVDV"
	BMPTagMVHA                = "MVHA"
	BMPTagMV30                = "MV30"
	BMPTagNOTCHLC             = "nlc1"
	BMPTagVQC_VQC1            = "VQC1"
	BMPTagVQC_VQC2            = "VQC2"
	// unofficial
	BMPTagHEVC      = "HEVC"
	BMPTagHEVC_H265 = "H265"
)
