# 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("../../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_format_conversion") {
  sources = [
    "codecs/audio_format_conversion.cc",
    "codecs/audio_format_conversion.h",
  ]
  deps = [
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
  ]
}

rtc_static_library("builtin_audio_decoder_factory_internal") {
  sources = [
    "codecs/builtin_audio_decoder_factory_internal.cc",
    "codecs/builtin_audio_decoder_factory_internal.h",
  ]
  deps = [
           "../..:webrtc_common",
           "../../base:rtc_base_approved",
           "../../api/audio_codecs:audio_codecs_api",
         ] + audio_codec_deps
  defines = audio_codec_defines
}

rtc_static_library("rent_a_codec") {
  # TODO(kjellander): Remove (bugs.webrtc.org/6828)
  # Gives cyclic dependency with :neteq and :audio_coding if enabled.
  check_includes = false

  sources = [
    "acm2/acm_codec_database.cc",
    "acm2/acm_codec_database.h",
    "acm2/rent_a_codec.cc",
    "acm2/rent_a_codec.h",
  ]
  deps = [
           "../../api/audio_codecs:audio_codecs_api",
           "../..:webrtc_common",
           "../../base:rtc_base_approved",
         ] + 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",
    "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 + [
           "../../api/audio_codecs:audio_codecs_api",
           "../../api/audio_codecs:builtin_audio_decoder_factory",
           ":neteq",
           ":rent_a_codec",
           "../../base:rtc_base_approved",
           "../../logging:rtc_event_log_api",
         ]
  defines = audio_coding_defines
}

rtc_static_library("legacy_encoded_audio_frame") {
  sources = [
    "codecs/legacy_encoded_audio_frame.cc",
    "codecs/legacy_encoded_audio_frame.h",
  ]
  deps = [
    "../../api/audio_codecs:audio_codecs_api",
    "../../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",
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
    "../../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",
    "../../base:rtc_base_approved",
    "../../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",
  ]

  public_configs = [ ":g711_config" ]

  deps = [
    ":audio_encoder_interface",
    ":legacy_encoded_audio_frame",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
  ]
  public_deps = [
    ":g711_c",
  ]
}

rtc_source_set("g711_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "codecs/g711/g711.c",
    "codecs/g711/g711.h",
    "codecs/g711/g711_interface.c",
    "codecs/g711/g711_interface.h",
  ]
  deps = [
    "../..:webrtc_common",
  ]
}

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",
  ]

  public_configs = [ ":g722_config" ]

  deps = [
    ":audio_encoder_interface",
    ":legacy_encoded_audio_frame",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
  ]
  public_deps = [
    ":g722_c",
  ]
}

rtc_source_set("g722_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "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",
  ]
  deps = [
    "../..:webrtc_common",
  ]
}

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

rtc_static_library("ilbc") {
  sources = [
    "codecs/ilbc/audio_decoder_ilbc.cc",
    "codecs/ilbc/audio_decoder_ilbc.h",
    "codecs/ilbc/audio_encoder_ilbc.cc",
    "codecs/ilbc/audio_encoder_ilbc.h",
  ]

  public_configs = [ ":ilbc_config" ]

  deps = [
    ":audio_encoder_interface",
    ":legacy_encoded_audio_frame",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
    "../../common_audio",
  ]
  public_deps = [
    ":ilbc_c",
  ]
}

rtc_source_set("ilbc_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  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/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_encoder_interface",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../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",
  ]
  deps = [
    ":audio_encoder_interface",
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
  ]
}

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/source/audio_decoder_isac.cc",
    "codecs/isac/main/source/audio_encoder_isac.cc",
  ]

  deps = [
    ":audio_encoder_interface",
    ":isac_common",
    "../../api/audio_codecs:audio_codecs_api",
  ]
  public_deps = [
    ":isac_c",
  ]
}

rtc_static_library("isac_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "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/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 = [
    ":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/source/audio_decoder_isacfix.cc",
    "codecs/isac/fix/source/audio_encoder_isacfix.cc",
  ]

  public_configs = [ ":isac_fix_config" ]

  deps = [
    ":audio_encoder_interface",
    ":isac_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../common_audio",
    "../../system_wrappers",
  ]
  public_deps = [
    ":isac_fix_c",
  ]

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

rtc_source_set("isac_fix_common") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "codecs/isac/fix/source/codec.h",
    "codecs/isac/fix/source/fft.c",
    "codecs/isac/fix/source/fft.h",
    "codecs/isac/fix/source/settings.h",
  ]
  public_configs = [ ":isac_fix_config" ]
}

rtc_source_set("isac_fix_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  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/bandwidth_estimator.c",
    "codecs/isac/fix/source/bandwidth_estimator.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/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/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_encoder_interface",
    ":isac_common",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
    "../../common_audio",
    "../../system_wrappers",
  ]

  public_deps = [
    ":isac_fix_common",
  ]

  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 = [
      ":isac_fix_common",
      "../../base:rtc_base_approved",
      "../../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",
  ]

  deps = [
    ":audio_encoder_interface",
    ":g711",
    ":legacy_encoded_audio_frame",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
  ]
  public_deps = [
    ":pcm16b_c",
  ]
  public_configs = [ ":pcm16b_config" ]
}

rtc_source_set("pcm16b_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "codecs/pcm16b/pcm16b.c",
    "codecs/pcm16b/pcm16b.h",
  ]

  public_configs = [ ":pcm16b_config" ]
  deps = [
    "../..:webrtc_common",
  ]
}

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",
  ]

  deps = [
    ":audio_encoder_interface",
    ":audio_network_adaptor",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:rtc_base_approved",
    "../../base:rtc_numerics",
    "../../common_audio",
    "../../system_wrappers",
  ]
  public_deps = [
    ":webrtc_opus_c",
  ]

  defines = audio_codec_defines
  if (rtc_opus_variable_complexity) {
    defines += [ "WEBRTC_OPUS_VARIABLE_COMPLEXITY=1" ]
  } else {
    defines += [ "WEBRTC_OPUS_VARIABLE_COMPLEXITY=0" ]
  }

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

rtc_source_set("webrtc_opus_c") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "codecs/opus/opus_inst.h",
    "codecs/opus/opus_interface.c",
    "codecs/opus/opus_interface.h",
  ]

  defines = audio_coding_defines

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

  deps = [
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
  ]
}

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"
  }
  proto_library("ana_config_proto") {
    sources = [
      "audio_network_adaptor/config.proto",
    ]
    proto_out_dir = "webrtc/modules/audio_coding/audio_network_adaptor"
  }
}

rtc_static_library("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/event_log_writer.cc",
    "audio_network_adaptor/event_log_writer.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",
  ]

  deps = [
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
    "../../common_audio",
    "../../logging:rtc_event_log_api",
    "../../system_wrappers",
  ]

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

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

rtc_static_library("neteq") {
  # TODO(kjellander): Remove (bugs.webrtc.org/6828)
  # Cyclic dependency with :audio_coding if enabled.
  check_includes = false

  sources = [
    "neteq/accelerate.cc",
    "neteq/accelerate.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",
  ]

  deps = [
    ":cng",
    ":g711",
    ":isac_fix",
    ":pcm16b",
    ":rent_a_codec",
    "../..:webrtc_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../base:gtest_prod",
    "../../base:rtc_base_approved",
    "../../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" ]
  }
}

# Although providing only test support, this target must be outside of the
# rtc_include_tests conditional. The reason is that it supports fuzzer tests
# that ultimately are built and run as a part of the Chromium ecosystem, which
# does not set the rtc_include_tests flag.
rtc_source_set("neteq_test_minimal") {
  testonly = true

  # TODO(kjellander): Remove (bugs.webrtc.org/6828)
  # Has cyclic dependency with :neteq_unittest_tools
  check_includes = false

  sources = [
    "neteq/tools/encode_neteq_input.cc",
    "neteq/tools/encode_neteq_input.h",
    "neteq/tools/neteq_test.cc",
    "neteq/tools/neteq_test.h",
  ]

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

  deps = [
    ":audio_encoder_interface",
    ":neteq",
    "../..:webrtc_common",
    "../../api/audio_codecs:builtin_audio_decoder_factory",
    "../../base:rtc_base_approved",
  ]
}

if (rtc_include_tests) {
  group("audio_coding_tests") {
    testonly = true
    public_deps = [
      ":RTPchange",
      ":RTPencode",
      ":RTPjitter",
      ":RTPtimeshift",
      ":acm_receive_test",
      ":acm_send_test",
      ":audio_codec_speed_tests",
      ":audio_decoder_unittests",
      ":audio_decoder_unittests",
      ":delay_test",
      ":g711_test",
      ":g722_test",
      ":ilbc_test",
      ":insert_packet_with_timing",
      ":isac_api_test",
      ":isac_fix_test",
      ":isac_switch_samprate_test",
      ":isac_test",
      ":neteq_ilbc_quality_test",
      ":neteq_isac_quality_test",
      ":neteq_opus_quality_test",
      ":neteq_pcmu_quality_test",
      ":neteq_speed_test",
      ":rtp_analyze",
      ":rtpcat",
      ":webrtc_opus_fec_test",
    ]
    if (rtc_enable_protobuf) {
      public_deps += [ ":neteq_rtpplay" ]
    }
  }

  rtc_source_set("audio_coding_modules_tests") {
    testonly = true
    sources = [
      "test/APITest.cc",
      "test/Channel.cc",
      "test/EncodeDecodeTest.cc",
      "test/PCMFile.cc",
      "test/PacketLossTest.cc",
      "test/RTPFile.cc",
      "test/TestAllCodecs.cc",
      "test/TestRedFec.cc",
      "test/TestStereo.cc",
      "test/TestVADDTX.cc",
      "test/Tester.cc",
      "test/TwoWayCommunication.cc",
      "test/iSACTest.cc",
      "test/opus_test.cc",
      "test/target_delay_unittest.cc",
      "test/utility.cc",
    ]
    deps = [
      ":audio_coding",
      ":audio_format_conversion",
      ":pcm16b_c",
      "../..:webrtc_common",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../base:rtc_base_approved",
      "../../system_wrappers:system_wrappers",
      "../../test:fileutils",
      "../../test:test_support",
    ]
    defines = audio_coding_defines
    if (is_win) {
      cflags = [
        # TODO(kjellander): bugs.webrtc.org/261: Fix this warning.
        "/wd4373",  # virtual function override.
      ]
    }
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_source_set("audio_coding_perf_tests") {
    testonly = true
    sources = [
      "codecs/opus/opus_complexity_unittest.cc",
      "neteq/test/neteq_performance_unittest.cc",
    ]
    deps = [
      ":neteq_test_support",
      ":neteq_unittest_tools",
      ":webrtc_opus",
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../system_wrappers:system_wrappers",
      "../../test:test_support",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

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

    defines = audio_coding_defines

    deps = audio_coding_deps + [
             ":audio_coding",
             ":audio_format_conversion",
             "../../api/audio_codecs:audio_codecs_api",
             "../../api/audio_codecs:builtin_audio_decoder_factory",
             ":neteq_unittest_tools",
             "../../base:rtc_base_approved",
             "../../test:test_support",
             "//testing/gtest",
           ]
  }

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

    defines = audio_coding_defines

    deps = audio_coding_deps + [
             ":audio_coding",
             "../../api/audio_codecs:audio_codecs_api",
             ":audio_encoder_interface",
             ":neteq_unittest_tools",
             "../../base:rtc_base_approved",
             "../../test:test_support",
             "//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",
      ":audio_format_conversion",
      "../../:webrtc_common",
      "../../base:rtc_base_approved",
      "../../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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":audio_coding",
      ":audio_format_conversion",
      "../../:webrtc_common",
      "../../base:rtc_base_approved",
      "../../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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = []

    defines = neteq_defines

    deps += audio_coding_deps
    deps += [
      ":ilbc",
      ":isac",
      ":isac_fix",
      ":neteq",
      ":neteq_unittest_tools",
      "../../api/audio_codecs:audio_codecs_api",
      "../../common_audio",
      "../../test:test_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

      # TODO(kjellander): Remove (bugs.webrtc.org/6828)
      # Needs call.h to be moved to webrtc/api first.
      check_includes = false

      sources = [
        "neteq/tools/rtc_event_log_source.cc",
        "neteq/tools/rtc_event_log_source.h",
      ]

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

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

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

      if (!build_with_chromium && is_clang) {
        # Suppress warnings from the Chromium Clang plugin (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",
        "../..:webrtc_common",
        "../../base:rtc_base_approved",
        "../../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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (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",
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":neteq",
      ":neteq_unittest_tools",
      ":pcm16b",
      "../..:webrtc_common",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../base:rtc_base_approved",
      "../../system_wrappers",
      "../../test:test_support",
      "//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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":neteq",
      ":neteq_unittest_tools",
      "../..:webrtc_common",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../base:rtc_base_approved",
      "../../test:test_support",
      "//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_replacement_input.cc",
      "neteq/tools/neteq_replacement_input.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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":audio_encoder_interface",
      ":pcm16b",
      "../..:webrtc_common",
      "../../api/audio_codecs:audio_codecs_api",
      "../../base:rtc_base_approved",
      "../../common_audio",
      "../../test:rtp_test_utils",
      "../rtp_rtcp",
    ]

    public_deps = [
      ":neteq_test_minimal",
    ]

    if (rtc_enable_protobuf) {
      sources += [
        "neteq/tools/neteq_packet_source_input.cc",
        "neteq/tools/neteq_packet_source_input.h",
      ]
      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",
      ":neteq_test_tools",
      ":pcm16b",
      ":webrtc_opus",
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../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 = [
      "../../base:rtc_base_approved",
      "../../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",
      "../../test:test_support",
      "//testing/gtest",
    ]
  }

  rtc_executable("RTPjitter") {
    testonly = true
    deps = [
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../test:test_support",
      "//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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      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_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",
      "../..:webrtc_common",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_support",
      "//third_party/gflags",
    ]
  }

  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",
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../system_wrappers:system_wrappers_default",
      "../../test:test_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",
      "../../base:rtc_base_approved",
      "../../test:test_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",
      "../../base:rtc_base_approved",
      "../../test:test_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_source_set("isac_test_util") {
    testonly = true
    sources = [
      "codecs/isac/main/util/utility.c",
    ]
  }

  rtc_executable("isac_test") {
    testonly = true

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

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

    deps = [
      ":isac",
      ":isac_test_util",
      "../../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",
    ]

    deps = [
      ":isac",
      ":isac_test_util",
      "../../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",
    ]

    deps = [
      ":isac",
      ":isac_test_util",
    ]

    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_main",
      "//testing/gtest",
    ]

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

  rtc_source_set("audio_coding_unittests") {
    testonly = true

    sources = [
      "acm2/acm_receiver_unittest.cc",
      "acm2/audio_coding_module_unittest.cc",
      "acm2/call_statistics_unittest.cc",
      "acm2/codec_manager_unittest.cc",
      "acm2/rent_a_codec_unittest.cc",
      "audio_network_adaptor/audio_network_adaptor_impl_unittest.cc",
      "audio_network_adaptor/bitrate_controller_unittest.cc",
      "audio_network_adaptor/channel_controller_unittest.cc",
      "audio_network_adaptor/controller_manager_unittest.cc",
      "audio_network_adaptor/dtx_controller_unittest.cc",
      "audio_network_adaptor/event_log_writer_unittest.cc",
      "audio_network_adaptor/fec_controller_unittest.cc",
      "audio_network_adaptor/frame_length_controller_unittest.cc",
      "audio_network_adaptor/mock/mock_controller.h",
      "audio_network_adaptor/mock/mock_controller_manager.h",
      "codecs/builtin_audio_decoder_factory_unittest.cc",
      "codecs/cng/audio_encoder_cng_unittest.cc",
      "codecs/cng/cng_unittest.cc",
      "codecs/ilbc/ilbc_unittest.cc",
      "codecs/isac/fix/source/filterbanks_unittest.cc",
      "codecs/isac/fix/source/filters_unittest.cc",
      "codecs/isac/fix/source/lpc_masking_model_unittest.cc",
      "codecs/isac/fix/source/transform_unittest.cc",
      "codecs/isac/main/source/audio_encoder_isac_unittest.cc",
      "codecs/isac/main/source/isac_unittest.cc",
      "codecs/isac/unittest.cc",
      "codecs/legacy_encoded_audio_frame_unittest.cc",
      "codecs/mock/mock_audio_encoder.cc",
      "codecs/opus/audio_encoder_opus_unittest.cc",
      "codecs/opus/opus_unittest.cc",
      "codecs/red/audio_encoder_copy_red_unittest.cc",
      "neteq/audio_multi_vector_unittest.cc",
      "neteq/audio_vector_unittest.cc",
      "neteq/background_noise_unittest.cc",
      "neteq/buffer_level_filter_unittest.cc",
      "neteq/comfort_noise_unittest.cc",
      "neteq/decision_logic_unittest.cc",
      "neteq/decoder_database_unittest.cc",
      "neteq/delay_manager_unittest.cc",
      "neteq/delay_peak_detector_unittest.cc",
      "neteq/dsp_helper_unittest.cc",
      "neteq/dtmf_buffer_unittest.cc",
      "neteq/dtmf_tone_generator_unittest.cc",
      "neteq/expand_unittest.cc",
      "neteq/merge_unittest.cc",
      "neteq/mock/mock_audio_decoder.h",
      "neteq/mock/mock_buffer_level_filter.h",
      "neteq/mock/mock_decoder_database.h",
      "neteq/mock/mock_delay_manager.h",
      "neteq/mock/mock_delay_peak_detector.h",
      "neteq/mock/mock_dtmf_buffer.h",
      "neteq/mock/mock_dtmf_tone_generator.h",
      "neteq/mock/mock_expand.h",
      "neteq/mock/mock_external_decoder_pcm16b.h",
      "neteq/mock/mock_packet_buffer.h",
      "neteq/mock/mock_red_payload_splitter.h",
      "neteq/nack_tracker_unittest.cc",
      "neteq/neteq_external_decoder_unittest.cc",
      "neteq/neteq_impl_unittest.cc",
      "neteq/neteq_network_stats_unittest.cc",
      "neteq/neteq_stereo_unittest.cc",
      "neteq/neteq_unittest.cc",
      "neteq/normal_unittest.cc",
      "neteq/packet_buffer_unittest.cc",
      "neteq/post_decode_vad_unittest.cc",
      "neteq/random_vector_unittest.cc",
      "neteq/red_payload_splitter_unittest.cc",
      "neteq/sync_buffer_unittest.cc",
      "neteq/tick_timer_unittest.cc",
      "neteq/time_stretch_unittest.cc",
      "neteq/timestamp_scaler_unittest.cc",
      "neteq/tools/input_audio_file_unittest.cc",
      "neteq/tools/packet_unittest.cc",
    ]

    deps = [
      ":acm_receive_test",
      ":acm_send_test",
      ":audio_coding",
      ":audio_encoder_interface",
      ":audio_format_conversion",
      ":audio_network_adaptor",
      ":cng",
      ":g711",
      ":ilbc",
      ":isac",
      ":isac_c",
      ":isac_fix",
      ":legacy_encoded_audio_frame",
      ":neteq",
      ":neteq_test_support",
      ":neteq_unittest_tools",
      ":pcm16b",
      ":red",
      ":rent_a_codec",
      ":webrtc_opus",
      "../..:webrtc_common",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../base:rtc_base",
      "../../base:rtc_base_approved",
      "../../base:rtc_base_tests_utils",
      "../../common_audio",
      "../../system_wrappers:system_wrappers",
      "../../test:field_trial",
      "../../test:rtp_test_utils",
      "../../test:test_common",
      "../../test:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/gflags",
    ]

    defines = audio_coding_defines

    if (rtc_enable_protobuf) {
      defines += [
        "WEBRTC_AUDIO_NETWORK_ADAPTOR_DEBUG_DUMP",
        "WEBRTC_NETEQ_UNITTEST_BITEXACT",
      ]
      deps += [
        ":ana_config_proto",
        ":neteq_unittest_proto",
      ]
    }

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

# For backwards compatibility only! Use
# webrtc/api/audio_codecs:audio_codecs_api instead.
# TODO(kwiberg): Remove this.
rtc_source_set("audio_decoder_interface") {
  sources = [
    "codecs/audio_decoder.h",
  ]
  deps = [
    "../../api/audio_codecs:audio_codecs_api",
  ]
}

# For backwards compatibility only! Use
# webrtc/api/audio_codecs:builtin_audio_decoder_factory instead.
# TODO(kwiberg): Remove this.
rtc_source_set("builtin_audio_decoder_factory") {
  sources = [
    "codecs/builtin_audio_decoder_factory.h",
  ]
  deps = [
    "../../api/audio_codecs:builtin_audio_decoder_factory",
  ]
}
