# 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",
    "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 = [
      "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",
    ]
    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" ]
  }
}
