# 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",
    "adaptation_listener.cc",
    "adaptation_listener.h",
    "broadcast_resource_listener.cc",
    "broadcast_resource_listener.h",
    "degradation_preference_listener.cc",
    "degradation_preference_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: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",
  ]
}

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",
      "../../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_adaptation_listener.cc",
      "test/fake_adaptation_listener.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" ]
  }
}
