// Copyright 2016 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.

#include "media/base/audio_codecs.h"

#include "base/logging.h"
#include "base/strings/string_util.h"

namespace media {

// These names come from src/third_party/ffmpeg/libavcodec/codec_desc.c
std::string GetCodecName(AudioCodec codec) {
  switch (codec) {
    case kUnknownAudioCodec:
      return "unknown";
    case kCodecAAC:
      return "aac";
    case kCodecMP3:
      return "mp3";
    case kCodecPCM:
    case kCodecPCM_S16BE:
    case kCodecPCM_S24BE:
      return "pcm";
    case kCodecVorbis:
      return "vorbis";
    case kCodecFLAC:
      return "flac";
    case kCodecAMR_NB:
      return "amr_nb";
    case kCodecAMR_WB:
      return "amr_wb";
    case kCodecPCM_MULAW:
      return "pcm_mulaw";
    case kCodecGSM_MS:
      return "gsm_ms";
    case kCodecOpus:
      return "opus";
    case kCodecPCM_ALAW:
      return "pcm_alaw";
    case kCodecEAC3:
      return "eac3";
    case kCodecALAC:
      return "alac";
    case kCodecAC3:
      return "ac3";
  }
  NOTREACHED();
  return "";
}

AudioCodec StringToAudioCodec(const std::string& codec_id) {
  if (codec_id == "aac")
    return kCodecAAC;
  if (codec_id == "ac-3" || codec_id == "mp4a.A5" || codec_id == "mp4a.a5")
    return kCodecAC3;
  if (codec_id == "ec-3" || codec_id == "mp4a.A6" || codec_id == "mp4a.a6")
    return kCodecEAC3;
  if (codec_id == "mp3" || codec_id == "mp4a.69" || codec_id == "mp4a.6B")
    return kCodecMP3;
  if (codec_id == "alac")
    return kCodecALAC;
  if (codec_id == "flac")
    return kCodecFLAC;
  if (codec_id == "opus")
    return kCodecOpus;
  if (codec_id == "vorbis")
    return kCodecVorbis;
  if (base::StartsWith(codec_id, "mp4a.40.", base::CompareCase::SENSITIVE))
    return kCodecAAC;
  return kUnknownAudioCodec;
}

}  // namespace media
