/*****************************************************************************
 * profile_names.hpp : DLNA media profile names
 *****************************************************************************
 * Copyright © 2018 VLC authors and VideoLAN
 *
 * Authors: Shaleen Jain <shaleen@jain.sh>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/

#ifndef DLNA_PROFILES_H
#define DLNA_PROFILES_H

#include<string>
#include<vlc_common.h>
#include<vlc_fourcc.h>
#include<vector>

#define VLC_CODEC_NONE 0
#define CODEC_PROFILE_NONE 0

enum dlna_transport_protocol_t {
  DLNA_TRANSPORT_PROTOCOL_UNKNOWN,
  DLNA_TRANSPORT_PROTOCOL_HTTP,
  DLNA_TRANSPORT_PROTOCOL_RTP,
  DLNA_TRANSPORT_PROTOCOL_ANY
};

/**
 * DLNA.ORG_CI: conversion indicator parameter (integer)
 *     0 not transcoded
 *     1 transcoded
 */
enum dlna_org_conversion_t {
  DLNA_ORG_CONVERSION_NONE = 0,
  DLNA_ORG_CONVERSION_TRANSCODED = 1,
};

/**
 * DLNA.ORG_OP: operations parameter (string)
 *     "00" (or "0") neither time seek range nor range supported
 *     "01" range supported
 *     "10" time seek range supported
 *     "11" both time seek range and range supported
 */
enum dlna_org_operation_t {
  DLNA_ORG_OPERATION_NONE                  = 0x00,
  DLNA_ORG_OPERATION_RANGE                 = 0x01,
  DLNA_ORG_OPERATION_TIMESEEK              = 0x10,
};

/**
 * DLNA.ORG_FLAGS, padded with 24 trailing 0s
 *     80000000  31  senderPaced
 *     40000000  30  lsopTimeBasedSeekSupported
 *     20000000  29  lsopByteBasedSeekSupported
 *     10000000  28  playcontainerSupported
 *      8000000  27  s0IncreasingSupported
 *      4000000  26  sNIncreasingSupported
 *      2000000  25  rtspPauseSupported
 *      1000000  24  streamingTransferModeSupported
 *       800000  23  interactiveTransferModeSupported
 *       400000  22  backgroundTransferModeSupported
 *       200000  21  connectionStallingSupported
 *       100000  20  dlnaVersion15Supported
 *
 *     Example: (1 << 24) | (1 << 22) | (1 << 21) | (1 << 20)
 *       DLNA.ORG_FLAGS=01700000[000000000000000000000000] // [] show padding
 */
enum dlna_org_flags_t {
  DLNA_ORG_FLAG_SENDER_PACED               = (1 << 31),
  DLNA_ORG_FLAG_TIME_BASED_SEEK            = (1 << 30),
  DLNA_ORG_FLAG_BYTE_BASED_SEEK            = (1 << 29),
  DLNA_ORG_FLAG_PLAY_CONTAINER             = (1 << 28),
  DLNA_ORG_FLAG_S0_INCREASE                = (1 << 27),
  DLNA_ORG_FLAG_SN_INCREASE                = (1 << 26),
  DLNA_ORG_FLAG_RTSP_PAUSE                 = (1 << 25),
  DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE    = (1 << 24),
  DLNA_ORG_FLAG_INTERACTIVE_TRANSFERT_MODE = (1 << 23),
  DLNA_ORG_FLAG_BACKGROUND_TRANSFERT_MODE  = (1 << 22),
  DLNA_ORG_FLAG_CONNECTION_STALL           = (1 << 21),
  DLNA_ORG_FLAG_DLNA_V15                   = (1 << 20),
};

inline dlna_org_flags_t operator|(dlna_org_flags_t a, dlna_org_flags_t b)
{
    return static_cast<dlna_org_flags_t>(static_cast<int>(a) | static_cast<int>(b));
}

enum dlna_media_class_t {
  DLNA_CLASS_UNKNOWN,
  DLNA_CLASS_IMAGE,
  DLNA_CLASS_AUDIO,
  DLNA_CLASS_AV,
  DLNA_CLASS_COLLECTION
};

/**
 * DLNA profile.
 * This specifies the DLNA profile one file/stream is compatible with.
 */
class dlna_profile_t {
public:
    std::string name;
    std::string mux;
    std::string mime;
    dlna_media_class_t media;
    vlc_fourcc_t video_codec;
    vlc_fourcc_t audio_codec;

    dlna_profile_t()
        : video_codec(VLC_CODEC_UNKNOWN)
        , audio_codec(VLC_CODEC_UNKNOWN)
        {}

    dlna_profile_t(std::string profile, std::string mux, std::string mime,
            vlc_fourcc_t video, vlc_fourcc_t audio)
        : name(std::move(profile))
        , mux(std::move(mux))
        , mime(std::move(mime))
        , media(DLNA_CLASS_AV)
        , video_codec(video)
        , audio_codec(audio)
        {}

    dlna_profile_t(std::string profile, std::string mux, std::string mime,
            dlna_media_class_t media, vlc_fourcc_t video, vlc_fourcc_t audio)
        : name(std::move(profile))
        , mux(std::move(mux))
        , mime(std::move(mime))
        , media(media)
        , video_codec(video)
        , audio_codec(audio)
        {}
};

const dlna_profile_t default_audio_profile = {
    "AAC_ISO_320",
    "mp4stream",
    "audio/mp4",
    DLNA_CLASS_AUDIO,
    VLC_CODEC_NONE,
    VLC_CODEC_MP4A,
};

/**
 * AVC Main Profile SD video with MPEG-4 AAC audio, encapsulated in MP4.
 */
const dlna_profile_t default_video_profile = {
    "AVC_MP4_MP_SD",
    "mp4stream",
    "video/mp4",
    DLNA_CLASS_AV,
    VLC_CODEC_H264,
    VLC_CODEC_MP4A,
};

const dlna_profile_t default_image_profile = {
    "JPEG_MED",
    "jpg",
    "image/jpeg",
    DLNA_CLASS_IMAGE,
    VLC_CODEC_JPEG,
    VLC_CODEC_NONE,
};

static const std::vector<dlna_profile_t> dlna_profile_list = {

    default_audio_profile,
    default_video_profile,

    //------ Audio Profiles ------//

    {
        "*",
        "ogg",
        "application/ogg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_VORBIS,
    },
    {
        "*",
        "ogg",
        "application/ogg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_OPUS,
    },
    {
        "*",
        "ogg",
        "audio/x-vorbis",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_VORBIS,
    },
    {
        "*",
        "ogg",
        "audio/x-vorbis+ogg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_VORBIS,
    },
    {
        "*",
        "ogg",
        "audio/ogg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_OPUS,
    },
    {
        "*",
        "ogg",
        "audio/ogg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_VORBIS,
    },
    {
        "AAC_ISO",
        "mp4stream",
        "audio/mp4",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_MP4A,
    },
    {
        "MP3",
        "ts",
        "audio/mpeg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_MP3,
    },
    {
        "MP3",
        "ts",
        "audio/mpeg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_MPGA,
    },
    {
        "MP3X",
        "ts",
        "audio/mpeg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_MPGA,
    },
    {
        "MP3X",
        "ts",
        "audio/mpeg",
        DLNA_CLASS_AUDIO,
        VLC_CODEC_NONE,
        VLC_CODEC_MP3,
    },

    //------ Video Profiles ------//

    /**
     * MPEG-2 HD/SD video wrapped in MPEG-2 transport stream as constrained by
     * SCTE-43 standards, with AC-3 audio, without a timestamp field
     */
    {
        "MPEG_TS_NA_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_MP2V,
        VLC_CODEC_A52,
    },
    /**
     * North America region profile for MPEG-2 HD
     * 3Dframe-compatible video with AC-3 audio,
     * utilizing a DLNA Transport Packet without a Timestamp field
     */
    {
        "MPEG_TS_NA_3DFC_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_MP2V,
        VLC_CODEC_A52,
    },
    /**
     * MPEG-2 Video, wrapped in MPEG-2 transport stream, Main Profile,
     * Standard Definition, with AC-3 audio, without a timestamp field.
     */
    {
        "MPEG_TS_SD_EU_AC3_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_MP2V,
        VLC_CODEC_A52,
    },
    /**
     * MPEG-2 Video, wrapped in MPEG-2 transport stream, Main Profile
     * Standard Definition, with AC-3 audio, with a valid non-zero timestamp
     * field.
     */
    {
        "MPEG_TS_SD_EU_AC3_T",
        "ts",
        "video/mpeg",
        VLC_CODEC_MP2V,
        VLC_CODEC_A52,
    },
    /**
     * MPEG-2 Main Profile at Main, High-1 440 and High Level with MPEG-2 AAC
     * encapsulated in MPEG-2 TS with valid timestamp
     */
    {
        "MPEG_TS_JP_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_MP2V,
        VLC_CODEC_MP4A,
    },
    /**
     * MPEG-2 Video, encapsulated in MPEG-2 transport stream, Main Profile
     * at Main Level, with MPEG-1 L2 audio, with a valid non-zero timestamp
     * field.
     */
    {
        "MPEG_TS_SD_JP_MPEG1_L2_T",
        "ts",
        "video/mpeg",
        VLC_CODEC_MP2V,
        VLC_CODEC_MP2,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio, with a valid
     * non-zero timestamp field.
     */
    {
        "AVC_TS_NA_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio, with a valid
     * non-zero timestamp field.
     */
    {
        "AVC_TS_NA_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio, with a valid
     * non-zero timestamp field.
     */
    {
        "AVC_TS_NA_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio, with a valid
     * non-zero timestamp field.
     */
    {
        "AVC_TS_NA_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_H264,
        VLC_CODEC_MP2,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio,
     * without a timestamp field.
     */
    {
        "AVC_TS_NA_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio,
     * without a timestamp field.
     */
    {
        "AVC_TS_NA_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio,
     * without a timestamp field.
     */
    {
        "AVC_TS_NA_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC video wrapped in MPEG-2 transport stream, as
     * constrained by SCTE standards,
     * with AC-3, Enhanced AC-3, MPEG-4 HE-AAC
     * v2 or MPEG-1 Layer II audio,
     * without a timestamp field.
     */
    {
        "AVC_TS_NA_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_MP2,
    },
    /**
     * AVC high profile, HD 3D frame-compatible video
     * wrapped in MPEG-2 transport stream with AC-3,
     * Enhanced AC-3 or HE AAC audio, without a Timestamp field.
     */
    {
        "AVC_TS_NA_3DFC_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC high profile, HD 3D frame-compatible video
     * wrapped in MPEG-2 transport stream with AC-3,
     * Enhanced AC-3 or HE AAC audio, without a Timestamp field.
     */
    {
        "AVC_TS_NA_3DFC_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * AVC high profile, HD 3D frame-compatible video
     * wrapped in MPEG-2 transport stream with AC-3,
     * Enhanced AC-3 or HE AAC audio, without a Timestamp field.
     */
    {
        "AVC_TS_NA_3DFC_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC video wrapped in MPEG-2 TS transport stream
     * as constrained by DVB standards, with AC-3,
     * Enhanced AC-3 and MPEG-4 HE-AAC v2 audio.
     */
    {
        "AVC_TS_EU_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC video wrapped in MPEG-2 TS transport stream
     * as constrained by DVB standards, with AC-3,
     * Enhanced AC-3 and MPEG-4 HE-AAC v2 audio.
     */
    {
        "AVC_TS_EU_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * AVC video wrapped in MPEG-2 TS transport stream
     * as constrained by DVB standards, with AC-3,
     * Enhanced AC-3 and MPEG-4 HE-AAC v2 audio.
     */
    {
        "AVC_TS_EU_ISO",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * European region profile for HD/SD resolution.
     * AVC video using the Scalable High Profile (SVC)
     * wrapped in MPEG-2 Transport Stream with AC-3 audio,
     * with a valid non-zero timestamp field.
     */
    {
        "AVC_TS_SHP_HD_EU_AC3_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * European region profile for HD/SD resolution. AVC video using the
     * Scalable High Profile (SVC) wrapped in MPEG-2 Transport Stream
     * with MPEG-4 HE-AAC v2 Level 4 audio, with a valid non-zero timestamp field.
     */
    {
        "AVC_TS_SHP_HD_EU_HEAACv2_L4_T",
        "ts",
        "video/vnd.dlna.mpeg-tts",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC HD/SD video with AC-3 audio including dual-mono channel mode, wrapped
     * in MPEG-2 TS with valid timestamp for 24 Hz system.
     */
    {
        "AVC_TS_HD_24_AC3_X_T",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC HD/SD video with AC-3 audio including dual-mono channel mode, wrapped
     * in MPEG-2 TS with valid timestamp for 50 Hz system.
     */
    {
        "AVC_TS_HD_50_AC3_X_T",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC HD/SD video with AC-3 audio including dual-mono channel mode,
     * wrapped in MPEG-2 TS with valid timestamp for 60 Hz system.
     */
    {
        "AVC_TS_HD_60_AC3_X_T",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC wrapped in MPEG-2 transport stream, Main/High profile, with
     * MPEG-2 AAC audio, with a valid non-zero timestamp field.
     */
    {
        "AVC_TS_JP_AAC_T",
        "ts",
        "video/mpeg",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC video with MPEG-4 HE-AAC v2
     * and Enhanced AC-3 audio, encapsulated in MP4.
     */
    {
        "AVC_MP4_EU",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC video with MPEG-4 HE-AAC v2
     * and Enhanced AC-3 audio, encapsulated in MP4.
     */
    {
        "AVC_MP4_EU",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_A52,
    },
    /**
     * AVC wrapped in MP4 baseline profile CIF15 with AAC LC audio.
     */
    {
        "AVC_MP4_BL_CIF15_AAC_520",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC wrapped in MP4 baseline profile CIF30 with AAC LC audio.
     */
    {
        "AVC_MP4_BL_CIF30_AAC_940",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile video with Enhanced AC-3 audio, encapsulated in MP4.
     */
    {
        "AVC_MP4_MP_SD_EAC3",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * AVC High Profile HD video with MPEG-4 AAC audio, encapsulated in MP4.
     */
    {
        "AVC_MP4_MP_SD",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC High Profile video with Enhanced AC-3 audio, encapsulated in MP4.
     */
    {
        "AVC_MP4_HP_HD_EAC3",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_EAC3,
    },
    /**
     * AVC high profile video with HE AAC v2 stereo or HE AAC 7.1-channel audio,
     * encapsulated in an MP4 file.
     */
    {
        "AVC_MP4_HD_HEAACv2_L6",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile video with MPEG-4 AAC audio, encapsulated in MKV.
     */
    {
        "AVC_MKV_MP_HD_AAC_MULT5",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile video with MPEG-4 HE-AAC audio, encapsulated in MKV.
     */
    {
        "AVC_MKV_MP_HD_HEAAC_L4",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile video with MP3 audio, encapsulated in MKV
     */
    {
        "AVC_MKV_MP_HD_MPEG1_L3",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MPGA,
    },
    /**
     * AVC Main Profile video with MP3 audio, encapsulated in MKV
     */
    {
        "AVC_MKV_MP_HD_MPEG1_L3",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MP3,
    },
    /**
     * AVC High Profile video with MP3 audio, encapsulated in MKV
     */
    {
        "AVC_MKV_HP_HD_MPEG1_L3",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MPGA,
    },
    /**
     * AVC High Profile video with MP3 audio, encapsulated in MKV
     */
    {
        "AVC_MKV_HP_HD_MPEG1_L3",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MP3,
    },
    /**
     * AVC High Profile video with MPEG-4 AAC audio, encapsulated in MKV.
     */
    {
        "AVC_MKV_HP_HD_AAC_MULT5",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC High Profile video with MPEG-4 HE-AAC audio, encapsulated in MKV.
     */
    {
        "AVC_MKV_HP_HD_HEAAC_L4",
        "avformat{mux=matroska,options={live=1}}",
        "video/x-matroska",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC SD video wrapped in MPEG-2 transport stream, as constrained by
     * SCTE standards, with AAC audio and optional enhanced audio,
     * without a timestamp field and constrained to an SD video profile
     */
    {
        "DASH_AVC_TS_SD_ISO",
        "ts",
        "video/mp2t",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC HD video wrapped in MPEG-2 transport stream, as constrained by
     * SCTE standards, with AAC audio and optional enhanced audio,
     * without a timestamp field and constrained to an HD video profile
     */
    {
        "DASH_AVC_TS_HD_ISO",
        "ts",
        "video/mp2t",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile SD video with AAC audio and optional enhanced audio,
     * encapsulated in MP4 conforming to the additional DECE CFF requirements
     * including encryption and constrained to the DECE SD profile requirements.
     */
    {
        "DASH_AVC_MP4_SD",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile HD video with AAC audio and optional enhanced audio,
     * encapsulated in MP4 conforming to the additional DECE CFF requirements
     * including encryption and constrained to the DECE HD profile requirements.
     */
    {
        "DASH_AVC_MP4_HD",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC Main Profile video with HE AACv2 L4 audio, encapsulated in MP4.
     */
    {
        "DASH_AVC_MP4_SD_HEAACv2_L4",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC High Profile video with HE AACv2 L4 audio, encapsulated in MP4.
     */
    {
        "DASH_AVC_MP4_HD_HEAACv2_L4",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * AVC high profile video with HE AAC v2 stereo or HE AAC 7.1-channel audio,
     * encapsulated in an MP4 file suitable for MPEG DASH conformant adaptive delivery
     */
    {
        "DASH_AVC_MP4_HD_HEAACv2_L6",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_H264,
        VLC_CODEC_MP4A,
    },
    /**
     * HEVC High Profile HD and UHD video with AC-3,
     * Enhanced AC-3, HE-AACv2 or MPEG-1 LII audio,
     * encapsulated in MP4.
     */
    {
        "DASH_HEVC_MP4_UHD_NA",
        "mp4stream",
        "video/mp4",
        VLC_CODEC_HEVC,
        VLC_CODEC_MP2,
    },
};

#endif /* DLNA_PROFILES_H */
