# Copyright (c) 2014 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.

import("../../build/webrtc.gni")
import("audio_coding.gni")
import("//build/config/arm.gni")
import("//third_party/protobuf/proto_library.gni")

audio_codec_deps = [
  ":cng",
  ":g711",
  ":pcm16b",
]
if (rtc_include_ilbc) {
  audio_codec_deps += [ ":ilbc" ]
}
if (rtc_include_opus) {
  audio_codec_deps += [ ":webrtc_opus" ]
}
if (!build_with_mozilla) {
  if (current_cpu == "arm") {
    audio_codec_deps += [ ":isac_fix" ]
  } else {
    audio_codec_deps += [ ":isac" ]
  }
  audio_codec_deps += [ ":g722" ]
}
if (!build_with_mozilla && !build_with_chromium) {
  audio_codec_deps += [ ":red" ]
}
audio_coding_deps = audio_codec_deps + [
                      "../..:webrtc_common",
                      "../../common_audio",
                      "../../system_wrappers",
                    ]

rtc_static_library("audio_decoder_factory_interface") {
  sources = [
    "codecs/audio_decoder_factory.h",
    "codecs/audio_format.cc",
    "codecs/audio_format.h",
  ]
  deps = [
    "../..:webrtc_common",
  ]
}

rtc_static_library("builtin_audio_decoder_factory") {
  sources = [
    "codecs/builtin_audio_decoder_factory.cc",
    "codecs/builtin_audio_decoder_factory.h",
  ]
  deps = [
           "../..:webrtc_common",
           ":audio_decoder_factory_interface",
         ] + audio_codec_deps
  defines = audio_codec_defines
}

rtc_static_library("rent_a_codec") {
  sources = [
    "acm2/acm_codec_database.cc",
    "acm2/acm_codec_database.h",
    "acm2/rent_a_codec.cc",
    "acm2/rent_a_codec.h",
  ]
  deps = [ "../..:webrtc_common" ] + audio_codec_deps
  defines = audio_codec_defines
}

config("audio_coding_config") {
  include_dirs = [
    "include",
    "../include",
  ]
}

rtc_static_library("audio_coding") {
  sources = [
    "acm2/acm_common_defs.h",
    "acm2/acm_receiver.cc",
    "acm2/acm_receiver.h",
    "acm2/acm_resampler.cc",
    "acm2/acm_resampler.h",
    "acm2/audio_coding_module.cc",
    "acm2/call_statistics.cc",
    "acm2/call_statistics.h",
    "acm2/codec_manager.cc",
    "acm2/codec_manager.h",
    "acm2/initial_delay_manager.cc",
    "acm2/initial_delay_manager.h",
    "include/audio_coding_module.h",
    "include/audio_coding_module_typedefs.h",
  ]

  defines = []

  public_configs = [ ":audio_coding_config" ]

  if (rtc_include_opus) {
    public_deps = [
      ":webrtc_opus",
    ]
  }

  if (is_win) {
    cflags = [
      # TODO(kjellander): Bug 261: fix this warning.
      "/wd4373",  # virtual function override.
    ]
  }

  deps = audio_coding_deps + [
           ":audio_network_adaptor",
           ":neteq",
           ":rent_a_codec",
           "../..:rtc_event_log",
         ]
  defines = audio_coding_defines
}

rtc_static_library("audio_decoder_interface") {
  sources = [
    "codecs/audio_decoder.cc",
    "codecs/audio_decoder.h",
    "codecs/legacy_encoded_audio_frame.cc",
    "codecs/legacy_encoded_audio_frame.h",
  ]
  deps = [
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
  ]
}

rtc_static_library("audio_encoder_interface") {
  sources = [
    "codecs/audio_encoder.cc",
    "codecs/audio_encoder.h",
  ]
  deps = [
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
  ]
}

config("cng_config") {
  include_dirs = [
    "../../..",
    "codecs/cng/include",
  ]
}

rtc_static_library("cng") {
  sources = [
    "codecs/cng/audio_encoder_cng.cc",
    "codecs/cng/audio_encoder_cng.h",
    "codecs/cng/webrtc_cng.cc",
    "codecs/cng/webrtc_cng.h",
  ]

  public_configs = [ ":cng_config" ]

  deps = [
    ":audio_encoder_interface",
    "../../common_audio",
  ]
}

config("red_config") {
  include_dirs = [ "codecs/red" ]
}

rtc_static_library("red") {
  sources = [
    "codecs/red/audio_encoder_copy_red.cc",
    "codecs/red/audio_encoder_copy_red.h",
  ]

  public_configs = [ ":red_config" ]

  deps = [
    ":audio_encoder_interface",
    "../../common_audio",
  ]
}

config("g711_config") {
  include_dirs = [
    "../../..",
    "codecs/g711/include",
  ]
}

rtc_static_library("g711") {
  sources = [
    "codecs/g711/audio_decoder_pcm.cc",
    "codecs/g711/audio_decoder_pcm.h",
    "codecs/g711/audio_encoder_pcm.cc",
    "codecs/g711/audio_encoder_pcm.h",
    "codecs/g711/g711.c",
    "codecs/g711/g711.h",
    "codecs/g711/g711_interface.c",
    "codecs/g711/g711_interface.h",
  ]

  public_configs = [ ":g711_config" ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
  ]
}

config("g722_config") {
  include_dirs = [
    "../../..",
    "codecs/g722/include",
  ]
}

rtc_static_library("g722") {
  sources = [
    "codecs/g722/audio_decoder_g722.cc",
    "codecs/g722/audio_decoder_g722.h",
    "codecs/g722/audio_encoder_g722.cc",
    "codecs/g722/audio_encoder_g722.h",
    "codecs/g722/g722_decode.c",
    "codecs/g722/g722_enc_dec.h",
    "codecs/g722/g722_encode.c",
    "codecs/g722/g722_interface.c",
    "codecs/g722/g722_interface.h",
  ]

  public_configs = [ ":g722_config" ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
  ]
}

config("ilbc_config") {
  include_dirs = [
    "../../..",
    "codecs/ilbc/include",
  ]
}

rtc_static_library("ilbc") {
  sources = [
    "codecs/ilbc/abs_quant.c",
    "codecs/ilbc/abs_quant.h",
    "codecs/ilbc/abs_quant_loop.c",
    "codecs/ilbc/abs_quant_loop.h",
    "codecs/ilbc/audio_decoder_ilbc.cc",
    "codecs/ilbc/audio_decoder_ilbc.h",
    "codecs/ilbc/audio_encoder_ilbc.cc",
    "codecs/ilbc/audio_encoder_ilbc.h",
    "codecs/ilbc/augmented_cb_corr.c",
    "codecs/ilbc/augmented_cb_corr.h",
    "codecs/ilbc/bw_expand.c",
    "codecs/ilbc/bw_expand.h",
    "codecs/ilbc/cb_construct.c",
    "codecs/ilbc/cb_construct.h",
    "codecs/ilbc/cb_mem_energy.c",
    "codecs/ilbc/cb_mem_energy.h",
    "codecs/ilbc/cb_mem_energy_augmentation.c",
    "codecs/ilbc/cb_mem_energy_augmentation.h",
    "codecs/ilbc/cb_mem_energy_calc.c",
    "codecs/ilbc/cb_mem_energy_calc.h",
    "codecs/ilbc/cb_search.c",
    "codecs/ilbc/cb_search.h",
    "codecs/ilbc/cb_search_core.c",
    "codecs/ilbc/cb_search_core.h",
    "codecs/ilbc/cb_update_best_index.c",
    "codecs/ilbc/cb_update_best_index.h",
    "codecs/ilbc/chebyshev.c",
    "codecs/ilbc/chebyshev.h",
    "codecs/ilbc/comp_corr.c",
    "codecs/ilbc/comp_corr.h",
    "codecs/ilbc/constants.c",
    "codecs/ilbc/constants.h",
    "codecs/ilbc/create_augmented_vec.c",
    "codecs/ilbc/create_augmented_vec.h",
    "codecs/ilbc/decode.c",
    "codecs/ilbc/decode.h",
    "codecs/ilbc/decode_residual.c",
    "codecs/ilbc/decode_residual.h",
    "codecs/ilbc/decoder_interpolate_lsf.c",
    "codecs/ilbc/decoder_interpolate_lsf.h",
    "codecs/ilbc/defines.h",
    "codecs/ilbc/do_plc.c",
    "codecs/ilbc/do_plc.h",
    "codecs/ilbc/encode.c",
    "codecs/ilbc/encode.h",
    "codecs/ilbc/energy_inverse.c",
    "codecs/ilbc/energy_inverse.h",
    "codecs/ilbc/enh_upsample.c",
    "codecs/ilbc/enh_upsample.h",
    "codecs/ilbc/enhancer.c",
    "codecs/ilbc/enhancer.h",
    "codecs/ilbc/enhancer_interface.c",
    "codecs/ilbc/enhancer_interface.h",
    "codecs/ilbc/filtered_cb_vecs.c",
    "codecs/ilbc/filtered_cb_vecs.h",
    "codecs/ilbc/frame_classify.c",
    "codecs/ilbc/frame_classify.h",
    "codecs/ilbc/gain_dequant.c",
    "codecs/ilbc/gain_dequant.h",
    "codecs/ilbc/gain_quant.c",
    "codecs/ilbc/gain_quant.h",
    "codecs/ilbc/get_cd_vec.c",
    "codecs/ilbc/get_cd_vec.h",
    "codecs/ilbc/get_lsp_poly.c",
    "codecs/ilbc/get_lsp_poly.h",
    "codecs/ilbc/get_sync_seq.c",
    "codecs/ilbc/get_sync_seq.h",
    "codecs/ilbc/hp_input.c",
    "codecs/ilbc/hp_input.h",
    "codecs/ilbc/hp_output.c",
    "codecs/ilbc/hp_output.h",
    "codecs/ilbc/ilbc.c",
    "codecs/ilbc/ilbc.h",
    "codecs/ilbc/index_conv_dec.c",
    "codecs/ilbc/index_conv_dec.h",
    "codecs/ilbc/index_conv_enc.c",
    "codecs/ilbc/index_conv_enc.h",
    "codecs/ilbc/init_decode.c",
    "codecs/ilbc/init_decode.h",
    "codecs/ilbc/init_encode.c",
    "codecs/ilbc/init_encode.h",
    "codecs/ilbc/interpolate.c",
    "codecs/ilbc/interpolate.h",
    "codecs/ilbc/interpolate_samples.c",
    "codecs/ilbc/interpolate_samples.h",
    "codecs/ilbc/lpc_encode.c",
    "codecs/ilbc/lpc_encode.h",
    "codecs/ilbc/lsf_check.c",
    "codecs/ilbc/lsf_check.h",
    "codecs/ilbc/lsf_interpolate_to_poly_dec.c",
    "codecs/ilbc/lsf_interpolate_to_poly_dec.h",
    "codecs/ilbc/lsf_interpolate_to_poly_enc.c",
    "codecs/ilbc/lsf_interpolate_to_poly_enc.h",
    "codecs/ilbc/lsf_to_lsp.c",
    "codecs/ilbc/lsf_to_lsp.h",
    "codecs/ilbc/lsf_to_poly.c",
    "codecs/ilbc/lsf_to_poly.h",
    "codecs/ilbc/lsp_to_lsf.c",
    "codecs/ilbc/lsp_to_lsf.h",
    "codecs/ilbc/my_corr.c",
    "codecs/ilbc/my_corr.h",
    "codecs/ilbc/nearest_neighbor.c",
    "codecs/ilbc/nearest_neighbor.h",
    "codecs/ilbc/pack_bits.c",
    "codecs/ilbc/pack_bits.h",
    "codecs/ilbc/poly_to_lsf.c",
    "codecs/ilbc/poly_to_lsf.h",
    "codecs/ilbc/poly_to_lsp.c",
    "codecs/ilbc/poly_to_lsp.h",
    "codecs/ilbc/refiner.c",
    "codecs/ilbc/refiner.h",
    "codecs/ilbc/simple_interpolate_lsf.c",
    "codecs/ilbc/simple_interpolate_lsf.h",
    "codecs/ilbc/simple_lpc_analysis.c",
    "codecs/ilbc/simple_lpc_analysis.h",
    "codecs/ilbc/simple_lsf_dequant.c",
    "codecs/ilbc/simple_lsf_dequant.h",
    "codecs/ilbc/simple_lsf_quant.c",
    "codecs/ilbc/simple_lsf_quant.h",
    "codecs/ilbc/smooth.c",
    "codecs/ilbc/smooth.h",
    "codecs/ilbc/smooth_out_data.c",
    "codecs/ilbc/smooth_out_data.h",
    "codecs/ilbc/sort_sq.c",
    "codecs/ilbc/sort_sq.h",
    "codecs/ilbc/split_vq.c",
    "codecs/ilbc/split_vq.h",
    "codecs/ilbc/state_construct.c",
    "codecs/ilbc/state_construct.h",
    "codecs/ilbc/state_search.c",
    "codecs/ilbc/state_search.h",
    "codecs/ilbc/swap_bytes.c",
    "codecs/ilbc/swap_bytes.h",
    "codecs/ilbc/unpack_bits.c",
    "codecs/ilbc/unpack_bits.h",
    "codecs/ilbc/vq3.c",
    "codecs/ilbc/vq3.h",
    "codecs/ilbc/vq4.c",
    "codecs/ilbc/vq4.h",
    "codecs/ilbc/window32_w32.c",
    "codecs/ilbc/window32_w32.h",
    "codecs/ilbc/xcorr_coef.c",
    "codecs/ilbc/xcorr_coef.h",
  ]

  public_configs = [ ":ilbc_config" ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
    "../../base:rtc_base_approved",
    "../../common_audio",
  ]
}

rtc_static_library("isac_common") {
  sources = [
    "codecs/isac/audio_encoder_isac_t.h",
    "codecs/isac/audio_encoder_isac_t_impl.h",
    "codecs/isac/locked_bandwidth_info.cc",
    "codecs/isac/locked_bandwidth_info.h",
  ]
}

config("isac_config") {
  include_dirs = [
    "../../..",
    "codecs/isac/main/include",
  ]
}

rtc_static_library("isac") {
  sources = [
    "codecs/isac/main/include/audio_decoder_isac.h",
    "codecs/isac/main/include/audio_encoder_isac.h",
    "codecs/isac/main/include/isac.h",
    "codecs/isac/main/source/arith_routines.c",
    "codecs/isac/main/source/arith_routines.h",
    "codecs/isac/main/source/arith_routines_hist.c",
    "codecs/isac/main/source/arith_routines_logist.c",
    "codecs/isac/main/source/audio_decoder_isac.cc",
    "codecs/isac/main/source/audio_encoder_isac.cc",
    "codecs/isac/main/source/bandwidth_estimator.c",
    "codecs/isac/main/source/bandwidth_estimator.h",
    "codecs/isac/main/source/codec.h",
    "codecs/isac/main/source/crc.c",
    "codecs/isac/main/source/crc.h",
    "codecs/isac/main/source/decode.c",
    "codecs/isac/main/source/decode_bwe.c",
    "codecs/isac/main/source/encode.c",
    "codecs/isac/main/source/encode_lpc_swb.c",
    "codecs/isac/main/source/encode_lpc_swb.h",
    "codecs/isac/main/source/entropy_coding.c",
    "codecs/isac/main/source/entropy_coding.h",
    "codecs/isac/main/source/fft.c",
    "codecs/isac/main/source/fft.h",
    "codecs/isac/main/source/filter_functions.c",
    "codecs/isac/main/source/filterbank_tables.c",
    "codecs/isac/main/source/filterbank_tables.h",
    "codecs/isac/main/source/filterbanks.c",
    "codecs/isac/main/source/intialize.c",
    "codecs/isac/main/source/isac.c",
    "codecs/isac/main/source/isac_float_type.h",
    "codecs/isac/main/source/lattice.c",
    "codecs/isac/main/source/lpc_analysis.c",
    "codecs/isac/main/source/lpc_analysis.h",
    "codecs/isac/main/source/lpc_gain_swb_tables.c",
    "codecs/isac/main/source/lpc_gain_swb_tables.h",
    "codecs/isac/main/source/lpc_shape_swb12_tables.c",
    "codecs/isac/main/source/lpc_shape_swb12_tables.h",
    "codecs/isac/main/source/lpc_shape_swb16_tables.c",
    "codecs/isac/main/source/lpc_shape_swb16_tables.h",
    "codecs/isac/main/source/lpc_tables.c",
    "codecs/isac/main/source/lpc_tables.h",
    "codecs/isac/main/source/os_specific_inline.h",
    "codecs/isac/main/source/pitch_estimator.c",
    "codecs/isac/main/source/pitch_estimator.h",
    "codecs/isac/main/source/pitch_filter.c",
    "codecs/isac/main/source/pitch_gain_tables.c",
    "codecs/isac/main/source/pitch_gain_tables.h",
    "codecs/isac/main/source/pitch_lag_tables.c",
    "codecs/isac/main/source/pitch_lag_tables.h",
    "codecs/isac/main/source/settings.h",
    "codecs/isac/main/source/spectrum_ar_model_tables.c",
    "codecs/isac/main/source/spectrum_ar_model_tables.h",
    "codecs/isac/main/source/structs.h",
    "codecs/isac/main/source/transform.c",
  ]

  if (is_linux) {
    libs = [ "m" ]
  }

  public_configs = [ ":isac_config" ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
    ":isac_common",
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
    "../../common_audio",
  ]
}

config("isac_fix_config") {
  include_dirs = [
    "../../..",
    "codecs/isac/fix/include",
  ]
}

rtc_static_library("isac_fix") {
  sources = [
    "codecs/isac/fix/include/audio_decoder_isacfix.h",
    "codecs/isac/fix/include/audio_encoder_isacfix.h",
    "codecs/isac/fix/include/isacfix.h",
    "codecs/isac/fix/source/arith_routines.c",
    "codecs/isac/fix/source/arith_routines_hist.c",
    "codecs/isac/fix/source/arith_routines_logist.c",
    "codecs/isac/fix/source/arith_routins.h",
    "codecs/isac/fix/source/audio_decoder_isacfix.cc",
    "codecs/isac/fix/source/audio_encoder_isacfix.cc",
    "codecs/isac/fix/source/bandwidth_estimator.c",
    "codecs/isac/fix/source/bandwidth_estimator.h",
    "codecs/isac/fix/source/codec.h",
    "codecs/isac/fix/source/decode.c",
    "codecs/isac/fix/source/decode_bwe.c",
    "codecs/isac/fix/source/decode_plc.c",
    "codecs/isac/fix/source/encode.c",
    "codecs/isac/fix/source/entropy_coding.c",
    "codecs/isac/fix/source/entropy_coding.h",
    "codecs/isac/fix/source/fft.c",
    "codecs/isac/fix/source/fft.h",
    "codecs/isac/fix/source/filterbank_tables.c",
    "codecs/isac/fix/source/filterbank_tables.h",
    "codecs/isac/fix/source/filterbanks.c",
    "codecs/isac/fix/source/filters.c",
    "codecs/isac/fix/source/initialize.c",
    "codecs/isac/fix/source/isac_fix_type.h",
    "codecs/isac/fix/source/isacfix.c",
    "codecs/isac/fix/source/lattice.c",
    "codecs/isac/fix/source/lattice_c.c",
    "codecs/isac/fix/source/lpc_masking_model.c",
    "codecs/isac/fix/source/lpc_masking_model.h",
    "codecs/isac/fix/source/lpc_tables.c",
    "codecs/isac/fix/source/lpc_tables.h",
    "codecs/isac/fix/source/pitch_estimator.c",
    "codecs/isac/fix/source/pitch_estimator.h",
    "codecs/isac/fix/source/pitch_estimator_c.c",
    "codecs/isac/fix/source/pitch_filter.c",
    "codecs/isac/fix/source/pitch_filter_c.c",
    "codecs/isac/fix/source/pitch_gain_tables.c",
    "codecs/isac/fix/source/pitch_gain_tables.h",
    "codecs/isac/fix/source/pitch_lag_tables.c",
    "codecs/isac/fix/source/pitch_lag_tables.h",
    "codecs/isac/fix/source/settings.h",
    "codecs/isac/fix/source/spectrum_ar_model_tables.c",
    "codecs/isac/fix/source/spectrum_ar_model_tables.h",
    "codecs/isac/fix/source/structs.h",
    "codecs/isac/fix/source/transform.c",
    "codecs/isac/fix/source/transform_tables.c",
  ]

  public_configs = [ ":isac_fix_config" ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
    ":isac_common",
    "../../common_audio",
    "../../system_wrappers",
  ]

  if (rtc_build_with_neon) {
    deps += [ ":isac_neon" ]
  }

  if (current_cpu == "arm" && arm_version >= 7) {
    sources += [
      "codecs/isac/fix/source/lattice_armv7.S",
      "codecs/isac/fix/source/pitch_filter_armv6.S",
    ]
    sources -= [
      "codecs/isac/fix/source/lattice_c.c",
      "codecs/isac/fix/source/pitch_filter_c.c",
    ]
  }

  if (current_cpu == "mipsel") {
    sources += [
      "codecs/isac/fix/source/entropy_coding_mips.c",
      "codecs/isac/fix/source/filters_mips.c",
      "codecs/isac/fix/source/lattice_mips.c",
      "codecs/isac/fix/source/pitch_estimator_mips.c",
      "codecs/isac/fix/source/transform_mips.c",
    ]
    sources -= [
      "codecs/isac/fix/source/lattice_c.c",
      "codecs/isac/fix/source/pitch_estimator_c.c",
    ]
    if (mips_dsp_rev > 0) {
      sources += [ "codecs/isac/fix/source/filterbanks_mips.c" ]
    }
    if (mips_dsp_rev > 1) {
      sources += [
        "codecs/isac/fix/source/lpc_masking_model_mips.c",
        "codecs/isac/fix/source/pitch_filter_mips.c",
      ]
      sources -= [ "codecs/isac/fix/source/pitch_filter_c.c" ]
    }
  }
}

if (rtc_build_with_neon) {
  rtc_static_library("isac_neon") {
    sources = [
      "codecs/isac/fix/source/entropy_coding_neon.c",
      "codecs/isac/fix/source/filterbanks_neon.c",
      "codecs/isac/fix/source/filters_neon.c",
      "codecs/isac/fix/source/lattice_neon.c",
      "codecs/isac/fix/source/transform_neon.c",
    ]

    if (current_cpu != "arm64") {
      # Enable compilation for the NEON instruction set. This is needed
      # since //build/config/arm.gni only enables NEON for iOS, not Android.
      # This provides the same functionality as webrtc/build/arm_neon.gypi.
      suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
      cflags = [ "-mfpu=neon" ]
    }

    # Disable LTO on NEON targets due to compiler bug.
    # TODO(fdegans): Enable this. See crbug.com/408997.
    if (rtc_use_lto) {
      cflags -= [
        "-flto",
        "-ffat-lto-objects",
      ]
    }

    deps = [
      "../../common_audio",
    ]
  }
}

config("pcm16b_config") {
  include_dirs = [
    "../../..",
    "codecs/pcm16b/include",
  ]
}

rtc_static_library("pcm16b") {
  sources = [
    "codecs/pcm16b/audio_decoder_pcm16b.cc",
    "codecs/pcm16b/audio_decoder_pcm16b.h",
    "codecs/pcm16b/audio_encoder_pcm16b.cc",
    "codecs/pcm16b/audio_encoder_pcm16b.h",
    "codecs/pcm16b/pcm16b.c",
    "codecs/pcm16b/pcm16b.h",
  ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
    ":g711",
  ]

  public_configs = [ ":pcm16b_config" ]
}

config("opus_config") {
  include_dirs = [ "../../.." ]
}

rtc_static_library("webrtc_opus") {
  sources = [
    "codecs/opus/audio_decoder_opus.cc",
    "codecs/opus/audio_decoder_opus.h",
    "codecs/opus/audio_encoder_opus.cc",
    "codecs/opus/audio_encoder_opus.h",
    "codecs/opus/opus_inst.h",
    "codecs/opus/opus_interface.c",
    "codecs/opus/opus_interface.h",
  ]

  deps = [
    ":audio_decoder_interface",
    ":audio_encoder_interface",
    "../../base:rtc_base_approved",
  ]

  if (rtc_build_opus) {
    public_deps = [
      rtc_opus_dir,
    ]
  } else if (build_with_mozilla) {
    include_dirs = [ getenv("DIST") + "/include/opus" ]
  }
}

if (rtc_enable_protobuf) {
  proto_library("ana_debug_dump_proto") {
    sources = [
      "audio_network_adaptor/debug_dump.proto",
    ]
    proto_out_dir = "webrtc/modules/audio_coding/audio_network_adaptor"
  }
}

source_set("audio_network_adaptor") {
  sources = [
    "audio_network_adaptor/audio_network_adaptor.cc",
    "audio_network_adaptor/audio_network_adaptor_impl.cc",
    "audio_network_adaptor/audio_network_adaptor_impl.h",
    "audio_network_adaptor/bitrate_controller.cc",
    "audio_network_adaptor/bitrate_controller.h",
    "audio_network_adaptor/channel_controller.cc",
    "audio_network_adaptor/channel_controller.h",
    "audio_network_adaptor/controller.cc",
    "audio_network_adaptor/controller.h",
    "audio_network_adaptor/controller_manager.cc",
    "audio_network_adaptor/controller_manager.h",
    "audio_network_adaptor/debug_dump_writer.cc",
    "audio_network_adaptor/debug_dump_writer.h",
    "audio_network_adaptor/dtx_controller.cc",
    "audio_network_adaptor/dtx_controller.h",
    "audio_network_adaptor/fec_controller.cc",
    "audio_network_adaptor/fec_controller.h",
    "audio_network_adaptor/frame_length_controller.cc",
    "audio_network_adaptor/frame_length_controller.h",
    "audio_network_adaptor/include/audio_network_adaptor.h",
    "audio_network_adaptor/smoothing_filter.cc",
    "audio_network_adaptor/smoothing_filter.h",
  ]
  configs += [ "../..:common_config" ]
  public_configs = [ "../..:common_inherited_config" ]

  if (rtc_enable_protobuf) {
    deps = [
      ":ana_debug_dump_proto",
    ]
    defines = [ "WEBRTC_AUDIO_NETWORK_ADAPTOR_DEBUG_DUMP" ]
  }
}

config("neteq_config") {
  include_dirs = [
    # Need Opus header files for the audio classifier.
    "//third_party/opus/src/celt",
    "//third_party/opus/src/src",
  ]
}

rtc_static_library("neteq") {
  sources = [
    "neteq/accelerate.cc",
    "neteq/accelerate.h",
    "neteq/audio_classifier.cc",
    "neteq/audio_classifier.h",
    "neteq/audio_decoder_impl.cc",
    "neteq/audio_decoder_impl.h",
    "neteq/audio_multi_vector.cc",
    "neteq/audio_multi_vector.h",
    "neteq/audio_vector.cc",
    "neteq/audio_vector.h",
    "neteq/background_noise.cc",
    "neteq/background_noise.h",
    "neteq/buffer_level_filter.cc",
    "neteq/buffer_level_filter.h",
    "neteq/comfort_noise.cc",
    "neteq/comfort_noise.h",
    "neteq/cross_correlation.cc",
    "neteq/cross_correlation.h",
    "neteq/decision_logic.cc",
    "neteq/decision_logic.h",
    "neteq/decision_logic_fax.cc",
    "neteq/decision_logic_fax.h",
    "neteq/decision_logic_normal.cc",
    "neteq/decision_logic_normal.h",
    "neteq/decoder_database.cc",
    "neteq/decoder_database.h",
    "neteq/defines.h",
    "neteq/delay_manager.cc",
    "neteq/delay_manager.h",
    "neteq/delay_peak_detector.cc",
    "neteq/delay_peak_detector.h",
    "neteq/dsp_helper.cc",
    "neteq/dsp_helper.h",
    "neteq/dtmf_buffer.cc",
    "neteq/dtmf_buffer.h",
    "neteq/dtmf_tone_generator.cc",
    "neteq/dtmf_tone_generator.h",
    "neteq/expand.cc",
    "neteq/expand.h",
    "neteq/include/neteq.h",
    "neteq/merge.cc",
    "neteq/merge.h",
    "neteq/nack_tracker.cc",
    "neteq/nack_tracker.h",
    "neteq/neteq.cc",
    "neteq/neteq_impl.cc",
    "neteq/neteq_impl.h",
    "neteq/normal.cc",
    "neteq/normal.h",
    "neteq/packet.cc",
    "neteq/packet.h",
    "neteq/packet_buffer.cc",
    "neteq/packet_buffer.h",
    "neteq/post_decode_vad.cc",
    "neteq/post_decode_vad.h",
    "neteq/preemptive_expand.cc",
    "neteq/preemptive_expand.h",
    "neteq/random_vector.cc",
    "neteq/random_vector.h",
    "neteq/red_payload_splitter.cc",
    "neteq/red_payload_splitter.h",
    "neteq/rtcp.cc",
    "neteq/rtcp.h",
    "neteq/statistics_calculator.cc",
    "neteq/statistics_calculator.h",
    "neteq/sync_buffer.cc",
    "neteq/sync_buffer.h",
    "neteq/tick_timer.cc",
    "neteq/tick_timer.h",
    "neteq/time_stretch.cc",
    "neteq/time_stretch.h",
    "neteq/timestamp_scaler.cc",
    "neteq/timestamp_scaler.h",
  ]

  public_configs = [ ":neteq_config" ]

  deps = [
    ":audio_decoder_interface",
    ":builtin_audio_decoder_factory",
    ":cng",
    ":g711",
    ":pcm16b",
    ":rent_a_codec",
    "../..:webrtc_common",
    "../../common_audio",
    "../../system_wrappers",
  ]

  defines = []

  if (rtc_include_ilbc) {
    defines += [ "WEBRTC_CODEC_ILBC" ]
    deps += [ ":ilbc" ]
  }
  if (rtc_include_opus) {
    defines += [ "WEBRTC_CODEC_OPUS" ]
    deps += [ ":webrtc_opus" ]
  }
  if (!build_with_mozilla) {
    if (current_cpu == "arm") {
      defines += [ "WEBRTC_CODEC_ISACFX" ]
      deps += [ ":isac_fix" ]
    } else {
      defines += [ "WEBRTC_CODEC_ISAC" ]
      deps += [ ":isac" ]
    }
    defines += [ "WEBRTC_CODEC_G722" ]
    deps += [ ":g722" ]
  }
}

if (rtc_include_tests) {
  rtc_source_set("acm_receive_test") {
    testonly = true
    sources = [
      "acm2/acm_receive_test_oldapi.cc",
      "acm2/acm_receive_test_oldapi.h",
    ]

    defines = audio_coding_defines

    deps = audio_coding_deps + [
             ":audio_coding",
             ":neteq_unittest_tools",
             "//testing/gtest",
           ]
  }

  rtc_source_set("acm_send_test") {
    testonly = true
    sources = [
      "acm2/acm_send_test_oldapi.cc",
      "acm2/acm_send_test_oldapi.h",
    ]

    defines = audio_coding_defines

    deps = audio_coding_deps + [
             ":audio_coding",
             ":neteq_unittest_tools",
             "//testing/gtest",
           ]
  }

  rtc_executable("delay_test") {
    testonly = true
    sources = [
      "test/Channel.cc",
      "test/PCMFile.cc",
      "test/delay_test.cc",
      "test/utility.cc",
    ]

    deps = [
      ":audio_coding",
      "../../:webrtc_common",
      "../../system_wrappers",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_support",
      "../rtp_rtcp",
      "//testing/gtest",
      "//third_party/gflags:gflags",
    ]
  }  # delay_test

  rtc_executable("insert_packet_with_timing") {
    testonly = true
    sources = [
      "test/Channel.cc",
      "test/PCMFile.cc",
      "test/insert_packet_with_timing.cc",
    ]

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":audio_coding",
      "../../:webrtc_common",
      "../../system_wrappers",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_support",
      "../rtp_rtcp",
      "//testing/gtest",
      "//third_party/gflags:gflags",
    ]
  }  # insert_packet_with_timing

  audio_decoder_unittests_resources =
      [ "//resources/audio_coding/testfile32kHz.pcm" ]

  if (is_ios) {
    bundle_data("audio_decoder_unittests_bundle_data") {
      testonly = true
      sources = audio_decoder_unittests_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  rtc_test("audio_decoder_unittests") {
    testonly = true
    sources = [
      "neteq/audio_decoder_unittest.cc",
    ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = []

    defines = neteq_defines

    deps += audio_coding_deps
    deps += [
      ":audio_decoder_interface",
      ":isac",
      ":isac_fix",
      ":neteq",
      ":neteq_unittest_tools",
      "../../common_audio/",
      "../../test:test_support_main",
      "//testing/gtest",
    ]

    data = audio_decoder_unittests_resources

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_native_code" ]
      shard_timeout = 900
    }
    if (is_ios) {
      deps += [ ":audio_decoder_unittests_bundle_data" ]
    }
  }  # audio_decoder_unittests

  if (rtc_enable_protobuf) {
    proto_library("neteq_unittest_proto") {
      sources = [
        "neteq/neteq_unittest.proto",
      ]
      proto_out_dir = "webrtc/audio_coding/neteq"
    }

    rtc_static_library("rtc_event_log_source") {
      testonly = true
      sources = [
        "neteq/tools/rtc_event_log_source.cc",
        "neteq/tools/rtc_event_log_source.h",
      ]

      if (is_clang) {
        # Suppress warnings from the Chromium Clang plugins
        # (bugs.webrtc.org/163).
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }

      deps = [
        "../../:rtc_event_log_parser",
      ]
      public_deps = [
        "../../:rtc_event_log_proto",
      ]
    }

    rtc_test("neteq_rtpplay") {
      testonly = true
      defines = []
      deps = []
      sources = [
        "neteq/tools/neteq_rtpplay.cc",
      ]

      if (is_clang) {
        # Suppress warnings from the Chromium Clang plugins
        # (bugs.webrtc.org/163).
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }

      if (is_win) {
        cflags = [
          # TODO(kjellander): bugs.webrtc.org/261: Fix this warning.
          "/wd4373",  # virtual function override.
        ]
      }

      deps += [
        ":neteq",
        ":neteq_unittest_tools",
        "../../system_wrappers:system_wrappers_default",
        "../../test:test_support",
        "//third_party/gflags",
      ]
    }
  }

  rtc_test("audio_codec_speed_tests") {
    testonly = true
    defines = []
    deps = []
    sources = [
      "codecs/isac/fix/test/isac_speed_test.cc",
      "codecs/opus/opus_speed_test.cc",
      "codecs/tools/audio_codec_speed_test.cc",
      "codecs/tools/audio_codec_speed_test.h",
    ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins
      # (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_native_code" ]
      shard_timeout = 900
    }

    deps += [
      ":isac_fix",
      ":webrtc_opus",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_support_main",
      "../audio_processing/",
      "//testing/gtest",
    ]
  }

  rtc_source_set("neteq_test_support") {
    testonly = true
    sources = [
      "neteq/tools/neteq_external_decoder_test.cc",
      "neteq/tools/neteq_external_decoder_test.h",
      "neteq/tools/neteq_performance_test.cc",
      "neteq/tools/neteq_performance_test.h",
    ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":neteq",
      ":neteq_unittest_tools",
      ":pcm16b",
      "//testing/gtest",
    ]
  }

  rtc_source_set("neteq_quality_test_support") {
    testonly = true
    sources = [
      "neteq/tools/neteq_quality_test.cc",
      "neteq/tools/neteq_quality_test.h",
    ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":neteq",
      ":neteq_unittest_tools",
      "//testing/gtest",
      "//third_party/gflags",
    ]
  }

  config("neteq_unittest_tools_config") {
    include_dirs = [ "tools" ]
  }

  rtc_source_set("neteq_unittest_tools") {
    testonly = true
    sources = [
      "neteq/tools/audio_checksum.h",
      "neteq/tools/audio_loop.cc",
      "neteq/tools/audio_loop.h",
      "neteq/tools/audio_sink.cc",
      "neteq/tools/audio_sink.h",
      "neteq/tools/constant_pcm_packet_source.cc",
      "neteq/tools/constant_pcm_packet_source.h",
      "neteq/tools/fake_decode_from_file.cc",
      "neteq/tools/fake_decode_from_file.h",
      "neteq/tools/input_audio_file.cc",
      "neteq/tools/input_audio_file.h",
      "neteq/tools/neteq_input.h",
      "neteq/tools/neteq_packet_source_input.cc",
      "neteq/tools/neteq_packet_source_input.h",
      "neteq/tools/neteq_replacement_input.cc",
      "neteq/tools/neteq_replacement_input.h",
      "neteq/tools/neteq_test.cc",
      "neteq/tools/neteq_test.h",
      "neteq/tools/output_audio_file.h",
      "neteq/tools/output_wav_file.h",
      "neteq/tools/packet.cc",
      "neteq/tools/packet.h",
      "neteq/tools/packet_source.cc",
      "neteq/tools/packet_source.h",
      "neteq/tools/resample_input_audio_file.cc",
      "neteq/tools/resample_input_audio_file.h",
      "neteq/tools/rtp_file_source.cc",
      "neteq/tools/rtp_file_source.h",
      "neteq/tools/rtp_generator.cc",
      "neteq/tools/rtp_generator.h",
    ]

    public_configs = [ ":neteq_unittest_tools_config" ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      "../../common_audio",
      "../../test:rtp_test_utils",
      "../rtp_rtcp",
    ]

    if (rtc_enable_protobuf) {
      deps += [ ":rtc_event_log_source" ]
    }
  }

  rtc_source_set("neteq_test_tools") {
    testonly = true
    sources = [
      "neteq/test/NETEQTEST_DummyRTPpacket.cc",
      "neteq/test/NETEQTEST_DummyRTPpacket.h",
      "neteq/test/NETEQTEST_RTPpacket.cc",
      "neteq/test/NETEQTEST_RTPpacket.h",
    ]

    deps = [
      ":cng",
      ":g711",
      ":g722",
      ":ilbc",
      ":isac",
      ":pcm16b",
      "../..:webrtc_common",
      "//testing/gtest",
    ]

    include_dirs = [
      "neteq/include",
      "neteq/test",
      "../../",
    ]

    if (is_win) {
      cflags = [
        # Disable warnings to enable Win64 build, issue 1323.
        "/wd4267",  # size_t to int truncation
      ]
    }
  }

  config("RTPencode_config") {
    defines = [
      "CODEC_ILBC",
      "CODEC_PCM16B",
      "CODEC_G711",
      "CODEC_G722",
      "CODEC_ISAC",
      "CODEC_PCM16B_WB",
      "CODEC_ISAC_SWB",
      "CODEC_PCM16B_32KHZ",
      "CODEC_PCM16B_48KHZ",
      "CODEC_CNGCODEC8",
      "CODEC_CNGCODEC16",
      "CODEC_CNGCODEC32",
      "CODEC_ATEVENT_DECODE",
      "CODEC_RED",
      "CODEC_OPUS",
    ]
  }

  rtc_executable("RTPencode") {
    testonly = true

    deps = [
      # TODO(hlundin): Make RTPencode use ACM to encode files.
      ":cng",
      ":g711",
      ":g722",
      ":ilbc",
      ":isac",
      ":neteq_test_tools",
      ":pcm16b",
      ":webrtc_opus",
      "../../common_audio",
    ]

    configs += [ ":RTPencode_config" ]

    sources = [
      "neteq/test/RTPencode.cc",
    ]

    include_dirs = [
      "neteq/include",
      "neteq/test",
    ]

    if (is_win) {
      cflags = [
        # Disable warnings to enable Win64 build, issue 1323.
        "/wd4267",  # size_t to int truncation
      ]
    }
  }

  rtc_executable("RTPchange") {
    testonly = true

    sources = [
      "neteq/test/RTPchange.cc",
    ]

    deps = [
      ":neteq_test_tools",
    ]
  }

  rtc_executable("rtpcat") {
    testonly = true

    sources = [
      "neteq/tools/rtpcat.cc",
    ]

    deps = [
      "../../system_wrappers:system_wrappers_default",
      "../../test:rtp_test_utils",
      "//testing/gtest",
    ]
  }

  rtc_executable("RTPtimeshift") {
    testonly = true

    sources = [
      "neteq/test/RTPtimeshift.cc",
    ]

    deps = [
      ":neteq_test_tools",
      "//testing/gtest",
    ]
  }

  rtc_executable("RTPjitter") {
    testonly = true
    deps = [
      "../..:webrtc_common",
      "//testing/gtest",
    ]
    sources = [
      "neteq/test/RTPjitter.cc",
    ]
  }

  rtc_executable("rtp_analyze") {
    testonly = true

    sources = [
      "neteq/tools/rtp_analyze.cc",
    ]

    deps = [
      ":neteq",
      ":neteq_unittest_tools",
      ":pcm16b",
      "../../system_wrappers:system_wrappers_default",
      "//testing/gtest",
      "//third_party/gflags:gflags",
    ]

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_executable("neteq_opus_quality_test") {
    testonly = true

    sources = [
      "neteq/test/neteq_opus_quality_test.cc",
    ]

    deps = [
      ":neteq",
      ":neteq_quality_test_support",
      ":neteq_unittest_tools",
      ":webrtc_opus",
      "../../test:test_support_main",
      "//testing/gtest",
      "//third_party/gflags",
    ]
  }

  rtc_executable("neteq_speed_test") {
    testonly = true

    sources = [
      "neteq/test/neteq_speed_test.cc",
    ]

    deps = [
      ":neteq",
      ":neteq_test_support",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_support",
      "//third_party/gflags",
    ]
  }

  rtc_executable("audio_classifier_test") {
    testonly = true
    sources = [
      "neteq/test/audio_classifier_test.cc",
    ]
    deps = [
      ":neteq",
      ":webrtc_opus",
      "../../system_wrappers:system_wrappers_default",
    ]
  }

  rtc_executable("neteq_ilbc_quality_test") {
    testonly = true

    sources = [
      "neteq/test/neteq_ilbc_quality_test.cc",
    ]

    deps = [
      ":ilbc",
      ":neteq",
      ":neteq_quality_test_support",
      ":neteq_unittest_tools",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_support_main",
      "//testing/gtest",
      "//third_party/gflags",
    ]
  }

  rtc_executable("neteq_isac_quality_test") {
    testonly = true

    sources = [
      "neteq/test/neteq_isac_quality_test.cc",
    ]

    deps = [
      ":isac_fix",
      ":neteq",
      ":neteq_quality_test_support",
      "../../test:test_support_main",
      "//testing/gtest",
      "//third_party/gflags",
    ]
  }

  rtc_executable("neteq_pcmu_quality_test") {
    testonly = true

    sources = [
      "neteq/test/neteq_pcmu_quality_test.cc",
    ]

    deps = [
      ":g711",
      ":neteq",
      ":neteq_quality_test_support",
      "../../test:test_support_main",
      "//testing/gtest",
      "//third_party/gflags",
    ]
  }

  rtc_executable("isac_fix_test") {
    testonly = true

    sources = [
      "codecs/isac/fix/test/kenny.cc",
    ]

    deps = [
      ":isac_fix",
      "../../test:test_support",
    ]

    if (is_win) {
      cflags = [
        # Disable warnings to enable Win64 build, issue 1323.
        "/wd4267",  # size_t to int truncation
      ]
    }
  }

  config("isac_test_warnings_config") {
    if (is_win && is_clang) {
      cflags = [
        # Disable warnings failing when compiling with Clang on Windows.
        # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366
        "-Wno-format",
      ]
    }
  }

  rtc_executable("isac_test") {
    testonly = true

    sources = [
      "codecs/isac/main/test/simpleKenny.c",
      "codecs/isac/main/util/utility.c",
    ]

    include_dirs = [
      "codecs/isac/main/include",
      "codecs/isac/main/test",
      "codecs/isac/main/util",
    ]

    deps = [
      ":isac",
      "../../base:rtc_base_approved",
    ]

    configs += [ ":isac_test_warnings_config" ]
  }

  rtc_executable("g711_test") {
    testonly = true

    sources = [
      "codecs/g711/test/testG711.cc",
    ]

    deps = [
      ":g711",
    ]
  }

  rtc_executable("g722_test") {
    testonly = true

    sources = [
      "codecs/g722/test/testG722.cc",
    ]

    deps = [
      ":g722",
      "../..:webrtc_common",
    ]
  }

  rtc_executable("isac_api_test") {
    testonly = true

    sources = [
      "codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc",
      "codecs/isac/main/util/utility.c",
    ]

    deps = [
      ":isac",
      "../../base:rtc_base_approved",
    ]

    include_dirs = [
      "codecs/isac/main/include",
      "codecs/isac/main/test",
      "codecs/isac/main/util",
    ]
  }

  rtc_executable("isac_switch_samprate_test") {
    testonly = true

    sources = [
      "codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc",
      "codecs/isac/main/util/utility.c",
    ]

    deps = [
      ":isac",
    ]

    include_dirs = [
      "codecs/isac/main/include",
      "codecs/isac/main/test",
      "codecs/isac/main/util",
      "../../common_audio/signal_processing/include",
    ]
  }

  rtc_executable("ilbc_test") {
    testonly = true

    sources = [
      "codecs/ilbc/test/iLBC_test.c",
    ]

    deps = [
      ":ilbc",
    ]
  }

  rtc_executable("webrtc_opus_fec_test") {
    testonly = true

    sources = [
      "codecs/opus/opus_fec_test.cc",
    ]

    deps = [
      ":webrtc_opus",
      "../../base:rtc_base_approved",
      "../../common_audio",
      "../../test:test_support",
      "../../test:test_support_main",
      "//testing/gtest",
    ]

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
}
