# Copyright (c) 2019 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")

rtc_library("resource_adaptation") {
  sources = [
    "adaptation_constraint.cc",
    "adaptation_constraint.h",
    "broadcast_resource_listener.cc",
    "broadcast_resource_listener.h",
    "degradation_preference_provider.cc",
    "degradation_preference_provider.h",
    "encoder_settings.cc",
    "encoder_settings.h",
    "resource_adaptation_processor.cc",
    "resource_adaptation_processor.h",
    "resource_adaptation_processor_interface.cc",
    "resource_adaptation_processor_interface.h",
    "video_source_restrictions.cc",
    "video_source_restrictions.h",
    "video_stream_adapter.cc",
    "video_stream_adapter.h",
    "video_stream_input_state.cc",
    "video_stream_input_state.h",
    "video_stream_input_state_provider.cc",
    "video_stream_input_state_provider.h",
  ]
  deps = [
    "../../api:rtp_parameters",
    "../../api:scoped_refptr",
    "../../api/adaptation:resource_adaptation_api",
    "../../api/task_queue:task_queue",
    "../../api/video:video_adaptation",
    "../../api/video:video_frame",
    "../../api/video:video_stream_encoder",
    "../../api/video_codecs:video_codecs_api",
    "../../modules/video_coding:video_coding_utility",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_task_queue",
    "../../rtc_base/experiments:balanced_degradation_settings",
    "../../rtc_base/synchronization:mutex",
    "../../rtc_base/synchronization:sequence_checker",
    "../../rtc_base/system:no_unique_address",
    "../../rtc_base/task_utils:to_queued_task",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:variant",
  ]
}

if (rtc_include_tests) {
  rtc_library("resource_adaptation_tests") {
    testonly = true

    sources = [
      "broadcast_resource_listener_unittest.cc",
      "resource_adaptation_processor_unittest.cc",
      "resource_unittest.cc",
      "video_source_restrictions_unittest.cc",
      "video_stream_adapter_unittest.cc",
      "video_stream_input_state_provider_unittest.cc",
    ]
    deps = [
      ":resource_adaptation",
      ":resource_adaptation_test_utilities",
      "../../api:scoped_refptr",
      "../../api/adaptation:resource_adaptation_api",
      "../../api/task_queue:default_task_queue_factory",
      "../../api/task_queue:task_queue",
      "../../api/video:video_adaptation",
      "../../api/video_codecs:video_codecs_api",
      "../../rtc_base:checks",
      "../../rtc_base:gunit_helpers",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_task_queue",
      "../../rtc_base:task_queue_for_test",
      "../../rtc_base/synchronization:mutex",
      "../../test:field_trial",
      "../../test:rtc_expect_death",
      "../../test:test_support",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }

  rtc_source_set("resource_adaptation_test_utilities") {
    testonly = true

    sources = [
      "test/fake_adaptation_constraint.cc",
      "test/fake_adaptation_constraint.h",
      "test/fake_frame_rate_provider.cc",
      "test/fake_frame_rate_provider.h",
      "test/fake_resource.cc",
      "test/fake_resource.h",
      "test/mock_resource_listener.h",
    ]
    deps = [
      ":resource_adaptation",
      "../../api:scoped_refptr",
      "../../api/adaptation:resource_adaptation_api",
      "../../api/task_queue:task_queue",
      "../../api/video:video_stream_encoder",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base/synchronization:sequence_checker",
      "../../rtc_base/task_utils:to_queued_task",
      "../../test:test_support",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }
}
