// Copyright (c) 2013 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_BASE_CONTAINER_NAMES_H_
#define MEDIA_BASE_CONTAINER_NAMES_H_

#include <stdint.h>

#include "media/base/media_export.h"

namespace media {

namespace container_names {

// This is the set of input container formats detected for logging purposes. Not
// all of these are enabled (and it varies by product). Any additions need to be
// done at the end of the list (before CONTAINER_MAX). This list must be kept in
// sync with the enum definition "MediaContainers" in
// tools/metrics/histograms/histograms.xml.
enum MediaContainerName {
  CONTAINER_UNKNOWN,       // Unknown
  CONTAINER_AAC,           // AAC (Advanced Audio Coding)
  CONTAINER_AC3,           // AC-3
  CONTAINER_AIFF,          // AIFF (Audio Interchange File Format)
  CONTAINER_AMR,           // AMR (Adaptive Multi-Rate Audio)
  CONTAINER_APE,           // APE (Monkey's Audio)
  CONTAINER_ASF,           // ASF (Advanced / Active Streaming Format)
  CONTAINER_ASS,           // SSA (SubStation Alpha) subtitle
  CONTAINER_AVI,           // AVI (Audio Video Interleaved)
  CONTAINER_BINK,          // Bink
  CONTAINER_CAF,           // CAF (Apple Core Audio Format)
  CONTAINER_DTS,           // DTS
  CONTAINER_DTSHD,         // DTS-HD
  CONTAINER_DV,            // DV (Digital Video)
  CONTAINER_DXA,           // DXA
  CONTAINER_EAC3,          // Enhanced AC-3
  CONTAINER_FLAC,          // FLAC (Free Lossless Audio Codec)
  CONTAINER_FLV,           // FLV (Flash Video)
  CONTAINER_GSM,           // GSM (Global System for Mobile Audio)
  CONTAINER_H261,          // H.261
  CONTAINER_H263,          // H.263
  CONTAINER_H264,          // H.264
  CONTAINER_HLS,           // HLS (Apple HTTP Live Streaming PlayList)
  CONTAINER_IRCAM,         // Berkeley/IRCAM/CARL Sound Format
  CONTAINER_MJPEG,         // MJPEG video
  CONTAINER_MOV,           // QuickTime / MOV / MPEG4
  CONTAINER_MP3,           // MP3 (MPEG audio layer 2/3)
  CONTAINER_MPEG2PS,       // MPEG-2 Program Stream
  CONTAINER_MPEG2TS,       // MPEG-2 Transport Stream
  CONTAINER_MPEG4BS,       // MPEG-4 Bitstream
  CONTAINER_OGG,           // Ogg
  CONTAINER_RM,            // RM (RealMedia)
  CONTAINER_SRT,           // SRT (SubRip subtitle)
  CONTAINER_SWF,           // SWF (ShockWave Flash)
  CONTAINER_VC1,           // VC-1
  CONTAINER_WAV,           // WAV / WAVE (Waveform Audio)
  CONTAINER_WEBM,          // Matroska / WebM
  CONTAINER_WTV,           // WTV (Windows Television)
  CONTAINER_DASH,          // DASH (MPEG-DASH)
  CONTAINER_SMOOTHSTREAM,  // SmoothStreaming
  CONTAINER_MAX = CONTAINER_SMOOTHSTREAM  // Must be last
};

// Minimum size considered for processing.
enum { kMinimumContainerSize = 12 };

// Determine the container type.
MEDIA_EXPORT MediaContainerName DetermineContainer(const uint8_t* buffer,
                                                   int buffer_size);

}  // namespace container_names

}  // namespace media

#endif  // MEDIA_BASE_CONTAINER_NAMES_H_
