# Copyright (c) 2016 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/audio_coding.gni")

group("modules") {
  deps = [
    "audio_coding",
    "audio_device",
    "audio_mixer",
    "audio_processing",
    "bitrate_controller",
    "congestion_controller",
    "pacing",
    "remote_bitrate_estimator",
    "rtp_rtcp",
    "utility",
    "video_coding",
    "video_processing",
  ]

  if (rtc_desktop_capture_supported) {
    deps += [ "desktop_capture" ]
  }
}

rtc_source_set("module_api_public") {
  sources = [
    "include/module_common_types_public.h",
  ]
  deps = [
    "..:webrtc_common",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("module_api") {
  visibility = [ "*" ]
  sources = [
    "include/module.h",
    "include/module_common_types.cc",
    "include/module_common_types.h",
  ]
  deps = [
    ":module_api_public",
    ":module_fec_api",
    "..:webrtc_common",
    "../api:rtp_headers",
    "../api/video:video_frame_type",
    "../modules/rtp_rtcp:rtp_video_header",
    "../rtc_base:deprecation",  # TODO(bugs.webrtc.org/10336): Remove.
    "../rtc_base:safe_conversions",
    "../rtc_base/system:rtc_export",
  ]
}

rtc_source_set("module_fec_api") {
  visibility = [ "*" ]
  sources = [
    "include/module_fec_types.h",
  ]
}

if (rtc_include_tests) {
  modules_tests_resources = [
    "../resources/audio_coding/testfile32kHz.pcm",
    "../resources/audio_coding/teststereo32kHz.pcm",
    "../resources/foreman_cif.yuv",
  ]

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

  rtc_test("modules_tests") {
    testonly = true

    deps = [
      "../test:test_main",
      "../test:video_test_common",
      "audio_coding:audio_coding_modules_tests",
      "rtp_rtcp:rtp_rtcp_modules_tests",
      "video_coding:video_coding_modules_tests",
      "//testing/gtest",
    ]

    if (rtc_desktop_capture_supported) {
      deps += [ "desktop_capture:desktop_capture_modules_tests" ]
    }

    data = modules_tests_resources

    if (is_android) {
      deps += [
        # NOTE(brandtr): Including Java classes seems only to be possible from
        # rtc_test targets. Therefore we include this target here, instead of
        # in video_coding_modules_tests, where it is actually used.
        "../sdk/android:libjingle_peerconnection_java",
        "//testing/android/native_test:native_test_native_code",
      ]
      shard_timeout = 900
    }

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

  modules_unittests_resources = [
    "../resources/audio_coding/neteq_opus.rtp",
    "../resources/audio_coding/neteq_opus_dtx.rtp",
    "../resources/audio_coding/neteq_universal_new.rtp",
    "../resources/audio_coding/speech_mono_16kHz.pcm",
    "../resources/audio_coding/speech_mono_32_48kHz.pcm",
    "../resources/audio_coding/speech_4_channels_48k_one_second.wav",
    "../resources/audio_coding/testfile32kHz.pcm",
    "../resources/audio_coding/testfile_fake_stereo_32kHz.pcm",
    "../resources/audio_coding/teststereo32kHz.pcm",
    "../resources/audio_device/audio_short16.pcm",
    "../resources/audio_device/audio_short44.pcm",
    "../resources/audio_device/audio_short48.pcm",
    "../resources/audio_processing/agc/agc_audio.pcm",
    "../resources/audio_processing/agc/agc_no_circular_buffer.dat",
    "../resources/audio_processing/agc/agc_pitch_gain.dat",
    "../resources/audio_processing/agc/agc_pitch_lag.dat",
    "../resources/audio_processing/agc/agc_spectral_peak.dat",
    "../resources/audio_processing/agc/agc_vad.dat",
    "../resources/audio_processing/agc/agc_voicing_prob.dat",
    "../resources/audio_processing/agc/agc_with_circular_buffer.dat",
    "../resources/audio_processing/output_data_fixed.pb",
    "../resources/audio_processing/output_data_float.pb",
    "../resources/audio_processing/output_data_mac.pb",
    "../resources/audio_processing/transient/ajm-macbook-1-spke16m.pcm",
    "../resources/audio_processing/transient/audio16kHz.pcm",
    "../resources/audio_processing/transient/audio32kHz.pcm",
    "../resources/audio_processing/transient/audio48kHz.pcm",
    "../resources/audio_processing/transient/audio8kHz.pcm",
    "../resources/audio_processing/transient/detect16kHz.dat",
    "../resources/audio_processing/transient/detect32kHz.dat",
    "../resources/audio_processing/transient/detect48kHz.dat",
    "../resources/audio_processing/transient/detect8kHz.dat",
    "../resources/audio_processing/transient/double-utils.dat",
    "../resources/audio_processing/transient/float-utils.dat",
    "../resources/audio_processing/transient/suppressed16kHz.pcm",
    "../resources/audio_processing/transient/suppressed32kHz.pcm",
    "../resources/audio_processing/transient/suppressed8kHz.pcm",
    "../resources/audio_processing/transient/wpd0.dat",
    "../resources/audio_processing/transient/wpd1.dat",
    "../resources/audio_processing/transient/wpd2.dat",
    "../resources/audio_processing/transient/wpd3.dat",
    "../resources/audio_processing/transient/wpd4.dat",
    "../resources/audio_processing/transient/wpd5.dat",
    "../resources/audio_processing/transient/wpd6.dat",
    "../resources/audio_processing/transient/wpd7.dat",
    "../resources/deflicker_before_cif_short.yuv",
    "../resources/far16_stereo.pcm",
    "../resources/far32_stereo.pcm",
    "../resources/far44_stereo.pcm",
    "../resources/far48_stereo.pcm",
    "../resources/far8_stereo.pcm",
    "../resources/foremanColorEnhanced_cif_short.yuv",
    "../resources/foreman_cif.yuv",
    "../resources/foreman_cif_short.yuv",
    "../resources/near16_stereo.pcm",
    "../resources/near32_stereo.pcm",
    "../resources/near44_stereo.pcm",
    "../resources/near48_stereo.pcm",
    "../resources/near8_stereo.pcm",
    "../resources/ref03.aecdump",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_1_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_1_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_1_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_1_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingDelay1_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingDelay1_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingLoss1_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingLoss1_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_Multi1_1_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_Multi1_1_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_1_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_1_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyDelay_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyDelay_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyLoss_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyLoss_0_TOF.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_UnlimitedSpeed_0_AST.bin",
    "../resources/remote_bitrate_estimator/VideoSendersTest_BweTest_UnlimitedSpeed_0_TOF.bin",
    "../resources/short_mixed_mono_48.dat",
    "../resources/short_mixed_mono_48_arm.dat",
    "../resources/short_mixed_mono_48.pcm",
    "../resources/short_mixed_stereo_48.dat",
    "../resources/short_mixed_stereo_48.pcm",
    "../resources/voice_engine/audio_tiny48.wav",
  ]
  if (is_ios) {
    bundle_data("modules_unittests_bundle_data") {
      testonly = true
      sources = modules_unittests_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  rtc_test("modules_unittests") {
    testonly = true
    defines = []
    sources = [
      "module_common_types_unittest.cc",
    ]

    deps = [
      ":module_api",
      ":module_api_public",
      "../test:test_main",
      "../test:test_support",
      "audio_coding:audio_coding_unittests",
      "audio_device:audio_device_unittests",
      "audio_mixer:audio_mixer_unittests",
      "audio_processing:audio_processing_unittests",
      "audio_processing/aec3:aec3_unittests",
      "bitrate_controller:bitrate_controller_unittests",
      "congestion_controller:congestion_controller_unittests",
      "pacing:pacing_unittests",
      "remote_bitrate_estimator:remote_bitrate_estimator_unittests",
      "rtp_rtcp:rtp_rtcp_unittests",
      "utility:utility_unittests",
      "video_coding:video_coding_unittests",
      "video_processing:video_processing_unittests",
    ]

    if (rtc_desktop_capture_supported) {
      deps += [ "desktop_capture:desktop_capture_unittests" ]
    }

    data = modules_unittests_resources

    if (is_android) {
      deps += [
        "../sdk/android:libjingle_peerconnection_java",
        "//testing/android/native_test:native_test_support",
      ]
      shard_timeout = 900
    }
    if (is_ios) {
      info_plist = "../test/ios/Info.plist"
      deps += [ ":modules_unittests_bundle_data" ]
      configs += [ "..:common_objc" ]
      ldflags = [ "-ObjC" ]
    }
  }
}
