# 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")
if (rtc_enable_protobuf) {
  import("//third_party/protobuf/proto_library.gni")
}

visibility = [ ":*" ]

rtc_source_set("audio_coding_module_typedefs") {
  visibility += [ "*" ]
  sources = [ "include/audio_coding_module_typedefs.h" ]
}

rtc_library("audio_coding") {
  visibility += [ "*" ]
  sources = [
    "acm2/acm_remixing.cc",
    "acm2/acm_remixing.h",
    "acm2/acm_resampler.cc",
    "acm2/acm_resampler.h",
    "acm2/audio_coding_module.cc",
    "acm2/call_statistics.cc",
    "acm2/call_statistics.h",
    "include/audio_coding_module.h",
  ]

  defines = []

  deps = [
    ":audio_coding_module_typedefs",
    "..:module_api_public",
    "../../api:function_view",
    "../../api/audio:audio_frame_api",
    "../../api/audio_codecs:audio_codecs_api",
    "../../audio/utility:audio_frame_operations",
    "../../common_audio",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:macromagic",
    "../../rtc_base:safe_conversions",
    "../../rtc_base/synchronization:mutex",
    "../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_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",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
  ]
}

rtc_library("webrtc_cng") {
  visibility += webrtc_default_visibility
  sources = [
    "codecs/cng/webrtc_cng.cc",
    "codecs/cng/webrtc_cng.h",
  ]

  deps = [
    "../../common_audio:common_audio_c",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:safe_conversions",
  ]
}

rtc_library("audio_encoder_cng") {
  visibility += [ "*" ]
  sources = [
    "codecs/cng/audio_encoder_cng.cc",
    "codecs/cng/audio_encoder_cng.h",
  ]

  deps = [
    ":webrtc_cng",
    "../../api:bitrate_allocation",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/units:time_delta",
    "../../common_audio",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
  ]
}

rtc_library("red") {
  visibility += [ "*" ]
  sources = [
    "codecs/red/audio_encoder_copy_red.cc",
    "codecs/red/audio_encoder_copy_red.h",
  ]

  deps = [
    "../../api:bitrate_allocation",
    "../../api:field_trials_view",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/units:time_delta",
    "../../rtc_base:buffer",
    "../../rtc_base:byte_order",
    "../../rtc_base:checks",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("g711") {
  visibility += [ "*" ]
  poisonous = [ "audio_codecs" ]
  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",
  ]

  deps = [
    ":legacy_encoded_audio_frame",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/units:time_delta",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
  ]
  public_deps += [ ":g711_c" ]  # no-presubmit-check TODO(webrtc:8603)
}

rtc_library("g711_c") {
  poisonous = [ "audio_codecs" ]
  sources = [
    "codecs/g711/g711_interface.c",
    "codecs/g711/g711_interface.h",
  ]
  deps = [ "../third_party/g711:g711_3p" ]
}

rtc_library("g722") {
  visibility += [ "*" ]
  poisonous = [ "audio_codecs" ]
  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",
  ]

  deps = [
    ":legacy_encoded_audio_frame",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/audio_codecs/g722:audio_encoder_g722_config",
    "../../api/units:time_delta",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
  ]
  public_deps += [ ":g722_c" ]  # no-presubmit-check TODO(webrtc:8603)
}

rtc_library("g722_c") {
  poisonous = [ "audio_codecs" ]
  sources = [
    "codecs/g722/g722_interface.c",
    "codecs/g722/g722_interface.h",
  ]
  deps = [ "../third_party/g722:g722_3p" ]
}

rtc_library("isac_vad") {
  visibility += [ "../audio_processing/vad:*" ]
  sources = [
    "codecs/isac/main/source/filter_functions.c",
    "codecs/isac/main/source/filter_functions.h",
    "codecs/isac/main/source/isac_vad.c",
    "codecs/isac/main/source/isac_vad.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_filter.h",
    "codecs/isac/main/source/settings.h",
    "codecs/isac/main/source/structs.h",
  ]
  deps = [
    ":isac_bwinfo",
    "../../rtc_base:compile_assert_c",
    "../../rtc_base/system:ignore_warnings",
    "../third_party/fft",
  ]
}

rtc_source_set("isac_bwinfo") {
  sources = [ "codecs/isac/bandwidth_info.h" ]
  deps = []
}

rtc_library("pcm16b") {
  visibility += [ "*" ]
  poisonous = [ "audio_codecs" ]
  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_common.cc",
    "codecs/pcm16b/pcm16b_common.h",
  ]

  deps = [
    ":g711",
    ":legacy_encoded_audio_frame",
    "../../api/audio_codecs:audio_codecs_api",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
  ]
  public_deps += [ ":pcm16b_c" ]  # no-presubmit-check TODO(webrtc:8603)
}

rtc_library("pcm16b_c") {
  poisonous = [ "audio_codecs" ]
  sources = [
    "codecs/pcm16b/pcm16b.c",
    "codecs/pcm16b/pcm16b.h",
  ]
}

rtc_library("audio_coding_opus_common") {
  sources = [
    "codecs/opus/audio_coder_opus_common.cc",
    "codecs/opus/audio_coder_opus_common.h",
  ]

  deps = [
    "../../api/audio_codecs:audio_codecs_api",
    "../../rtc_base:buffer",
    "../../rtc_base:stringutils",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("webrtc_opus") {
  visibility += webrtc_default_visibility
  poisonous = [ "audio_codecs" ]
  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_coding_opus_common",
    ":audio_network_adaptor",
    "../../api:bitrate_allocation",
    "../../api:field_trials_view",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/audio_codecs/opus:audio_encoder_opus_config",
    "../../api/environment",
    "../../api/units:time_delta",
    "../../api/units:timestamp",
    "../../common_audio",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:protobuf_utils",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:safe_minmax",
    "../../rtc_base:stringutils",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:string_view",
    "//third_party/opus",
  ]
  public_deps +=  # no-presubmit-check TODO(webrtc:8603)
      [ ":webrtc_opus_wrapper" ]

  defines = audio_codec_defines
}

rtc_library("webrtc_multiopus") {
  visibility += webrtc_default_visibility
  poisonous = [ "audio_codecs" ]
  sources = [
    "codecs/opus/audio_decoder_multi_channel_opus_impl.cc",
    "codecs/opus/audio_decoder_multi_channel_opus_impl.h",
    "codecs/opus/audio_encoder_multi_channel_opus_impl.cc",
    "codecs/opus/audio_encoder_multi_channel_opus_impl.h",
  ]

  deps = [
    ":audio_coding_opus_common",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/audio_codecs/opus:audio_decoder_opus_config",
    "../../api/audio_codecs/opus:audio_encoder_opus_config",
    "../../api/units:time_delta",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:stringutils",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
  ]
  public_deps +=  # no-presubmit-check TODO(webrtc:8603)
      [ ":webrtc_opus_wrapper" ]

  defines = audio_codec_defines
}

rtc_library("webrtc_opus_wrapper") {
  poisonous = [ "audio_codecs" ]
  sources = [
    "codecs/opus/opus_inst.h",
    "codecs/opus/opus_interface.cc",
    "codecs/opus/opus_interface.h",
  ]

  defines = audio_coding_defines

  deps = [
    "../../rtc_base:checks",
    "../../rtc_base:ignore_wundef",
  ]

  if (rtc_build_opus) {
    deps += [ rtc_opus_dir ]
    public_configs = [ "//third_party/opus:opus_config" ]
  } else if (build_with_mozilla) {
    include_dirs = [ getenv("DIST") + "/include/opus" ]
  }
}

if (rtc_enable_protobuf) {
  proto_library("ana_debug_dump_proto") {
    visibility += webrtc_default_visibility
    sources = [ "audio_network_adaptor/debug_dump.proto" ]
    deps = [ ":ana_config_proto" ]
    proto_out_dir = "modules/audio_coding/audio_network_adaptor"
  }
  proto_library("ana_config_proto") {
    visibility += [ "*" ]
    sources = [ "audio_network_adaptor/config.proto" ]
    proto_out_dir = "modules/audio_coding/audio_network_adaptor"
  }
}

rtc_library("audio_network_adaptor_config") {
  visibility += webrtc_default_visibility
  sources = [
    "audio_network_adaptor/audio_network_adaptor_config.cc",
    "audio_network_adaptor/include/audio_network_adaptor_config.h",
  ]
}

rtc_library("audio_network_adaptor") {
  visibility += webrtc_default_visibility
  sources = [
    "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_plr_based.cc",
    "audio_network_adaptor/fec_controller_plr_based.h",
    "audio_network_adaptor/frame_length_controller.cc",
    "audio_network_adaptor/frame_length_controller.h",
    "audio_network_adaptor/frame_length_controller_v2.cc",
    "audio_network_adaptor/frame_length_controller_v2.h",
    "audio_network_adaptor/include/audio_network_adaptor.h",
    "audio_network_adaptor/util/threshold_curve.h",
  ]

  public_deps +=  # no-presubmit-check TODO(webrtc:8603)
      [ ":audio_network_adaptor_config" ]

  deps = [
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/environment",
    "../../api/rtc_event_log",
    "../../common_audio",
    "../../logging:rtc_event_audio",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:protobuf_utils",
    "../../rtc_base:safe_conversions",
    "../../rtc_base/system:file_wrapper",
    "../../system_wrappers",
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]

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

rtc_library("neteq") {
  visibility += webrtc_default_visibility
  sources = [
    "neteq/accelerate.cc",
    "neteq/accelerate.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/decoder_database.cc",
    "neteq/decoder_database.h",
    "neteq/delay_constraints.cc",
    "neteq/delay_constraints.h",
    "neteq/delay_manager.cc",
    "neteq/delay_manager.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/expand_uma_logger.cc",
    "neteq/expand_uma_logger.h",
    "neteq/histogram.cc",
    "neteq/histogram.h",
    "neteq/merge.cc",
    "neteq/merge.h",
    "neteq/neteq_impl.cc",
    "neteq/neteq_impl.h",
    "neteq/normal.cc",
    "neteq/normal.h",
    "neteq/packet.cc",
    "neteq/packet.h",
    "neteq/packet_arrival_history.cc",
    "neteq/packet_arrival_history.h",
    "neteq/packet_buffer.cc",
    "neteq/packet_buffer.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/reorder_optimizer.cc",
    "neteq/reorder_optimizer.h",
    "neteq/statistics_calculator.cc",
    "neteq/statistics_calculator.h",
    "neteq/sync_buffer.cc",
    "neteq/sync_buffer.h",
    "neteq/time_stretch.cc",
    "neteq/time_stretch.h",
    "neteq/timestamp_scaler.cc",
    "neteq/timestamp_scaler.h",
    "neteq/underrun_optimizer.cc",
    "neteq/underrun_optimizer.h",
  ]

  deps = [
    ":webrtc_cng",
    "..:module_api_public",
    "../../api:field_trials_view",
    "../../api:rtp_headers",
    "../../api:rtp_packet_info",
    "../../api:scoped_refptr",
    "../../api/audio:audio_frame_api",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/environment",
    "../../api/neteq:delay_manager_api",
    "../../api/neteq:neteq_api",
    "../../api/neteq:neteq_controller_api",
    "../../api/neteq:tick_timer",
    "../../api/units:time_delta",
    "../../api/units:timestamp",

    # TODO: bugs.webrtc.org/496700738 - fix dependency.
    "../../common_audio",  # keep
    "../../common_audio:common_audio_c",
    "../../common_audio:common_audio_cc",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:event_tracer",
    "../../rtc_base:logging",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:safe_minmax",
    "../../rtc_base:sanitizer",
    "../../rtc_base/experiments:field_trial_parser",
    "../../system_wrappers",
    "../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

# 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_library("neteq_tools_minimal") {
  visibility += webrtc_default_visibility
  sources = [
    "neteq/tools/audio_sink.cc",
    "neteq/tools/audio_sink.h",
    "neteq/tools/encode_neteq_input.cc",
    "neteq/tools/encode_neteq_input.h",
    "neteq/tools/neteq_input.cc",
    "neteq/tools/neteq_input.h",
    "neteq/tools/neteq_test.cc",
    "neteq/tools/neteq_test.h",
    "neteq/tools/packet_source.cc",
    "neteq/tools/packet_source.h",
  ]

  deps = [
    "../../api:field_trials_view",
    "../../api:neteq_simulator_api",
    "../../api:rtp_headers",
    "../../api:scoped_refptr",
    "../../api/audio:audio_frame_api",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/environment",
    "../../api/environment:environment_factory",
    "../../api/neteq:default_neteq_factory",
    "../../api/neteq:neteq_api",
    "../../api/units:timestamp",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:stringutils",
    "../../system_wrappers",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
  defines = audio_codec_defines
}

rtc_library("neteq_test_tools") {
  visibility += webrtc_default_visibility
  testonly = true
  sources = [
    "neteq/tools/audio_checksum.h",
    "neteq/tools/audio_loop.cc",
    "neteq/tools/audio_loop.h",
    "neteq/tools/constant_pcm_packet_source.cc",
    "neteq/tools/constant_pcm_packet_source.h",
    "neteq/tools/initial_packet_inserter_neteq_input.cc",
    "neteq/tools/initial_packet_inserter_neteq_input.h",
    "neteq/tools/neteq_rtp_dump_input.cc",
    "neteq/tools/neteq_rtp_dump_input.h",
    "neteq/tools/output_audio_file.h",
    "neteq/tools/output_wav_file.h",
    "neteq/tools/rtp_file_source.cc",
    "neteq/tools/rtp_file_source.h",
    "neteq/tools/rtp_generator.cc",
    "neteq/tools/rtp_generator.h",
  ]

  deps = [
    ":neteq_tools",
    ":neteq_tools_minimal",
    ":pcm16b",
    "../../api:rtp_header_extension_id",
    "../../api:rtp_headers",
    "../../api/units:timestamp",
    "../../common_audio",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:copy_on_write_buffer",
    "../../rtc_base:digest",
    "../../rtc_base:stringutils",
    "../../rtc_base/system:arch",
    "../../test:rtp_test_utils",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("neteq_tools") {
  visibility += webrtc_default_visibility
  sources = [
    "neteq/tools/fake_decode_from_file.cc",
    "neteq/tools/fake_decode_from_file.h",
    "neteq/tools/neteq_delay_analyzer.cc",
    "neteq/tools/neteq_delay_analyzer.h",
    "neteq/tools/neteq_replacement_input.cc",
    "neteq/tools/neteq_replacement_input.h",
    "neteq/tools/neteq_stats_getter.cc",
    "neteq/tools/neteq_stats_getter.h",
    "neteq/tools/neteq_stats_plotter.cc",
    "neteq/tools/neteq_stats_plotter.h",
  ]

  deps = [
    ":neteq_input_audio_tools",
    ":neteq_tools_minimal",
    "../../api:rtp_headers",
    "../../api:rtp_packet_info",
    "../../api/audio:audio_frame_api",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/neteq:neteq_api",
    "../../logging:rtc_event_audio",
    "../../logging:rtc_event_rtp_rtcp",
    "../../rtc_base:buffer",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:stringutils",
    "../../rtc_base:timeutils",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]

  if (rtc_enable_protobuf) {
    sources += [
      "neteq/tools/neteq_event_log_input.cc",
      "neteq/tools/neteq_event_log_input.h",
    ]
    deps += [ "../../logging:rtc_event_log_parser" ]
    public_deps +=  # no-presubmit-check TODO(webrtc:8603)
        [ "../../logging:rtc_event_log_proto" ]
  }
}

rtc_library("neteq_input_audio_tools") {
  visibility += webrtc_default_visibility
  sources = [
    "neteq/tools/input_audio_file.cc",
    "neteq/tools/input_audio_file.h",
    "neteq/tools/resample_input_audio_file.cc",
    "neteq/tools/resample_input_audio_file.h",
  ]

  deps = [
    "../../common_audio",
    "../../rtc_base:checks",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

if (rtc_enable_protobuf) {
  # Only used for test purpose. Since we want to use it from chromium
  # (see audio_coding_modules_tests_shared below), we cannot guard it
  # under rtc_include_tests.
  proto_library("neteq_unittest_proto") {
    testonly = true
    sources = [ "neteq/neteq_unittest.proto" ]
    proto_out_dir = "modules/audio_coding/neteq"
  }
}

# Allow to re-use some test classes from chromium.
rtc_library("audio_coding_modules_tests_shared") {
  testonly = true
  visibility = []
  visibility = [ "*" ]

  sources = [
    "neteq/test/neteq_decoding_test.cc",
    "neteq/test/neteq_decoding_test.h",
    "neteq/test/result_sink.cc",
    "neteq/test/result_sink.h",
    "test/PCMFile.cc",
    "test/PCMFile.h",
    "test/TestStereo.cc",
    "test/TestStereo.h",
    "test/opus_test.cc",
    "test/opus_test.h",
  ]

  deps = [
    ":audio_coding",
    ":audio_coding_module_typedefs",
    ":neteq_test_tools",
    ":neteq_tools_minimal",
    ":webrtc_opus_wrapper",
    "..:module_api",
    "../../api:rtp_headers",
    "../../api:rtp_parameters",
    "../../api/audio:audio_frame_api",
    "../../api/audio_codecs:audio_codecs_api",
    "../../api/audio_codecs:builtin_audio_decoder_factory",
    "../../api/audio_codecs:builtin_audio_encoder_factory",
    "../../api/environment",
    "../../api/environment:environment_factory",
    "../../api/neteq:default_neteq_factory",
    "../../api/neteq:neteq_api",
    "../../api/units:timestamp",
    "../../common_audio",
    "../../rtc_base:checks",
    "../../rtc_base:digest",
    "../../rtc_base:stringutils",
    "../../system_wrappers",
    "../../test:create_test_environment",
    "../../test:fileutils",
    "../../test:test_support",
    "../rtp_rtcp:rtp_rtcp_format",
    "//testing/gtest",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
  defines = audio_coding_defines

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

if (rtc_include_tests) {
  audio_coding_deps = [
    ":audio_encoder_cng",
    ":g711",
    ":g722",
    ":pcm16b",
    "../../common_audio",
    "../../system_wrappers",
  ]
  if (rtc_include_opus) {
    audio_coding_deps += [ ":webrtc_opus" ]
  }
  if (!build_with_mozilla && !build_with_chromium) {
    audio_coding_deps += [ ":red" ]
  }

  rtc_source_set("mocks") {
    testonly = true
    sources = [
      "audio_network_adaptor/mock/mock_audio_network_adaptor.h",
      "audio_network_adaptor/mock/mock_controller.h",
      "audio_network_adaptor/mock/mock_controller_manager.h",
      "audio_network_adaptor/mock/mock_debug_dump_writer.h",
    ]
    deps = [
      ":audio_network_adaptor",
      "../../api/audio_codecs:audio_codecs_api",
      "../../test:test_support",
    ]
  }
  group("audio_coding_tests") {
    visibility += webrtc_default_visibility
    testonly = true
    public_deps = [  # no-presubmit-check TODO(webrtc:8603)
      ":acm_receive_test",
      ":acm_send_test",
      ":audio_codec_speed_tests",
      ":audio_decoder_unittests",
      ":g711_test",
      ":g722_test",
      ":neteq_opus_quality_test",
      ":neteq_pcm16b_quality_test",
      ":neteq_pcmu_quality_test",
      ":neteq_speed_test",
      ":rtp_analyze",
      ":rtp_encode",
      ":rtp_jitter",
      ":rtpcat",
      ":webrtc_opus_fec_test",
    ]
    if (rtc_enable_protobuf) {
      public_deps +=  # no-presubmit-check TODO(webrtc:8603)
          [ ":neteq_rtpplay" ]
    }
  }

  rtc_cc_test("audio_coding_modules_tests") {
    sources = [
      "test/Channel.cc",
      "test/Channel.h",
      "test/EncodeDecodeTest.cc",
      "test/EncodeDecodeTest.h",
      "test/PacketLossTest.cc",
      "test/PacketLossTest.h",
      "test/RTPFile.cc",
      "test/RTPFile.h",
      "test/TestAllCodecs.cc",
      "test/TestAllCodecs.h",
      "test/TestRedFec.cc",
      "test/TestRedFec.h",
      "test/TestVADDTX.cc",
      "test/TestVADDTX.h",
      "test/Tester.cc",
      "test/target_delay_unittest.cc",
    ]
    deps = [
      ":audio_coding",
      ":audio_coding_module_typedefs",
      ":audio_coding_modules_tests_shared",
      ":audio_encoder_cng",
      ":pcm16b_c",
      ":red",
      "../../api:rtp_headers",
      "../../api:scoped_refptr",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../api/audio_codecs/L16:audio_decoder_L16",
      "../../api/audio_codecs/L16:audio_encoder_L16",
      "../../api/audio_codecs/g711:audio_decoder_g711",
      "../../api/audio_codecs/g711:audio_encoder_g711",
      "../../api/audio_codecs/g722:audio_decoder_g722",
      "../../api/audio_codecs/g722:audio_encoder_g722",
      "../../api/audio_codecs/opus:audio_decoder_opus",
      "../../api/audio_codecs/opus:audio_encoder_opus",
      "../../api/environment",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:timestamp",
      "../../common_audio",
      "../../rtc_base:checks",
      "../../rtc_base:ip_address",
      "../../rtc_base:macromagic",
      "../../rtc_base:stringutils",
      "../../rtc_base/synchronization:mutex",
      "../../test:create_test_environment",
      "../../test:create_test_field_trials",
      "../../test:fileutils",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/strings",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
    data_deps = [ "../../resources:modules_tests_data" ]
    if (is_ios) {
      deps += [ "../../resources:modules_tests_bundle_data" ]
    }
    defines = audio_coding_defines
  }

  rtc_library("audio_coding_perf_tests") {
    testonly = true
    visibility += webrtc_default_visibility

    sources = []
    deps = [
      ":neteq_performance_unittest",
      ":opus_complexity_unittest",
    ]
  }

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

    defines = audio_coding_defines

    deps = [
      ":audio_coding",
      ":neteq_tools_minimal",
      "../../api:scoped_refptr",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/environment",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../test:create_test_environment",
      "../../test:test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "//testing/gtest",
    ]

    deps += audio_coding_deps
  }

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

    defines = audio_coding_defines

    deps = [
      ":audio_coding",
      ":audio_coding_module_typedefs",
      ":neteq_input_audio_tools",
      ":neteq_tools_minimal",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../api/environment",
      "../../rtc_base:checks",
      "../../test:create_test_environment",
      "../rtp_rtcp:rtp_rtcp_format",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/strings",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
    deps += audio_coding_deps
  }

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

    defines = neteq_defines

    deps = [
             ":neteq_input_audio_tools",
             "../../api:bitrate_allocation",
             "../../api/audio_codecs:audio_codecs_api",
             "../../api/audio_codecs/g722:audio_encoder_g722_config",
             "../../api/audio_codecs/opus:audio_encoder_opus",
             "../../api/audio_codecs/opus:audio_encoder_opus_config",
             "../../api/units:data_rate",
             "../../rtc_base:buffer",
             "../../rtc_base:checks",
             "../../test:create_test_environment",
             "../../test:create_test_field_trials",
             "../../test:fileutils",
             "../../test:test_support",
           ] + audio_coding_deps

    data = audio_decoder_unittests_resources

    if (is_android) {
      deps += [ "//build/android/gtest_apk:native_test_instrumentation_test_runner_java" ]
    }
    if (is_ios) {
      deps += [ ":audio_decoder_unittests_bundle_data" ]
    }
  }

  if (rtc_enable_protobuf) {
    rtc_library("neteq_test_factory") {
      testonly = true
      visibility += webrtc_default_visibility
      defines = audio_codec_defines
      deps = [
        ":neteq_input_audio_tools",
        ":neteq_test_tools",
        ":neteq_tools",
        ":neteq_tools_minimal",
        "../../api:field_trials",
        "../../api:make_ref_counted",
        "../../api:scoped_refptr",
        "../../api/audio_codecs:audio_codecs_api",
        "../../api/audio_codecs:builtin_audio_decoder_factory",
        "../../api/environment",
        "../../api/neteq:neteq_api",
        "../../logging:rtc_event_log_parser",
        "../../rtc_base:checks",
        "../../test:audio_test_common",
        "../rtp_rtcp:rtp_rtcp_format",
        "//third_party/abseil-cpp/absl/strings:string_view",
      ]
      sources = [
        "neteq/tools/neteq_test_factory.cc",
        "neteq/tools/neteq_test_factory.h",
      ]
    }
  }

  if (rtc_enable_protobuf) {
    rtc_executable("neteq_rtpplay") {
      testonly = true
      visibility += [ "*" ]
      defines = []
      deps = [
        ":neteq_test_factory",
        ":neteq_tools_minimal",
        "../../rtc_base:checks",
        "../../rtc_base:stringutils",
        "//third_party/abseil-cpp/absl/flags:flag",
        "//third_party/abseil-cpp/absl/flags:parse",
        "//third_party/abseil-cpp/absl/strings:string_view",
      ]
      sources = [ "neteq/tools/neteq_rtpplay.cc" ]
    }
  }

  audio_codec_speed_tests_resources = [
    "//resources/audio_coding/music_stereo_48kHz.pcm",
    "//resources/audio_coding/speech_mono_16kHz.pcm",
    "//resources/audio_coding/speech_mono_32_48kHz.pcm",
  ]

  if (is_ios) {
    bundle_data("audio_codec_speed_tests_data") {
      testonly = true
      sources = audio_codec_speed_tests_resources
      outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
    }
  }

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

    data = audio_codec_speed_tests_resources

    if (is_android) {
      deps += [ "//build/android/gtest_apk:native_test_instrumentation_test_runner_java" ]
    }

    if (is_ios) {
      deps += [ ":audio_codec_speed_tests_data" ]
    }

    deps += [
      ":webrtc_opus",
      "../../rtc_base:checks",
      "../../test:test_support",
      "../audio_processing",
      "//testing/gtest",
    ]
  }

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

    deps = [
      ":neteq",
      ":neteq_test_tools",
      ":pcm16b",
      "../../api:rtp_headers",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/environment",
      "../../api/environment:environment_factory",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:timestamp",
      "../../rtc_base:checks",
      "../../system_wrappers",
      "../../test:create_test_environment",
      "../../test:fileutils",
      "//testing/gtest",
    ]
  }

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

    deps = [
      ":neteq_input_audio_tools",
      ":neteq_test_tools",
      ":neteq_tools_minimal",
      "../../api:rtp_headers",
      "../../api:scoped_refptr",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:timestamp",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:stringutils",
      "../../test:create_test_environment",
      "../../test:fileutils",
      "../../test:test_support",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/strings",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_executable("rtp_encode") {
    testonly = true

    deps = [
      ":audio_coding",
      ":audio_coding_module_typedefs",
      ":neteq_input_audio_tools",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs/L16:audio_encoder_L16",
      "../../api/audio_codecs/g711:audio_encoder_g711",
      "../../api/audio_codecs/g722:audio_encoder_g722",
      "../../api/audio_codecs/opus:audio_encoder_opus",
      "../../api/environment:environment_factory",
      "../../rtc_base:checks",
      "../../rtc_base:ip_address",
      "../../rtc_base:safe_conversions",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/flags:parse",
    ]

    deps += audio_coding_deps

    sources = [ "neteq/tools/rtp_encode.cc" ]

    defines = audio_coding_defines
  }

  rtc_executable("rtp_jitter") {
    testonly = true

    deps = [
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../rtp_rtcp:rtp_rtcp_format",
    ]

    deps += audio_coding_deps

    sources = [ "neteq/tools/rtp_jitter.cc" ]

    defines = audio_coding_defines
  }

  rtc_executable("rtpcat") {
    testonly = true

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

    deps = [
      "../../rtc_base:checks",
      "../../test:rtp_test_utils",
      "//testing/gtest",
    ]
  }

  rtc_executable("rtp_analyze") {
    testonly = true

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

    deps = [
      ":neteq_test_tools",
      "../../api:rtp_header_extension_id",
      "../../api:rtp_headers",
      "../../rtc_base:checks",
      "../rtp_rtcp:rtp_rtcp_format",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/flags:parse",
    ]
  }

  rtc_test("neteq_opus_quality_test") {
    testonly = true

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

    deps = [
      ":neteq",
      ":neteq_quality_test_support",
      ":neteq_tools",
      ":webrtc_opus",
      "../../api:rtp_parameters",
      "../../api/audio_codecs:audio_codecs_api",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../test:test_support",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/opus",
    ]
  }

  rtc_executable("neteq_speed_test") {
    testonly = true

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

    deps = [
      ":neteq_test_support",
      "../../rtc_base:checks",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/flags:parse",
    ]
  }

  rtc_test("neteq_pcmu_quality_test") {
    testonly = true

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

    deps = [
      ":g711",
      ":neteq_quality_test_support",
      "../../api/audio_codecs:audio_codecs_api",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/flags:flag",
    ]
  }

  rtc_test("neteq_pcm16b_quality_test") {
    testonly = true

    sources = [ "neteq/test/neteq_pcm16b_quality_test.cc" ]

    deps = [
      ":neteq_quality_test_support",
      ":pcm16b",
      "../../api/audio_codecs:audio_codecs_api",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/flags:flag",
    ]
  }

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

  rtc_test("webrtc_opus_fec_test") {
    testonly = true

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

    deps = [
      ":webrtc_opus",
      "../../common_audio",
      "../../test:fileutils",
      "../../test:test_support",
      "//testing/gtest",
    ]
  }

  rtc_library("audio_coding_unittests_helper") {
    testonly = true
    sources = [
      "neteq/mock/mock_buffer_level_filter.h",
      "neteq/mock/mock_decoder_database.h",
      "neteq/mock/mock_delay_manager.h",
      "neteq/mock/mock_dtmf_buffer.h",
      "neteq/mock/mock_dtmf_tone_generator.h",
      "neteq/mock/mock_expand.h",
      "neteq/mock/mock_histogram.h",
      "neteq/mock/mock_neteq_controller.h",
      "neteq/mock/mock_packet_arrival_history.h",
      "neteq/mock/mock_packet_buffer.h",
      "neteq/mock/mock_red_payload_splitter.h",
      "neteq/mock/mock_statistics_calculator.h",
    ]
    deps = [
      ":neteq",
      ":webrtc_cng",
      "../../api:field_trials_view",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/neteq:neteq_api",
      "../../api/neteq:neteq_controller_api",
      "../../api/neteq:tick_timer",
      "../../test:create_test_environment",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_library("audio_coding_unittests") {
    testonly = true
    visibility += webrtc_default_visibility

    sources = []

    deps = [
      ":acm_remixing_unittest",
      ":acm_resampler_unittest",
      ":audio_coding_module_unittest",
      ":audio_decoder_multi_channel_opus_unittest",
      ":audio_decoder_opus_unittest",
      ":audio_encoder_cng_unittest",
      ":audio_encoder_copy_red_unittest",
      ":audio_encoder_multi_channel_opus_unittest",
      ":audio_encoder_opus_unittest",
      ":audio_multi_vector_unittest",
      ":audio_network_adaptor_impl_unittest",
      ":audio_vector_unittest",
      ":background_noise_unittest",
      ":bitrate_controller_unittest",
      ":buffer_level_filter_unittest",
      ":builtin_audio_decoder_factory_unittest",
      ":builtin_audio_encoder_factory_unittest",
      ":call_statistics_unittest",
      ":channel_controller_unittest",
      ":cng_unittest",
      ":comfort_noise_unittest",
      ":controller_manager_unittest",
      ":decision_logic_unittest",
      ":decoder_database_unittest",
      ":delay_constraints_unittest",
      ":delay_manager_unittest",
      ":dsp_helper_unittest",
      ":dtmf_buffer_unittest",
      ":dtmf_tone_generator_unittest",
      ":dtx_controller_unittest",
      ":event_log_writer_unittest",
      ":expand_unittest",
      ":fec_controller_plr_based_unittest",
      ":frame_length_controller_unittest",
      ":frame_length_controller_v2_unittest",
      ":histogram_unittest",
      ":input_audio_file_unittest",
      ":legacy_encoded_audio_frame_unittest",
      ":merge_unittest",
      ":neteq_decoder_plc_unittest",
      ":neteq_impl_unittest",
      ":neteq_network_stats_unittest",
      ":neteq_stereo_unittest",
      ":neteq_unittest",
      ":normal_unittest",
      ":opus_bandwidth_unittest",
      ":opus_unittest",
      ":packet_arrival_history_unittest",
      ":packet_buffer_unittest",
      ":random_vector_unittest",
      ":red_payload_splitter_unittest",
      ":reorder_optimizer_unittest",
      ":statistics_calculator_unittest",
      ":sync_buffer_unittest",
      ":threshold_curve_unittest",
      ":time_stretch_unittest",
      ":timestamp_scaler_unittest",
      ":underrun_optimizer_unittest",
      "codecs/opus/test",
      "codecs/opus/test:test_unittest",
    ]
  }
}

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

# For backwards compatibility only! Use
# webrtc/api/audio_codecs:audio_codecs_api instead.
# TODO(ossu): Remove this.
rtc_source_set("audio_encoder_interface") {
  visibility += [ "*" ]
  sources = [ "codecs/audio_encoder.h" ]
  deps = [ "../../api/audio_codecs:audio_codecs_api" ]
}

if (rtc_include_tests) {
  rtc_library("acm_remixing_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "acm2/acm_remixing_unittest.cc" ]
    deps = [
      ":audio_coding",
      "../../api/audio:audio_frame_api",
      "../../test:test_support",
    ]
  }

  rtc_library("acm_resampler_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "acm2/acm_resampler_unittest.cc" ]
    deps = [
      ":audio_coding",
      "../../api/audio:audio_frame_api",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_coding_module_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "acm2/audio_coding_module_unittest.cc" ]
    deps = [
      ":acm_receive_test",
      ":acm_send_test",
      ":audio_coding",
      ":audio_coding_module_typedefs",
      ":audio_encoder_cng",
      ":g711",
      ":neteq_input_audio_tools",
      ":neteq_test_tools",
      ":neteq_tools_minimal",
      "../../api:make_ref_counted",
      "../../api:scoped_refptr",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../api/audio_codecs/opus:audio_decoder_multiopus",
      "../../api/audio_codecs/opus:audio_encoder_multiopus",
      "../../api/audio_codecs/opus:audio_encoder_opus",
      "../../api/audio_codecs/opus:audio_encoder_opus_config",
      "../../api/environment",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:timestamp",
      "../../common_audio",
      "../../rtc_base:buffer",
      "../../rtc_base:digest",
      "../../rtc_base:safe_conversions",
      "../../rtc_base:stringutils",
      "../../rtc_base/system:arch",
      "../../test:audio_codec_mocks",
      "../../test:audio_test_common",
      "../../test:create_test_environment",
      "../../test:fileutils",
      "../../test:test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_library("call_statistics_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "acm2/call_statistics_unittest.cc" ]
    deps = [
      ":audio_coding",
      ":audio_coding_module_typedefs",
      "../../api/audio:audio_frame_api",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_network_adaptor_impl_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/audio_network_adaptor_impl_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":mocks",
      "../../api:time_controller",
      "../../api/rtc_event_log",
      "../../api/units:time_delta",
      "../../api/units:timestamp",
      "../../logging:mocks",
      "../../logging:rtc_event_audio",
      "../../test:create_test_environment",
      "../../test:test_support",
      "../../test/time_controller",
    ]
    if (rtc_enable_protobuf) {
      deps += [
        ":ana_config_proto",
        ":ana_debug_dump_proto",
      ]
    }
  }

  rtc_library("bitrate_controller_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/bitrate_controller_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
    ]
  }

  rtc_library("channel_controller_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/channel_controller_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      "../../test:test_support",
    ]
  }

  rtc_library("controller_manager_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/controller_manager_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      ":mocks",
      "../../api/environment",
      "../../api/units:time_delta",
      "../../api/units:timestamp",
      "../../rtc_base:checks",
      "../../system_wrappers",
      "../../test:create_test_environment",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
    if (rtc_enable_protobuf) {
      deps += [ ":ana_config_proto" ]
    }
  }

  rtc_library("dtx_controller_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/dtx_controller_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      "../../test:test_support",
    ]
  }

  rtc_library("event_log_writer_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/event_log_writer_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      "../../api/rtc_event_log",
      "../../logging:mocks",
      "../../logging:rtc_event_audio",
      "../../rtc_base:checks",
      "../../test:test_support",
    ]
  }

  rtc_library("fec_controller_plr_based_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/fec_controller_plr_based_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      "../../common_audio:mock_common_audio",
      "../../rtc_base:checks",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("frame_length_controller_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/frame_length_controller_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      "../../test:test_support",
    ]
  }

  rtc_library("frame_length_controller_v2_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/frame_length_controller_v2_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      ":audio_network_adaptor_config",
      "../../test:test_support",
    ]
  }

  rtc_library("threshold_curve_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "audio_network_adaptor/util/threshold_curve_unittest.cc" ]
    deps = [
      ":audio_network_adaptor",
      "../../rtc_base:checks",
      "../../test:test_support",
    ]
  }

  rtc_library("builtin_audio_decoder_factory_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/builtin_audio_decoder_factory_unittest.cc" ]
    deps = [
      "../../api:rtp_parameters",
      "../../api:scoped_refptr",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/environment",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("builtin_audio_encoder_factory_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/builtin_audio_encoder_factory_unittest.cc" ]
    deps = [
      "../../api:scoped_refptr",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../api/environment",
      "../../rtc_base:buffer",
      "../../rtc_base:safe_conversions",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_encoder_cng_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/cng/audio_encoder_cng_unittest.cc" ]
    deps = [
      ":audio_encoder_cng",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/units:time_delta",
      "../../common_audio",
      "../../common_audio:mock_common_audio",
      "../../rtc_base:buffer",
      "../../rtc_base:safe_conversions",
      "../../test:audio_codec_mocks",
      "../../test:rtc_expect_death",
      "../../test:test_support",
    ]
  }

  rtc_library("cng_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/cng/cng_unittest.cc" ]
    deps = [
      ":webrtc_cng",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("legacy_encoded_audio_frame_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/legacy_encoded_audio_frame_unittest.cc" ]
    deps = [
      ":legacy_encoded_audio_frame",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_decoder_multi_channel_opus_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/opus/audio_decoder_multi_channel_opus_unittest.cc" ]
    deps = [
      ":audio_coding_opus_common",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs/opus:audio_decoder_multiopus",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_decoder_opus_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/opus/audio_decoder_opus_unittest.cc" ]
    deps = [
      ":audio_coding_modules_tests_shared",
      ":webrtc_opus",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs/opus:audio_encoder_opus_config",
      "../../api/environment",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:random",
      "../../rtc_base:safe_conversions",
      "../../test:create_test_environment",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_encoder_multi_channel_opus_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/opus/audio_encoder_multi_channel_opus_unittest.cc" ]
    deps = [
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs/opus:audio_encoder_multiopus",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_encoder_opus_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/opus/audio_encoder_opus_unittest.cc" ]
    deps = [
      ":audio_network_adaptor_config",
      ":mocks",
      ":neteq_test_tools",
      ":webrtc_opus",
      ":webrtc_opus_wrapper",
      "../../api:bitrate_allocation",
      "../../api:field_trials",
      "../../api:field_trials_view",
      "../../api:rtp_parameters",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs/opus:audio_encoder_opus",
      "../../api/audio_codecs/opus:audio_encoder_opus_config",
      "../../api/units:data_rate",
      "../../api/units:time_delta",
      "../../api/units:timestamp",
      "../../common_audio:mock_common_audio",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../test:create_test_environment",
      "../../test:create_test_field_trials",
      "../../test:fileutils",
      "../../test:test_support",
      "../../test/time_controller",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_library("opus_bandwidth_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/opus/opus_bandwidth_unittest.cc" ]
    deps = [
      ":neteq_test_tools",
      "../../api:field_trials",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs/opus:audio_decoder_opus",
      "../../api/audio_codecs/opus:audio_encoder_opus",
      "../../api/audio_codecs/opus:audio_encoder_opus_config",
      "../../api/environment",
      "../../api/environment:environment_factory",
      "../../common_audio",
      "../../rtc_base:buffer",
      "../../test:create_test_field_trials",
      "../../test:fileutils",
      "../../test:test_support",
      "codecs/opus/test",
    ]
  }

  rtc_library("opus_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/opus/opus_unittest.cc" ]
    deps = [
      ":neteq_test_tools",
      ":webrtc_opus_wrapper",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../test:fileutils",
      "../../test:test_support",
      "//third_party/opus",
    ]
  }

  rtc_library("audio_encoder_copy_red_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "codecs/red/audio_encoder_copy_red_unittest.cc" ]
    deps = [
      ":red",
      "../../api:field_trials",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/units:time_delta",
      "../../rtc_base:buffer",
      "../../rtc_base:safe_conversions",
      "../../test:audio_codec_mocks",
      "../../test:create_test_field_trials",
      "../../test:rtc_expect_death",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_library("audio_multi_vector_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/audio_multi_vector_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/audio:audio_frame_api",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
    ]
  }

  rtc_library("audio_vector_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/audio_vector_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/audio:audio_frame_api",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
    ]
  }

  rtc_library("background_noise_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/background_noise_unittest.cc" ]
    deps = [
      ":neteq",
      "../../test:test_support",
    ]
  }

  rtc_library("buffer_level_filter_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/buffer_level_filter_unittest.cc" ]
    deps = [
      ":neteq",
      "../../rtc_base:stringutils",
      "../../test:test_support",
    ]
  }

  rtc_library("comfort_noise_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/comfort_noise_unittest.cc" ]
    deps = [
      ":audio_coding_unittests_helper",
      ":neteq",
      "../../test:test_support",
    ]
  }

  rtc_library("decision_logic_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/decision_logic_unittest.cc" ]
    deps = [
      ":audio_coding_unittests_helper",
      ":neteq",
      "../../api/neteq:neteq_api",
      "../../api/neteq:neteq_controller_api",
      "../../api/neteq:tick_timer",
      "../../test:create_test_field_trials",
      "../../test:test_support",
    ]
  }

  rtc_library("decoder_database_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/decoder_database_unittest.cc" ]
    deps = [
      ":neteq",
      ":webrtc_cng",
      "../../api:make_ref_counted",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../test:audio_codec_mocks",
      "../../test:create_test_environment",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/memory",
    ]
  }

  rtc_library("delay_constraints_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/delay_constraints_unittest.cc" ]
    deps = [
      ":neteq",
      "../../rtc_base:checks",
      "../../test:test_support",
    ]
  }

  rtc_library("delay_manager_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/delay_manager_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/neteq:neteq_controller_api",
      "../../api/neteq:tick_timer",
      "../../test:create_test_field_trials",
      "../../test:test_support",
    ]
  }

  rtc_library("dsp_helper_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/dsp_helper_unittest.cc" ]
    deps = [
      ":neteq",
      "../../test:test_support",
    ]
  }

  rtc_library("dtmf_buffer_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/dtmf_buffer_unittest.cc" ]
    deps = [
      ":neteq",
      "../../rtc_base:ip_address",
      "../../test:test_support",
    ]
  }

  rtc_library("dtmf_tone_generator_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/dtmf_tone_generator_unittest.cc" ]
    deps = [
      ":neteq",
      "../../common_audio",
      "../../rtc_base:stringutils",
      "../../test:test_support",
    ]
  }

  rtc_library("expand_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/expand_unittest.cc" ]
    deps = [
      ":neteq",
      ":neteq_input_audio_tools",
      "../../api/neteq:tick_timer",
      "../../rtc_base:safe_conversions",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("histogram_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/histogram_unittest.cc" ]
    deps = [
      ":neteq",
      "../../test:test_support",
    ]
  }

  rtc_library("merge_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/merge_unittest.cc" ]
    deps = [
      ":neteq",
      ":neteq_input_audio_tools",
      "../../api/neteq:tick_timer",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("neteq_decoder_plc_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/neteq_decoder_plc_unittest.cc" ]
    deps = [
      ":neteq_input_audio_tools",
      ":neteq_test_tools",
      ":neteq_tools_minimal",
      ":pcm16b",
      "../../api:field_trials",
      "../../api:make_ref_counted",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/neteq:neteq_api",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../test:audio_test_common",
      "../../test:create_test_field_trials",
      "../../test:fileutils",
      "../../test:test_support",
      "../rtp_rtcp:rtp_rtcp_format",
    ]
  }

  rtc_library("neteq_impl_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/neteq_impl_unittest.cc" ]
    deps = [
      ":audio_coding_unittests_helper",
      ":g711",
      ":neteq",
      "../../api:make_ref_counted",
      "../../api:rtp_headers",
      "../../api:rtp_packet_info",
      "../../api:scoped_refptr",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/environment",
      "../../api/neteq:default_neteq_controller_factory",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/neteq:neteq_controller_api",
      "../../api/neteq:tick_timer",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../system_wrappers",
      "../../test:audio_codec_mocks",
      "../../test:audio_test_common",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("neteq_network_stats_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/neteq_network_stats_unittest.cc" ]
    deps = [
      ":neteq_test_tools",
      "../../api:make_ref_counted",
      "../../api:rtp_headers",
      "../../api:scoped_refptr",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:timestamp",
      "../../rtc_base:buffer",
      "../../rtc_base:checks",
      "../../test:audio_test_common",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("neteq_stereo_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/neteq_stereo_unittest.cc" ]
    deps = [
      ":neteq_input_audio_tools",
      ":neteq_test_tools",
      ":pcm16b_c",
      "../../api:rtp_headers",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/environment",
      "../../api/neteq:default_neteq_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:timestamp",
      "../../rtc_base:checks",
      "../../rtc_base:stringutils",
      "../../system_wrappers",
      "../../test:create_test_environment",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("neteq_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/neteq_unittest.cc" ]
    deps = [
      ":audio_coding_modules_tests_shared",
      ":neteq_test_tools",
      ":neteq_tools_minimal",
      ":pcm16b_c",
      "..:module_api_public",
      "../../api:field_trials",
      "../../api:rtp_headers",
      "../../api/audio:audio_frame_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/neteq:neteq_api",
      "../../api/units:time_delta",
      "../../rtc_base:safe_conversions",
      "../../rtc_base:stringutils",
      "../../rtc_base/system:arch",
      "../../test:create_test_field_trials",
      "../../test:fileutils",
      "../../test:test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "//third_party/abseil-cpp/absl/flags:flag",
    ]
  }

  rtc_library("normal_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/normal_unittest.cc" ]
    deps = [
      ":audio_coding_unittests_helper",
      ":neteq",
      "../../api/neteq:neteq_api",
      "../../api/neteq:tick_timer",
      "../../test:test_support",
    ]
  }

  rtc_library("packet_arrival_history_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/packet_arrival_history_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/neteq:tick_timer",
      "../../test:test_support",
    ]
  }

  rtc_library("packet_buffer_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/packet_buffer_unittest.cc" ]
    deps = [
      ":audio_coding_unittests_helper",
      ":neteq",
      "../../api:field_trials",
      "../../api:field_trials_view",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/neteq:tick_timer",
      "../../rtc_base:checks",
      "../../test:create_test_field_trials",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_library("random_vector_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/random_vector_unittest.cc" ]
    deps = [
      ":neteq",
      "../../test:test_support",
    ]
  }

  rtc_library("red_payload_splitter_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/red_payload_splitter_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api:make_ref_counted",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/environment",
      "../../rtc_base:checks",
      "../../rtc_base:safe_conversions",
      "../../test:audio_codec_mocks",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("reorder_optimizer_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/reorder_optimizer_unittest.cc" ]
    deps = [
      ":neteq",
      "../../test:test_support",
    ]
  }

  rtc_library("statistics_calculator_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/statistics_calculator_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/neteq:neteq_api",
      "../../api/neteq:tick_timer",
      "../../test:test_support",
    ]
  }

  rtc_library("sync_buffer_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/sync_buffer_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/audio:audio_frame_api",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
    ]
  }

  rtc_library("time_stretch_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/time_stretch_unittest.cc" ]
    deps = [
      ":neteq",
      ":neteq_input_audio_tools",
      "../../rtc_base:checks",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("timestamp_scaler_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/timestamp_scaler_unittest.cc" ]
    deps = [
      ":audio_coding_unittests_helper",
      ":neteq",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../api/environment",
      "../../test:create_test_environment",
      "../../test:test_support",
    ]
  }

  rtc_library("input_audio_file_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/tools/input_audio_file_unittest.cc" ]
    deps = [
      ":neteq_input_audio_tools",
      "../../rtc_base:safe_conversions",
      "../../test:test_support",
    ]
  }

  rtc_library("underrun_optimizer_unittest") {
    testonly = true
    defines = audio_coding_defines
    sources = [ "neteq/underrun_optimizer_unittest.cc" ]
    deps = [
      ":neteq",
      "../../api/neteq:tick_timer",
      "../../test:test_support",
    ]
  }

  rtc_library("opus_complexity_unittest") {
    testonly = true
    sources = [ "codecs/opus/opus_complexity_unittest.cc" ]
    deps = [
      ":neteq_test_tools",
      "../../api/audio_codecs:audio_codecs_api",
      "../../api/audio_codecs/opus:audio_encoder_opus",
      "../../api/audio_codecs/opus:audio_encoder_opus_config",
      "../../api/environment",
      "../../api/test/metrics:global_metrics_logger_and_exporter",
      "../../api/test/metrics:metric",
      "../../rtc_base:buffer",
      "../../test:create_test_environment",
      "../../test:fileutils",
      "../../test:test_support",
    ]
  }

  rtc_library("neteq_performance_unittest") {
    testonly = true
    sources = [ "neteq/test/neteq_performance_unittest.cc" ]
    deps = [
      ":neteq_test_support",
      "../../api/test/metrics:global_metrics_logger_and_exporter",
      "../../api/test/metrics:metric",
      "../../test:test_flags",
      "../../test:test_support",
      "//third_party/abseil-cpp/absl/flags:flag",
    ]
  }
}
