/*
 *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "modules/audio_coding/neteq/audio_decoder_impl.h"

#include <assert.h>

#include "modules/audio_coding/codecs/g711/audio_decoder_pcm.h"
#include "rtc_base/checks.h"
#ifdef WEBRTC_CODEC_G722
#include "modules/audio_coding/codecs/g722/audio_decoder_g722.h"
#endif
#ifdef WEBRTC_CODEC_ILBC
#include "modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h"
#endif
#ifdef WEBRTC_CODEC_ISACFX
#include "modules/audio_coding/codecs/isac/fix/include/audio_decoder_isacfix.h"  // nogncheck
#include "modules/audio_coding/codecs/isac/fix/include/audio_encoder_isacfix.h"  // nogncheck
#endif
#ifdef WEBRTC_CODEC_ISAC
#include "modules/audio_coding/codecs/isac/main/include/audio_decoder_isac.h"  // nogncheck
#include "modules/audio_coding/codecs/isac/main/include/audio_encoder_isac.h"  // nogncheck
#endif
#ifdef WEBRTC_CODEC_OPUS
#include "modules/audio_coding/codecs/opus/audio_decoder_opus.h"
#endif
#include "modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h"

namespace webrtc {

bool CodecSupported(NetEqDecoder codec_type) {
  switch (codec_type) {
    case NetEqDecoder::kDecoderPCMu:
    case NetEqDecoder::kDecoderPCMa:
    case NetEqDecoder::kDecoderPCMu_2ch:
    case NetEqDecoder::kDecoderPCMa_2ch:
#ifdef WEBRTC_CODEC_ILBC
    case NetEqDecoder::kDecoderILBC:
#endif
#if defined(WEBRTC_CODEC_ISACFX) || defined(WEBRTC_CODEC_ISAC)
    case NetEqDecoder::kDecoderISAC:
#endif
#ifdef WEBRTC_CODEC_ISAC
    case NetEqDecoder::kDecoderISACswb:
#endif
    case NetEqDecoder::kDecoderPCM16B:
    case NetEqDecoder::kDecoderPCM16Bwb:
    case NetEqDecoder::kDecoderPCM16Bswb32kHz:
    case NetEqDecoder::kDecoderPCM16Bswb48kHz:
    case NetEqDecoder::kDecoderPCM16B_2ch:
    case NetEqDecoder::kDecoderPCM16Bwb_2ch:
    case NetEqDecoder::kDecoderPCM16Bswb32kHz_2ch:
    case NetEqDecoder::kDecoderPCM16Bswb48kHz_2ch:
    case NetEqDecoder::kDecoderPCM16B_5ch:
#ifdef WEBRTC_CODEC_G722
    case NetEqDecoder::kDecoderG722:
    case NetEqDecoder::kDecoderG722_2ch:
#endif
#ifdef WEBRTC_CODEC_OPUS
    case NetEqDecoder::kDecoderOpus:
    case NetEqDecoder::kDecoderOpus_2ch:
#endif
    case NetEqDecoder::kDecoderRED:
    case NetEqDecoder::kDecoderAVT:
    case NetEqDecoder::kDecoderAVT16kHz:
    case NetEqDecoder::kDecoderAVT32kHz:
    case NetEqDecoder::kDecoderAVT48kHz:
    case NetEqDecoder::kDecoderCNGnb:
    case NetEqDecoder::kDecoderCNGwb:
    case NetEqDecoder::kDecoderCNGswb32kHz:
    case NetEqDecoder::kDecoderCNGswb48kHz:
    case NetEqDecoder::kDecoderArbitrary: {
      return true;
    }
    default: {
      return false;
    }
  }
}

}  // namespace webrtc
