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